Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)

Модератор
#
Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)

Описание задачи:
Цитата:
Есть каталог тюнинга на автомобили по категориям, например
- передний обвес
- задний обвес
- спойлера

Один обвес может подходить к нескольким моделям автомобилей, модели указываются метками.

Поиск должен производиться по модельно, нажатием на облако моделей, т.е. в каждый вид товара в метки указывается название автомобиля, и при нажатии на метку вылетает все что относится к этой модели, но необходимо сделать чтобы это не просто кучей высыпалось а было отсортировано по папкам.

т.е. нажимаем Infiniti FX вылезают папки (либо название папки сверху и открытый список внизу)
- передний обвес
- задний обвес
- спойлера

а внутри уже лежит только все для FX


Решение задачи:
1. В типовой динамической странице фрагмент

            // При выводе тэгов вывод элементов ведется из всех групп
            $param['current_group_id'] = false;
заменяем на

            // При выводе тэгов вывод элементов ведется из всех групп
            //$param['current_group_id'] = false;

2. В XSL-шаблоне "МагазинКаталогТоваров" фрагмент:
      <!-- Отображение подгрупп данной группы, только если подгруппы есть и не идет фильтра по меткам -->
      <xsl:if test="count(selected_tags/tag) = 0 and count(//group[@parent=$parent_group_id]) &gt; 0">

Заменяем на
      <!-- Отображение подгрупп данной группы, только если подгруппы есть и не идет фильтра по меткам -->
      <xsl:if test="count(selected_tags/tag) = 0 and count(//group[@parent=$parent_group_id]) &gt; 0">


3. В XSL-шаблоне "МагазинКаталогТоваров" заменяем:
<div style="margin-bottom: 15px;">
         <a href="{/shop/path}{fullpath}" style="font-weight: bold">

на
      <!-- Если был передан тег, допишем в ссылки с группы -->
      <xsl:variable name="tagpath"><xsl:choose>
         <xsl:when test="count(/shop/selected_tags/tag) > 0">tag/<xsl:value-of select="/shop/selected_tags/tag/tag_path_name" />/</xsl:when>
         <xsl:otherwise></xsl:otherwise>
      </xsl:choose></xsl:variable>


      <div style="margin-bottom: 15px;">
         <a href="{/shop/path}{fullpath}{$tagpath}" style="font-weight: bold">


4. В XSL-шаблоне "МагазинКаталогТоваров" заменяем:
заменяем
      <xsl:if test="@parent=0">
         <a href="{/shop/path}">
            <xsl:value-of select="/shop/name"/>
         </a>
      </xsl:if>

на
      <!-- Если был передан тег, допишем в ссылки с группы -->
      <xsl:variable name="tagpath"><xsl:choose>
         <xsl:when test="count(/shop/selected_tags/tag) > 0">tag/<xsl:value-of select="/shop/selected_tags/tag/tag_path_name" />/</xsl:when>
         <xsl:otherwise></xsl:otherwise>
      </xsl:choose></xsl:variable>


      <xsl:if test="@parent=0">
         <a href="{/shop/path}{$tagpath}">
            <xsl:value-of select="/shop/name"/>
         </a>
      </xsl:if>


Далее изменяем вызов показа тегов, нам необходимо сделать, чтобы выводились только теги, доступные в текущей группе.
Для этого в шаблоне/макете код:
            <?php
            if (class_exists('shop'))
            {
               $shop = & singleton('shop');
               /* Отображаем тэги */
               $shop->ShowTagsCloud(to_int($GLOBALS['LA']['shop_id']), 'ОблакоТэговМагазин');
            }
            ?>
