Поиск по артикулу модификации [Решено]

Добрый день:)
При добавлении артикулов к модификациям в msOptionsPrice2, поиска по ним в админке в таблице minishop2, да и через msearch2 на сайте не происходит, можно ли как-то это настроить?
Ann
Ann
04 сентября 2019, 09:08
modx.pro
713
0

Комментарии: 3

Ann
Ann
08 сентября 2019, 05:04
2
+1
Было решено написанием плагина, сохраняющим артикулы модификаций в аннотацию при сохранении товара.
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormSave':

        $modpar = array(
          'rid' => $id
        );

        $mod = $modx->getCollection('msopModification', $modpar);
    
        $datamod = array();

        if ($mod){
          foreach ($mod as $v){
            $qi = ['mid' => $v->get('id')];
            $opt = $modx->getObject('msopModificationOption', $qi);
            $val = '';
            if ($opt){
              $val .= $v->get('article');
            }
            $datamod[] = $val;
            $intro = implode(",", $datamod);
          };
            $res = $modx->getObject('modResource', $id);
            $res->set('introtext', $intro);
            $res->save();  
        }
        break;
}
Для обновления существующих товаров:
if(!$docs = $modx->getCollection('modResource', array(
    'template' => 7
))){return;}
foreach($docs as $doc){
    $q = $doc->get('id');
    $modpar = array(
      'rid' => $q
    );

    $mod = $modx->getCollection('msopModification', $modpar);

    $datamod = array();

    if ($mod){
      foreach ($mod as $v){
        $qi = ['mid' => $v->get('id')];
        $opt = $this->modx->getObject('msopModificationOption', $qi);
        $val = '';
        if ($opt){
          $val .= $v->get('article');
        }

        $datamod[] = $val;
        $intro = implode(",", $datamod);
      };

        $doc->set('introtext',$intro);
        $doc->save();
    }
}
    srs
    srs
    08 сентября 2019, 09:33
    0
    Еще как вариант, можно писать их а алиас.
      Артур
      28 января 2021, 16:11
      0
      Думаю стоить дополнить этот пост раз он есть в поиске. Во-первых на мой взгляд решение не самое лучшее, но достаточно простое, поэтому я его немного переделал для компактности
      ПЛАГИН
      <?php
      switch ($modx->event->name) {
          case 'OnDocFormSave':
              $sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
              $statement = $modx->prepare($sql);
              if ( $statement->execute(array($id)) ) {
                  $result = $statement->fetchAll(PDO::FETCH_COLUMN);
              }
              $resource->set('introtext', implode(',',$result));
              $resource->save();
          break;
      }
      КОД ДЛЯ КОСОЛИ, чтобы обновить товары
      <?php
      $resources = $modx->getIterator('msProduct');
      
      foreach ($resources as $resource) {
          $id = $resource->get('id');
          $sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
          $statement = $modx->prepare($sql);
          if ( $statement->execute(array($id)) ) {
              $result = $statement->fetchAll(PDO::FETCH_COLUMN);
          }
          $resource->set('introtext', implode(',',$result));
          $resource->save();
      }
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3