ответ очень прост, хотя никак не очевиден)
используйте <xsl:apply-templates select="document('udata://catalog/search/id')" />
, где id номер каталога с товарами (любого ) или более правильный вариант
<xsl:apply-templates select="document('udata://catalog/search////11')" />
пояснение:
дело в том что для того чтобы система вывела поля фильтра она должна знать какие поля выводить для фильтрации (для этого в шаблоне данных у поля должна стоять галочка "фильтровать"), но это еще не все система же должна знать в каком типе данных искать поля для фильтрации, по умолчпнию фильтр выводит поля относящиеся к типу данных который доминантен в данном разделе (раздел это первый параметр макроса, если он не указан берется id текущей страницы), в первом варианте мы подкинули системе id раздела внутри которого лежат объекты каталога и она правильно определила тип домининрующих страниц., но так как к разделу привязывать не стоит (вдруг его удалят).
В макросе search есть еще один параметр, который не описали в документации. Параметры макроса:
public function search($category_id = false, $group_names = "", $template = "default", $type_id = false)
первые 3 описанны, а вот 4 и есть тот тип данных (hierarhy type id)? который система и определяет пj id раздела (наш первый вариант), и если указать при вызове макроса search параметр $type_id , то внезависимости от места вызова система будет выводить поля этого типа данный (11 это id типа данных "объект каталога"). отсюда и получилась у нас строчка <xsl:apply-templates select="document('udata://catalog/search////11')" />
сейчас форма фильтра сслается на
?fields_filter[price][1]=&fields_filter[price][0]=&fields_filter[brend]=&fields_filter[tip_sumki]=&fields_filter[diagonal_ekrana]=611&fields_filter[material]=&fields_filter[cvet]=
надо в шаблоне в форме в параметре action указать вначале страницу на которой будут выводиться все объекты каталога, тогда при применении фильтра вас перекинет на эту страницу а так как фильтры уже будут в адресной строке, то выведуться не все товары, а лишь отфильтрованные.
то есть делайте страницу в админе типа "результаты фильтра" в область контента вписывайте макрос (http://wiki.umisoft.ru/%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%BF%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D0%BC_%D0%BF%D0%BE_%D0%B2%D1%81%D0%B5%D0%BC%D1%83_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D1%83%3F , http://wiki.umisoft.ru/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0_%D0%BF%D0%BE_%D0%B2%D1%81%D0%B5%D0%BC_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0%D0%BC)
для xslt как-то так
<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" />
А, чего-то не выходит фильтр получить на главной. В файл special-offers вставляю код <xsl:template match="result[page/@is-default = '1']" priority="1">
<xsl:apply-templates select="document('udata://catalog/search////11')" />
<xsl:apply-templates select="document('usel://special-offers/?limit=&specials-limit;')" mode="special-offers" />
</xsl:template>
вроде именно это место, ан нет ничего :(
а как вывод результатов все же сделать для xslt, тоже делать страницу контентную? и туда писать <xsl:template match="/result[page/@id = 11111]">
<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" />
</xsl:template>
Здравствуйте. Решаю аналогичную задачу, делаю фильтр по всему каталогу по цене. Не получается сделать фильтр по всему каталогу по конкретным полям при указание типа
Сформировал такой запрос:
http://localhost/udata/catalog/search/(36)/(cenovye_svojstva)//113
Ответ такой -
<udata xmlns:xlink="http://www.w3.org/TR/xlink" category_id="36" module="catalog" method="search" generation-time="0.353681">
<group name="cenovye_svojstva" title="Ценовые свойства">
<field name="price" title="Цена" data-type="price"/>
</group>
</udata>
Вроде бы всё правильно, но мне надо задавать минимальные и максимальные значения для price.
http://localhost/udata/catalog/search/(156)/(cenovye_svojstva)?fields_filter[price][0]=10&fields_filter[price][1]=110
ответ такой:
<udata xmlns:xlink="http://www.w3.org/TR/xlink" category_id="156" module="catalog" method="search" generation-time="0.016223">
<group name="cenovye_svojstva" title="Ценовые свойства">
<field name="price" title="Цена" data-type="price">
<value_from>10</value_from>
<value_to>110</value_to>
</field>
</group>
</udata>
Пытаюсь так же сделать для варианта с передачей hierarhy type id:
http://localhost/udata/catalog/search/(36)/(cenovye_svojstva)?fields_filter[price][0]=10&fields_filter[price][1]=110//68
ответ - <udata xmlns:xlink="http://www.w3.org/TR/xlink" category_id="36" module="catalog" method="search" generation-time="0.005078"/>
Через var_dump() вывел $_REQEST, посмотрел переменные и пришёл к выводу, что когда запрос выполняется таким образом - всё после символ ? воспринимается как 2-ой параметр. Собственно не получается сделать фильтр по всему каталогу по конкретным полям, хотелось бы узнать как это решить...
Пока решил так - public function search($category_id = false, $group_names = "", $template = "default", $type_id = 68)
ответ очень прост, хотя никак не очевиден)
используйте <xsl:apply-templates select="document('udata://catalog/search/id')" />
, где id номер каталога с товарами (любого ) или более правильный вариант
<xsl:apply-templates select="document('udata://catalog/search////11')" />
пояснение:
дело в том что для того чтобы система вывела поля фильтра она должна знать какие поля выводить для фильтрации (для этого в шаблоне данных у поля должна стоять галочка "фильтровать"), но это еще не все система же должна знать в каком типе данных искать поля для фильтрации, по умолчпнию фильтр выводит поля относящиеся к типу данных который доминантен в данном разделе (раздел это первый параметр макроса, если он не указан берется id текущей страницы), в первом варианте мы подкинули системе id раздела внутри которого лежат объекты каталога и она правильно определила тип домининрующих страниц., но так как к разделу привязывать не стоит (вдруг его удалят).
В макросе search есть еще один параметр, который не описали в документации. Параметры макроса:
public function search($category_id = false, $group_names = "", $template = "default", $type_id = false)
первые 3 описанны, а вот 4 и есть тот тип данных (hierarhy type id)? который система и определяет пj id раздела (наш первый вариант), и если указать при вызове макроса search параметр $type_id , то внезависимости от места вызова система будет выводить поля этого типа данный (11 это id типа данных "объект каталога"). отсюда и получилась у нас строчка <xsl:apply-templates select="document('udata://catalog/search////11')" />
Как я вижу - у меня сходная задача, то есть вывод фильтров у меня такой:
<xsl:apply-templates select="document(concat('udata://catalog/search////', 132))"/>
где 132 это ID типа данных объекта каталога, по параметрам которого необходимо делать поиск по фильтрам.
Вывод этих фильтров успешно выводится у меня в шаблоне "сквозняком", то есть на всех страницах сайта, включая и на главной странице сайта и на всех остальных контентных, новостных и прочих.
Но на данный момент результаты поиска по фильтрам выводятся только в разделах каталога.
Вопрос вот в чём: как вывести эти результаты поиска на отдельную контентую страницу (специально созданную в структуре сайта) ? Или как выводить эти результаты на главную страницу каталога http://domen.ru/shop/, если можно обойтись без отдельной контентной страницы ?
Ведь пользователь, допустим, находясь на главной странице или к примеру на странице новостей вдруг захочет воспользоваться поиском по каталогу и результатов не увидит...
В идеале хотелось бы вывести результаты поиска по фильтрам на главный раздел каталога, который выводится по такому шаблону:
<xsl:template match="result[page/@type-id=82]">
<div umi:element-id="{$document-page-id}" umi:field-name="descr" umi:empty="&empty-page-content;">
<xsl:value-of select=".//property[@name = 'descr']/value" disable-output-escaping="yes" />
</div>
<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" />
</xsl:template>
где 82 это ID типа данных "Раздел каталога"