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

Александр, здравствуйте! С наступающим Вас! Пробую подключить свои поля в данном случае поле (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

Александр Мальцев
Александр Мальцев
Здравствуйте! С новым годом!
Чтобы их добавить в индекс нужно создать плагин для прослушивания события 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;
}
Александр
Александр
Здравствуйте! Александр, огромное спасибо за решение. Пытаюсь добавить второе поле, в этих параметрах плагина:
$key = 'poletest, poletest2';
$c->select('poletest, poletest2');
ошибок нет, но не работает, видимо делаю не правильно?
Александр Мальцев
Александр Мальцев
Здравствуйте! Пожалуйста!
В этом случае плагин можно организовать следующим образом (в 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;
}
Александр
Александр
Александр, здравствуйте! Большое спасибо.