заменяем на
<?php
if (class_exists('shop'))
{
   $shop = & singleton('shop');

   $property = array();
   
   if (isset($GLOBALS['shop_item_path']['group']) && $GLOBALS['shop_item_path']['group'])
   {
      $property['In'] = array(0);
      
      $shop_current_group_id = intval($GLOBALS['shop_item_path']['group']);

      $aSubGroup = $shop->GetGroupsTree($shop_current_group_id, to_int($GLOBALS['LA']['shop_id']));

      // Записываем выбранные подгруппы в массив
      foreach($aSubGroup as $group_id => $value)
      {
         $aItemsInGroup = $shop->GetAllItems(to_int($GLOBALS['LA']['shop_id']), $group_id);
         if (is_array($aItemsInGroup) && count($aItemsInGroup) > 0)
         {
            foreach ($aItemsInGroup as $aItemRow)
            {
               $property['In'][] = $aItemRow['shop_items_catalog_item_id'];
            }
         }
      }
   }
   /* Отображаем тэги */
   $shop->ShowTagsCloud(to_int($GLOBALS['LA']['shop_id']), 'ОблакоТэговМагазин', $property);
}
?>

Вышеуказанный код для облака тегов будет работать с версии 5.5.6.
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
HostCMS писал(а):
Вышеуказанный код для облака тегов будет работать с версии 5.5.6.
Сейчас значит не стоит дергаться?
Не стыдно что-либо не знать или не понимать. Стыдно бояться спросить.
Модератор
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
sivruk,
В версии 5.5.5. последний код будет работать, только эффект не будет наблюдаться до обновления до версии 5.5.6. Остальное все будет работать и в 5.5.5.
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
Не то! Совсем не то что ожидал! Какая досада!
Нажимаю в облаке метку "Летние костюмы" и попадаю в корень магазина, только ссылки разделов превращаются в ссылки с этим тэгом. Хочу в этих костюмах выбрать тэг "Хаки" та же история. В конечном итоге добраться до нужного результата можно, если точно знать где что располагается.
А хотелось так чтобы нажал "Летние костюмы" - появилось только разделы в которых присутствует эта метка (В обуви ее точно нет) выбрал "Хаки"
и выдало бы только те товары, которые содержат и "Летние костюмы" и "Хаки" и чтоб не было там товаров не содержащих этой поры тегов.
Не стыдно что-либо не знать или не понимать. Стыдно бояться спросить.
Модератор
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
sivruk,
В данном случае приведен функционал, реализующий вышеуказанную задачу.
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
Облако понравилось. Отображает только те метки, что есть в данном разделе
Не стыдно что-либо не знать или не понимать. Стыдно бояться спросить.
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
HostCMS писал(а):
Поиск должен производиться по модельно, нажатием на облако моделей, т.е. в каждый вид товара в метки указывается название автомобиля, и при нажатии на метку вылетает все что относится к этой модели, но необходимо сделать чтобы это не просто кучей высыпалось а было отсортировано по папкам.

Что я не так понял?
Попробую перефразировать под себя:
Поиск должен производиться по модельно, нажатием на облако моделей, т.е. в каждый вид товара в метки указывается название Продукции, и при нажатии на метку вылетает все что относится к этой модели, но необходимо сделать чтобы это не просто кучей высыпалось а было отсортировано по папкам.
Не стыдно что-либо не знать или не понимать. Стыдно бояться спросить.
Модератор
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
sivruk писал(а):
но необходимо сделать чтобы это не просто кучей высыпалось а было отсортировано по папкам.

в вышеуказанном примере товары как раз не кучей высыпаются, а выводятся по папкам.
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
HostCMS писал(а):
т.е. нажимаем Запорожец Ъ-ХЗ вылезают папки (либо название папки сверху и открытый список внизу)
— передний обвес
— задний обвес
— спойлера

Наверно это справедливо было бы если бы во всем магазине Одна модель автомобиля была бы.
Вы такое встречали?
Не стыдно что-либо не знать или не понимать. Стыдно бояться спросить.
Модератор
#
Re: Пример организации каталога автотоваров, распределенных по группам с фильтрацией по меткам (+)
sivruk писал(а):
Наверно это справедливо было бы если бы во всем магазине Одна модель автомобиля была бы.

Почему одна модель? Пример как раз таки и предназначен для нескольких авто, чтобы ограничивать каталог запчастями конкретного автомобиля, который вынесен в метку.
Авторизация