<?=
$this->macros('catalog', 'search');
?>
Пример вызова
udata://catalog/search/(market/hamsters)/(cenovye_svojstva)(short_info)
XML-ответ UData
Запрос: udata://catalog/search/(market/hamsters)/(cenovye_svojstva)(short_info)
<udata category_id="44" module="catalog" method="search" generation-time="0.005478">
<group name="cenovye_svojstva" title="Ценовые свойства">
<field name="price" title="Цена" data-type="price"/>
<field name="akciya" title="akciya" data-type="boolean">
</group>
<group name="short_info" title="Краткая информация">
<field name="ves" title="Вес" data-type="float" />
<field unfilter_link="?" name="vid" title="Вид" data-type="relation">
<values>
<item id="27178" filter_link="?fields_filter%5Bvid%5D=27178" unfilter_link="?">Ангорский</item>
<item id="27195" filter_link="?fields_filter%5Bvid%5D=27195" unfilter_link="?">Беговой</item>
<item id="27188" filter_link="?fields_filter%5Bvid%5D=27188" unfilter_link="?">Безродный</item>
<item id="27216" filter_link="?fields_filter%5Bvid%5D=27216" unfilter_link="?">Голодный</item>
<item id="27204" filter_link="?fields_filter%5Bvid%5D=27204" unfilter_link="?">Джунгарский</item>
<item id="27199" filter_link="?fields_filter%5Bvid%5D=27199" unfilter_link="?">Упитанный</item>
</values>
</field>
<field unfilter_link="?" name="pol" title="Пол" data-type="relation">
<values>
<item id="27179" filter_link="?fields_filter%5Bpol%5D=27179" unfilter_link="?">Самец</item>
<item id="27205" filter_link="?fields_filter%5Bpol%5D=27205" unfilter_link="?">Самка</item>
</values>
</field>
</group>
</udata>
Запрос: udata://catalog/search/(market/hamsters)/(cenovye_svojstva)(short_info)?fields_filter[price][0]=10&fields_filter[akciya]=1&fields_filter[pol]=27179&fields_filter[vid]=27178
Параметры: цена >10, все по акции, пол — самец, вид — ангорский.
<udata category_id="44" module="catalog" method="search" generation-time="0.005853">
<group name="cenovye_svojstva" title="Ценовые свойства">
<field name="price" title="Цена" data-type="price">
<value_from>10</value_from>
</field>
<field name="akciya" title="akciya" data-type="boolean">
<checked> checked</checked>
</field>
</group>
<group name="short_info" title="Краткая информация">
<field name="ves" title="Вес" data-type="float"/>
<field unfilter_link="?" name="vid" title="Вид" data-type="relation">
<values>
<item id="27178" filter_link="?fields_filter%5Bvid%5D=27178" unfilter_link="?" selected>Ангорский</item>
<item id="27195" filter_link="?fields_filter%5Bvid%5D=27195" unfilter_link="?">Беговой</item>
<item id="27188" filter_link="?fields_filter%5Bvid%5D=27188" unfilter_link="?">Безродный</item>
<item id="27216" filter_link="?fields_filter%5Bvid%5D=27216" unfilter_link="?">Голодный</item>
<item id="27204" filter_link="?fields_filter%5Bvid%5D=27204" unfilter_link="?">Джунгарский</item>
<item id="27199" filter_link="?fields_filter%5Bvid%5D=27199" unfilter_link="?">Упитанный</item>
</values>
</field>
<field unfilter_link="?" name="pol" title="Пол" data-type="relation">
<values>
<item id="27179" filter_link="?fields_filter%5Bpol%5D=27179" unfilter_link="?" selected>Самец</item>
<item id="27205" filter_link="?fields_filter%5Bpol%5D=27205" unfilter_link="?">Самка</item>
</values>
</field>
</group>
</udata>
Если необходимо фильтровать одновременно по двум значениями выбранного поля, то попробуйте запрос вида udata://catalog/search/(market/hamsters)/(cenovye_svojstva)(short_info)?fields_filter[pol][]=Самец&fields_filter[pol][]=Самка.
При таком синтаксисе все возможные значения собираются в массив.
Элементы и атрибуты
<group>
Ветвь, описывающая группу полей со списком полей — элементами field
.
- @name
-
Имя группы полей.
- @title
-
Заголовок группы полей. Отображается, например, в административном интерфейсе при редактировании объекта.
<field>
Элемент, описывающий отдельное поле. В случае некоторых типов поля (см. примеры вызовов выше) могут появляться вложенные элементы.
- @name
-
Имя поля.
- @unfilter_link
-
Параметры для ссылки фильтрации без этого поля. Этот список параметров формируется следующим образом:
Предположим, что к URL страницы
my_page
, откуда вызывается макрос, добавлен такой набор параметров:~/my_page?fields_filter[поле1]=знач1&fields_filter[поле2]=знач2&fields_filter[поле3]=знач3
Тогда у поля с
name="поле1"
атрибутunfilter_link
будет равен:"?fields_filter[поле2]=знач2&fields_filter[поле3]=знач3"
У поля с
name="поле2"
атрибутunfilter_link
будет равен:"?fields_filter[поле1]=знач1&fields_filter[поле3]=знач3"
У поля с
name="поле3"
атрибутunfilter_link
будет равен:"?fields_filter[поле1]=знач1&fields_filter[поле2]=знач2"
- @title
-
Заголовок поля. Отображается, например, в административном интерфейсе при редактировании объекта.
- @data-type
-
Тип поля. Может принимать следующие значения: int, string, text, relation, file, img_file, swf_file, date, boolean, wysiwyg, password, tags, symlink, price, float, counter, optioned.
Вывод осуществляется по шаблону, указанному в параметре template (по умолчанию default.tpl
).
Пример вызова
Простой вывод фильтра по разделу каталога /sample_category1/sample_category2/ : %catalog search('/sample_category1/sample_category2/', 'short_info sample_group')%.
Простой вывод фильтра по разделу каталога /sample_category1/sample_category2/ по пользовательскому шаблону: %catalog search('/sample_category1/sample_category2/', 'short_info sample_group', 'sample')%.
Используемые блоки шаблона
search_block
Общий блок для вывода фильтра.
- %category_id%
-
Id категории каталога, в которой будет осуществляться поиск.
- %lines%
-
Указывает место, куда будут выведены фильтры.
search_block_line
Блок для вывода каждого поля любого типа.
- %selector%
-
Указывает место, куда будет выведено поле. Поле выводится по блоку текущего шаблона, в соответствии с типом поля.
- %list-class-first%
-
в случае, если элемент первый, выводит "first"
- %list-class-last%
-
в случае, если элемент последний, выводит "last"
- %list-class-odd%
-
в случае, если элемент четный, выводит "odd"
- %list-class-even%
-
в случае, если элемент нечетный, выводит "even"
- %list-position%
-
вставляет порядковый номер в списке
search_block_line_text
Блок для вывода текстовых и целочисленных полей фильтра.
- %name%
-
Имя поля.
- %title%
-
Заголовок поля.
- %value%
-
Значение поля, которое использовалось в прошлой фильтрации.
search_block_line_relation
Блок для вывода полей фильтра, являющихся словарем.
- %name%
-
Имя поля.
- %title%
-
Заголовок поля.
- %items%
-
Указывает место, куда будет выведено каждое значение словаря, для вывода каждого значения используется блок search_block_line_item_relation текущего шаблона.
search_block_line_item_relation
Блок для вывода значения словаря. Если отсутствует, то будет выведен список из имен значений.
- %object_id%
-
Id значения.
- %object_name%
-
Имя значения.
search_block_line_price
Блок для вывода полей фильтра, имеющих тип «цена» (price) и «число с точкой» (float).
- %name%
-
Имя поля.
- %title%
-
Заголовок поля.
- %value_from%
-
Значение поля от, которое использовалось в прошлой фильтрации.
- %value_to%
-
Значение поля до, которое использовалось в прошлой фильтрации.
Название
%catalog search()% — Выводит фильтр по товарам.
Параметры: catalog search(category_id, group_names [, template = 'default', type_id])
- category_id
-
Id или путь (от корня сайта) к категории товаров, в которой осуществляется поиск.
- group_names
-
Имена групп свойств товара (разделенные пробелом), которые участвуют в фильтре.
- template
-
Имя шаблона, по которому формируется форма с фильтром. В XSLT-шаблонизаторе игнорируется.
- type_id
-
Идентификатор типа данных, объекты которого будут участвовать в фильтре.
Описание
Выводит фильтр по товарам категории, указанной в параметре category_id. Если category_id не указан, берется id текущей страницы. Параметр group_names задает группы свойств, которые будут участвовать в фильтре (разделитель групп — пробел). Чтобы в фильтре участвовали только объекты определенного типа данных из указанной категории, необходимо передать значение этого типа в параметре type_id. Для того, чтобы свойство товара участвовало в фильтре, необходимо в модуле «Шаблоны данных» поставить галочки «Фильтруемое» и «Видимое» в настройках соответствующих полей.
Внимание: В режиме совместимости модулей (автоматически включается, если используется PHP7) описываемый устаревший макрос отсутствует. Для получения данных фильтров можно использовать оптимизированный макрос catalog getSmartFilters().