studiotata

Разговор двух админов:
- Слушай, я давно не писал ручкой. Ты не знаешь, где у нее можно поменять раскладку с русской на английскую?

Обучение работе в modX.
Как заставить msearch искать по артикулу

Один из клиентов попросил сделать ему поиск в его интернет-магазине по артикулу товара. Казалось бы ничего сложного, любые поисковые модули Modx умеют искать по любым полям ресурса и любым дополнительным TV-полям.

Но — у клиента стоял miniShop2, который использует отдельные таблицы для хранения ряда характеристик товара, включая и его артикул (таблица ms2_products, поле article). В качестве поискового модуля стоял mSearch, от того же «производителя».

Чтобы их подружить вместе, нужно добавить пару строк в плагин mSearchIndexer:

В строку 35 (перед «$tvs = '';») вставляем код


    $art = @$modx->query('SELECT article FROM '.$modx->config['table_prefix'].'ms2_products WHERE id='.$resource->get('id'))->fetchColumn();
    if($art) $text .= $art.' ';

Теперь остаётся только пересохранить все товары.

Для тех, кто не знает, как это делать, приведём пример сниппета, который нужно один раз запустить:


$q  = $modx->newQuery('modResource', array('template:IN'=>array(3,16)));
$c  =  $modx->getCollection('modResource', $q);
$j  =  0;
foreach($c as $res) {
    $modx->invokeEvent('OnDocFormSave', array('mode' => modSystemEvent::MODE_UPD, 'id' => $res->get('id'), 'resource' => &$res));
    unset($res);
}
return $j . ' ресурсов обработано';

В 'template:IN'=>array(3,16) вставьте номера шаблонов товаров на вашем сайте. Если товаров много (больше 2000) или хостинг дохлый, сниппету может не хватить ресуров для обработки всех товаров сразу, поэтому нужно будет их обрабатывать по частям.

 

Если вас интересует, как заставить mSearch искать точные совпадения фраз - пишите.

 

Если остались вопросы - напишите их в комментариях. Мы ответим очень быстро!