каталог товаров и фильтр

#
каталог товаров и фильтр
Добрый день,
существует разработанный сайт на hoscms с разделом Продукция, исполненном на модуле Каталог товаров. Сейчас заказчик хочет добавить маленький фильтр по одному текстовому доп.свойству. Возможно ли это или нужно переводить весь каталог на Интернет-магазин?
so I drift down... in my steep-sided un-reality...
#
Re: каталог товаров и фильтр
Реализовать фильтр по основным или дополнительным свойствам возможно и на базе инфосистем. Просто, если бы каталог товаров был реализован на базе интернет-магазина, то объем работ по организации фильтра был бы минимальным(там уже все реализовано стандартно, остается только добавить это самое доп. свойство). А вот в случае с  инфосистемами придется вносить изменения в соответствующую тип. дин. страницу(для анализа полученных данных, введенных пользователем фильтра на странице сайта), а также в XSL-шаблон либо в макет или шаблон страницы(для вывода самой формы фильтрации)
#
Re: каталог товаров и фильтр
Зато за нами останется полезный опыт...
я правильно понимаю, что для начала нужно научить один из lib-файлов понимать гет-запрос и перекладывать его значение в external_properties по примеру как это делает магазин в lib17? а какой именно lib работает в каталоге?
so I drift down... in my steep-sided un-reality...
#
Re: каталог товаров и фильтр
вроде бы lib42
пока научила разбирать гет в external_properties в том месте где нужно (вроде бы).
подскажите куда дальше копать?
so I drift down... in my steep-sided un-reality...
#
Re: каталог товаров и фильтр
После получения гет-запроса там же в тип. дин. странице(lib40, т.к. lib42 - это инфосистема вопросы-ответы и т.д., а каталог товаров реализован на lib40) необходимо добавить конструктор запроса след. вида(более подробно см. в API для класса инфосистем):
$element['type']=1;
$element['prefix'] = 'and (';
$element['property_id'] = 144;
$element['if'] = '=';
$element['value'] = '1';
$element['sufix']=')';
$property['select'][]=$element;
$result['group'] = false;
$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id,$result['group'],'СписокТоваров', $items_on_page,$items_begin,$external_propertys,$property);

Т.е. в качестве результата будут выданы все инфоэлементы(независимо от группы, которой они принадлежат в данной инфосистеме), у которых доп. свойство с идентификатором 144 принимает значение 1.
#
Re: каталог товаров и фильтр
Ура, получилось )

теперь список товаров понимает, когда ему приходит урл виде /production/doors/?type=Euro
но есть загвоздка... я пытаюсь построить селект с опциями, соответствующими введенным значениям в дополнительное свойство товара. Для этого нужно опросить дополнительное свойство товара всех товаров в группе. А группа уже прошла фильтр и выдает по запросу select="/document/blocks/items/item" всего два товара. или соответствующее числу товаров на странице количество...
so I drift down... in my steep-sided un-reality...
#
Re: каталог товаров и фильтр
Ой, helene, я Вам сообщение предыдущее случайно оставила под логином AlexeyL
А по поводу Вашего вопроса: где именно Вы пытаетесь строить селект - в XSL-шаблоне либо в коде тип. дин. страницы?
#
Re: каталог товаров и фильтр
Добрый день, Наталья,

я пытаюсь строить селект с выпадающим списком в XSL-шаблоне, но возможно это я от незнания надо в lib-е?
so I drift down... in my steep-sided un-reality...
#
Re: каталог товаров и фильтр
helene, доброе утро! Если я Вас правильно поняла - получается, что у Вас в XML попадают только товары из текущей группы, либо заданное количество товаров. И это правильно с точки зрения работы инфосистемы "по умолчанию". А Вам нужны все товары? Чтобы получить значения их доп. свойства и построить селект там же в XSL-шаблоне?
Ну тогда, в тип. дин. странице перед показом инфосистемы передавайте в качестве значения параметра $result['group'] = false(т.е. осуществлять выбор товаров из ВСЕЙ инфосистемы и т.о. они ВСЕ попадут в XML). Если при этом на сайте при заходе в группу Вам нужно отображать товары только этой группы, то передавайте еще через external_properties идентификатор текущей группы и обрабатывайте XML(содержащий все товары) с целью выбора товаров, у которых group_id соответствует переданному значению текущей группы через  external_properties.
А если я Вас неправильно поняла, тогда объясните ситуацию еще подробнее(желательно на конкретном примере
#
Re: каталог товаров и фильтр
мммм
я еще не пробовала так реализовать, но наколько я понимаю это не поможет
смотрите:
выборка идет из одной группы, в группе 46 товаров, в каждом есть текстовое доп. свойство тип (type), выводятся они по 10. Там написаны варианты Euro, Decor, Classic и другие слова которые придут в голову клиенту. В первых двух десятках присутствуют Euro и Decor, с третьего начинает появляться также и Classic
я делаю в определенном месте (до вывода товара) селект
<select>
   <xsl:apply-templates select="blocks/items/item" mode="options"/>
</select>

и соответственно сажаю блок

<!-- ======================================================== -->
<!-- Попытка построения селекта -->
<!-- ======================================================== -->
<xsl:template match="blocks/items/item" mode="options">
   <xsl:if test="item_propertys/item_property/type != ''">
      <option><xsl:value-of disable-output-escaping="yes" select="item_propertys/item_property/type"/></option>
   </xsl:if>
</xsl:template>

на самом деле это неправильно, так как вывод будет выглядеть
<option>Euro</option>
<option>Euro</option>
<option>Decor</option>
<option>Euro</option>
<option>Decor</option>
...
то есть надо делать вывод не сразу в опции, а сначала в массив, который потом нужно унифицировать (это так называется?) чтобы значения не повторялись, и только потом вывести его в опции. но пока пойдет и так.
проблема в том, что таких опций возникает ровно 10, т.е. столько сколько товаров на странице, и значение Classic не фигурирует. оно появится только на третьей странице, а мы находимся на первой.
Также, если страница уже прошла фильтр с результатом в 2 товара, то тогда в селект падает только 2 опции вместо всех 46.
Я подозреваю, что это можно решить и в xsl-шаблоне, если взять другой узел, а не blocks/items/item - ведь xml содержит полные 46 товаров группы, я смотрела.
Либо же сажать генерацию селекта в тип. дин. странице до обработки apply_filter и до листинга.

ps использовать вывод из всех групп напротив не нужно, так как там разные товары и к ним разные типы.
so I drift down... in my steep-sided un-reality...
Авторизация