Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Поиск по каталогу (поиск товаров/объектов)

Автор samРаздел Шаблоны XSLT

Ответов: 14
Просмотров: 3008
Последний ответ 26 Января 2015, 12:07:22
от Axiomateria
Вывод в фильтрах по каталогу значение справочника для конкретной категории

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 1
Просмотров: 366
Последний ответ 29 Мая 2015, 12:51:38
от admin
Поиск по каталогу только среди товаров из активных разедлов

Автор khpvolgaРаздел Шаблоны XSLT

Ответов: 3
Просмотров: 334
Последний ответ 04 Февраля 2016, 20:36:23
от crazygeorgio
Поиск по каталогу с подсказкой

Автор samРаздел Макросы UMI.CMS

Ответов: 5
Просмотров: 211
Последний ответ 17 Ноября 2016, 22:56:22
от sam
Пустые теги в результатах поиска

Автор vsevaРаздел Настройка системы и модулей

Ответов: 1
Просмотров: 1176
Последний ответ 09 Июля 2012, 16:31:22
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

Zadira

  • *
  • 4
  • +0/-0
    • Просмотр профиля
Добрый день,
Подскажите как реализовать фильтры по параметрам в XSLT шаблоне на примере стандартного шаблона "Современный интернет-магазин"?
Если зайти в категорию с товарами, то фильтры отображаются, а вот выводя тот же макрос на главной странице, он не работает.
С UMI.CMS работать начал только не давно, это первый проект на этой системе, еще очень многое не понятно.

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
отпишите сюда какую строчку вы вставляете в шаблон на главной

*

Zadira

  • *
  • 4
  • +0/-0
    • Просмотр профиля
отпишите сюда какую строчку вы вставляете в шаблон на главной

Вставляю вот такую строчку

<xsl:apply-templates select="document('udata://catalog/search')" />

На страницах контента фильтры работают, в смысле отображаются,  но ни где больше не работают.

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
ответ очень прост, хотя никак не очевиден)
используйте
<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')" />

*

Zadira

  • *
  • 4
  • +0/-0
    • Просмотр профиля
Огромное спасибо за разъяснение. Очень помогло.
Я указал ID своего типа данных и все заработало.
Но вот теперь другая проблема, выбирая какие то параметры не отображается результат фильтрации.
После нажатия в строке адреса параметры переданы, а результата нет.

http://localhost/?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]=

Если я правильно понимаю, то надо под вызовом макроса поиска вставить макрос вывода объектов каталога?

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
сейчас форма фильтра сслается на
?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)')" />


*

sergeron

  • **
  • 59
  • +2/-0
    • Просмотр профиля
А, чего-то не выходит фильтр получить на главной. В файл 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>
вроде именно это место, ан нет ничего :(

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
а 11 - точно правильный id типа данных в вашей системе?

*

sergeron

  • **
  • 59
  • +2/-0
    • Просмотр профиля
слепая вера в гуру подвела :)  id=71

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
а ведь писал об этом, в скучном куске текста срок так на 7  ;)

*

sergeron

  • **
  • 59
  • +2/-0
    • Просмотр профиля
а как вывод результатов все же сделать для xslt, тоже делать страницу контентную? и туда писать
<xsl:template match="/result[page/@id = 11111]">
    <xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" />
    </xsl:template>

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
и такой вариант возможен. Я, так понимаю, у вас получается страница с id = 11111, на которой выводятся все товары и куда вы редиректите форму фильтра?

*

sergeron

  • **
  • 59
  • +2/-0
    • Просмотр профиля
хм... не выводится :(   
А по-умолку на какую страницу выводится результат фильтрации? Есть спецстраница или туду же, где форма висит?

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
по умолчанию на туже страницу где фильтр

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Здравствуйте. Решаю аналогичную задачу, делаю фильтр по всему каталогу по цене. Не получается сделать фильтр по всему каталогу по конкретным полям при указание типа

Сформировал такой запрос:
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)
« Последнее редактирование: 25 Сентября 2012, 11:07:16 от Rodogor »