Как вызвать функцию Index() при создании нового товара mSearch2?

Через runProcessor (mgr/index/create) или через newObject не получается.
<?php
switch ($modx->event->name) {
        case 'OnDocFormSave':
            // Таблицу запросов могу вызвать
            $u = $modx->getCollection('mseQuery');
            echo count($u);
            
            // А таблицу слов, как?
            echo $modx->getTableName('mseWord');
            if ($resource->id == 410) {
                // Подскажите, как выполнить индексацию слов 
            }

        break;
}
R2m0x94 (Vasily)
16 февраля 2022, 20:42
modx.pro
732
0
Поблагодарить автора Отправить деньги

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

Артур Шевченко
16 февраля 2022, 20:52
0
Не знаю что за index вам нужен, но как создавать товары minishop2 программно можно глянуть
тут
    R2m0x94 (Vasily)
    16 февраля 2022, 21:07
    0
    Там, я уже был. Спасибо.

    Мне нужно добавление слов в индекс при создании товара, то есть из плагина. А настройка mse2OnBeforeSearchIndex, что-то не срабатывает и в бд слова не пишутся. От того и вопрос, как выполнить индексацию слов при том, что есть публичная функция Index()

    Индексация происходит в админке и за неё отвечает assets/components/msearch2/js/mgr/widgets/index.form.js:27
    core/components/msearch2/processors/mgr/index/create.class.php:148
      Артур Шевченко
      16 февраля 2022, 21:42
      0
      Если функция публичная, думая можно попробовать либо $modx->getService либо $modx->addPackage а потом вызывать нужный метод.
    Алексей Шумаев
    17 февраля 2022, 09:24
    +1
    Насколько я понял это необходимо:
    $modx->runProcessor(
         'mgr/index/update', 
         ['id' => $resource->id], 
         ['processors_path' => MODX_CORE_PATH.'components/msearch2/processors/']
    );
      R2m0x94 (Vasily)
      17 февраля 2022, 12:11
      0
      Спасибо, это самое, то что надо.
      Алексей Шумаев
      17 февраля 2022, 09:38
      0
      Не внимательно прочитал вопрос :-)
      На самом деле mSearch2 автоматом добавляет в индекс данные создаваемого ресурса.
      Если в данном случае этого не происходит и не получается через процессор, значит — да, что-то в системе не работает. Надо дебажить.
        R2m0x94 (Vasily)
        17 февраля 2022, 12:14
        0
        Проверил, у меня ресурс программно создаётся и даже в searchable 1 — В индекс не добавляется. Сейчас из консольки попробовал запустить процессор, всё хорошо. Ваше решение помогло, спасибо огромное, а на дебаге вот:
        Notice: Trying to access array offset on value of type int in /core/components/msearch2/phpmorphy/src/fsa/access/fsa_sparse_file.php on line 32
        Кровельный
        06 июля 2023, 15:07
        0
        Хорошая вещь, и после переиндексации слов вывести сниппет keywords_mse2.
        <?php
        /* Ключевые слова из индекса слов с ключевыми фразами или TV keywords. */
        $q = $modx->query('SELECT resource, word FROM modx_mse2_words WHERE resource = '.$modx->resource->id);
        if (is_object($q)) {
            while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
                $result .= $row['word'].', ';
            }
        }
        
        $seoKeywords = $modx->getObject('seoKeywords', array('resource' => $modx->resource->id));
        if (is_object($seoKeywords)) {
            // try seoPro
            if (!$seoKeywords->get('keywords')) {
                return mb_strtolower(substr($result,0,-2));
            } else {
                return mb_strtolower($result) . $seoKeywords->get('keywords');
            }
        } else {
            //try {$_modx->resource['keywords']}
            $resource = $modx->getObject('modResource', $modx->resource->id);
            if (!$resource->getTVValue('keywords')) {
                return mb_strtolower(substr($result,0,-2));
            } else {
                return mb_strtolower($result) . $resource->getTVValue('keywords');
            }
        }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8