Сортировка товаров при фльтрации по тегам

#
Сортировка товаров при фльтрации по тегам
При просмотре товаров, отфильтрованных по тегам, можно воспользоваться фильтром товаров. Например, выбрав сортировку начиная с самых дешевых. Но после такого выбора сразу же исчезает фильтрация по тегам. Остается только сортировка. При чем в этом случае сортируются товары из корня каталога.

Как правильно организовать сортировку товаров при фильтрации по тегам?
#
Re: Сортировка товаров при фльтрации по тегам
Если вручную в адресную строку перед ?sorting добавляю /tag/значение_тега/, всё получается как надо.

Какой именно документ мне в этом случае будет правильнее редактировать, чтобы при наличии фильтрации по тегам я в URL добавлял нужные данные?
#
Re: Сортировка товаров при фльтрации по тегам
Я заглянул в код XSL-шаблона с ID 230 "МагазинФильтр".

В нем есть следующий код, относящий непосредственно к форме сортировки.


<!-- дополнение пути для action, если выбрана метка -->
<xsl:variable name="form_tag_url"><xsl:if test="count(tag) = 1">tag/<xsl:value-of select="tag/urlencode"/>/</xsl:if></xsl:variable>

<form method="get" action="{$path}{$form_tag_url}">
   <div class="filter">
      <div class="sorting">
         <select name="sorting" onchange="$(this).parents('form:first').submit()">

<!-- И так далее... -->


Выходит, уже сейчас должно работать как я описал. Но не работает даже на чистой CMS со «штатным» сайтом интернет-магазина. Из кода XSL-шаблона я вижу, что к атрибуту action должен добавляться путь для просматриваемого тега. Но нет.

Дело в том, что в XML-коде для XSL-шаблона #230 отсутствует тег <tag>, а, соответственно, поэтому переменная $form_tag_url пустая.

#
Re: Сортировка товаров при фльтрации по тегам
В общем, в этом дефолтном сайте есть макет с id 11 — Шаблон для интернет-магазина. У него есть такой блок:



      // Фильтр справа
      if (Core::moduleIsActive('shop') && isset(Core_Page::instance()->libParams['shopId']))
      {
         $oShop = Core_Entity::factory('Shop', Core_Page::instance()->libParams['shopId']);
         
         $Shop_Controller_Show = new Shop_Controller_Show($oShop);
         $Shop_Controller_Show
            ->xsl(
               Core_Entity::factory('Xsl')->getByName('МагазинФильтр')
            )
            ->groupsMode('tree')
            ->limit(0)
            ->itemsProperties(TRUE);
         


Я его видоизменил. Сделал так.


// Фильтр справа
      if (Core::moduleIsActive('shop') && isset(Core_Page::instance()->libParams['shopId']))
      {
         $oShop = Core_Entity::factory('Shop', Core_Page::instance()->libParams['shopId']);
         
         $Shop_Controller_Show = new Shop_Controller_Show($oShop);
         $Shop_Controller_Show
            ->xsl(
               Core_Entity::factory('Xsl')->getByName('МагазинФильтр')
            )
            ->groupsMode('tree')
            ->limit(0)
            ->itemsProperties(TRUE);
         
         // Если пользователь уже на странице интернет-магазина
         if (!empty(Core_Page::instance()->object)
            && get_class(Core_Page::instance()->object) == "Shop_Controller_Show")
         {
            
            $sTag = Core_Page::instance()->object->tag;
            
            $oTag = Core_Entity::factory('Tag')->getByPath($sTag);
            
            $Shop_Controller_Show->addEntity($oTag);
            
         }
         


И вот теперь получил нужный результат. Правильный ли способ я выбрал?
Модератор
#
Re: Сортировка товаров при фльтрации по тегам
Правильно, фильтр в макете не обрабатывает ситуацию использования одновременно с фильтрацией по тегам.
Вашем случае, чтобы не делать лишнюю фильтрацию по тегу, в последний код добавьте доп.проверку:
// Если пользователь уже на странице интернет-магазина
if (!empty(Core_Page::instance()->object)
   && get_class(Core_Page::instance()->object) == "Shop_Controller_Show")
{
   $sTag = Core_Page::instance()->object->tag;

   if (strlen($sTag))
   {
      $oTag = Core_Entity::factory('Tag')->getByPath($sTag);
      $Shop_Controller_Show->addEntity($oTag);
   }
}
#
Re: Сортировка товаров при фльтрации по тегам
hostcms, благодарю.
Авторизация