Курс по JavaScript от Хекслет

Как использовать свои поля в поиске mSearch2

Александр
Александр
1,2K
4
Содержание:
  1. Комментарии
Александр, здравствуйте! С наступающим Вас! Пробую подключить свои поля в данном случае поле (poletest) в поиске «mSearch2», в вызове сниппета «mSearchForm» сделал так:
[[!mSearchForm?
&loadModels=`extendresource`
&leftJoin=`{
  "extendresource": {
      
      "class": "extendResource",
      "alias": "extFields",
      "on": "extFields.resource = modResource.id"
     
    }
  }`
  &select=`{"extFields": "extFields.poletest as poletest"
  }`  
]]
далее в чанк tpl.mSearch2.ac добавил это поле, так получилось вывести значения своего поля в предварительных результатах формы поиска «mSearch2» которые появляются на лету при вводе запроса в форме поиска, но в поиске свои поля не участвуют, как нужно и можно сделать, чтобы свои поля компонента extendresource участвовали в поиске, подскажите пожалуйста?

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

  1. Александр Мальцев
    Александр Мальцев
    2021-01-04 13:11:06
    Здравствуйте! С новым годом!
    Чтобы их добавить в индекс нужно создать плагин для прослушивания события mse2OnBeforeSearchIndex:
    <?php
    switch ($modx->event->name) {
       case 'mse2OnBeforeSearchIndex':
          $key = 'poletest';
          $modx->addPackage('extendresource', $modx->getOption('core_path').'components/extendresource/model/');     
          $mSearch2->fields[$key] = 5;
          $c = $modx->newQuery('extendResource', array(
            'resource' => $resource->id
          ));
          $c->select('poletest');
          if ($c->prepare() && $c->stmt->execute()) {
            $value = $c->stmt->fetchAll(PDO::FETCH_COLUMN);
            if (!empty($value[0])) {
              $resource->set($key, $value);
            }
          }
          break;
    }
    
  1. Александр
    Александр
    2021-01-05 17:44:14
    Здравствуйте! Александр, огромное спасибо за решение. Пытаюсь добавить второе поле, в этих параметрах плагина:
    $key = 'poletest, poletest2';
    $c->select('poletest, poletest2');
    ошибок нет, но не работает, видимо делаю не правильно?
  • Александр Мальцев
    Александр Мальцев
    2021-01-24 09:12:35
    Здравствуйте! Пожалуйста!
    В этом случае плагин можно организовать следующим образом (в key указываем имя поля, а в weight — его вес):
    <?php
    switch ($modx->event->name) {
       case 'mse2OnBeforeSearchIndex':
          $modx->addPackage('extendresource', $modx->getOption('core_path').'components/extendresource/model/'); 
          $fields = [
            ['key' => 'poletest', 'weight' => 5],
            ['key' => 'poletest2', 'weight' => 5]      
          ];
          foreach ($fields as $field) {
            $key = $field['key'];
            $weight = $field['weight'];
            $mSearch2->fields[$key] = $weight;
            $c = $modx->newQuery('extendResource', array(
              'resource' => $resource->id
            ));
            $c->select($key);
            if ($c->prepare() && $c->stmt->execute()) {
              $value = $c->stmt->fetchAll(PDO::FETCH_COLUMN);
              if (!empty($value[0])) {
                $resource->set($key, $value);
              }
            }
          }
          break;
    }
  • Александр
    Александр
    2021-02-05 23:11:52
    Александр, здравствуйте! Большое спасибо.