ПОИСК / Ограничиваем поиск только по каталогу товаров

Заметка создана: 08 марта 2024 г.
Настройка Типовой динамической страницы для поиска только товаров магазина.

Код Типовой динамической страницы "Поиск"

<?php

if (Core::moduleIsActive('search'))
{
$oSite = Core_Entity::factory('Site', CURRENT_SITE);
$Search_Controller_Show = new Search_Controller_Show($oSite);
$Search_Controller_Show
->limit(Core_Page::instance()->libParams['itemsOnPage'])
->parseUrl()
->len(Core_Page::instance()->libParams['maxlen'])
->query(Core_Array::getGet('text'))
->structure(Core_Page::instance()->structure);
//
// 'module_id' => 3 - здесь указываем id интернет-магазина
//
$Search_Controller_Show->modules(
array(
3 =>array(array('module_id' => 3, 'module_value_type' => 2))
)
);
$Search_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName(Core_Page::instance()->libParams['xsl'])
)
->show();
}
else
{
?>
<h1>Поиск</h1>
<p>Функционал недоступен, приобретите более старшую редакцию.</p>
<p>Модуль &laquo;<a href="http://www.hostcms.ru/hostcms/modules/search/">Поиск по сайту</a>&raquo; доступен в редакциях &laquo;<a href="http://www.hostcms.ru/hostcms/editions/corporation/">Корпорация</a>&raquo;, &laquo;<a
href="http://www.hostcms.ru/hostcms/editions/business/">Бизнес</a>&raquo;, &laquo;<a
href="http://www.hostcms.ru/hostcms/editions/small-business/">Малый бизнес</a>&raquo; и &laquo;<a
href="http://www.hostcms.ru/hostcms/editions/my-site/">Мой сайт</a>&raquo;.</p>
<?php
}
Class Search_Controller_Show
Доступные методы:
  • query($query) поисковый запрос
  • inner($inner) поиск по внутренним данным, например, Helpdesk. По умолчанию 0 - внешние данные, 1 - внутренние данные
  • modules($modules) массив условий поиска по модулям
  • itemsForbiddenTags(array('description')) массив тегов связанных элементов, запрещенных к передаче в генерируемый XML
  • offset($offset) смещение, с которого выводить информационные элементы, по умолчанию 0
  • limit($limit) количество выводимых элементов
$oSite = Core_Entity::factory('Site', CURRENT_SITE);
$Search_Controller_Show = new Search_Controller_Show($oSite);
$Search_Controller_Show
->limit(Core_Page::instance()->libParams['result_on_page'])
->parseUrl()
->len(Core_Page::instance()->libParams['maxlen'])
->query(Core_Array::getGet('text'));
$Search_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName(Core_Page::instance()->libParams['xsl'])
)
->show();
Массив условий поиска по модулям позволяет ограничить область поиска по модулям и типам индексируемого контента. Ключами массива являются номера модулей, а значениями — массив идентификаторов элементов. Номера модулей:

0 – Структура сайта;
1 – Информационные системы;
2 – Форум;
3 – Интернет-магазин;
4 – HelpDesk.
Пример поиска по информационной системе с номером 5 и 7, а также по магазину с номером 17.
$Search_Controller_Show
->modules(
    array( 1 => array (5, 7), 3 => array (17) )
);

Пример поиска по информационной системе с номером 5 и 7 (с дополнительным условием поиска только по информационным элементам), а также по магазину с номером 17.

$Search_Controller_Show
    ->modules(
     array( 1 => array (5, array('module_id' => 7, 'module_value_type' => 2)), 3 => array (17)) );
При указании массива с дополнительными условиями он может принимать следующие аргументы:

module_id — целое число, ID сущности, например, магазин с кодом 7
module_value_type — целое число или массив, ID типа, например, 1 - группа, 2 - элемент (или товар)
module_value_id — целое число или массив, ID сущности указанного типа (например, ID товара или группы) при поиске только по ним.