Вохможное решение по фильтам модификаций

#
Re: Вохможное решение по фильтам модификаций
Спасибо за разъяснения, понятно
#
Re: Возможное решение по фильтрам модификаций
Еще вопрос: в магазине модификации выводятся таблицей вместе с товарами. Если в поле shop_groups_id модификации поставить 0, то при попытке перейти на страницу модификации из общего списка страница открывается нормально. Если же у модификации в поле shop_groups_id стоит id группы их родителя, то при попытке перейти на страницу модификации из общего списка выходит ошибка 404. Как это можно обойти?
Модератор
#
Re: Вохможное решение по фильтам модификаций
bie,
Это не нужно обходить, т.к. такого быть не должно.
#
Re: Возможное решение по фильтрам модификаций
HostCMS,
Вы, конечно, правы (как всегда ), и эту задачу вполне можно решить с помощью усложнения запросов к БД. На случай, если кому пригодится, приведу свой способ.

Задача: в каталоге магазина выводить и фильтровать только модификации и товары без модификаций. При этом есть система групп/подгрупп, и если пользователь по ним переходит, то выводить ему модификации и товары, которые "сидят" в своей группе.

Все изменения вносились в код тип.дин.страницы интернет-магазина перед вызовом метода ShowShop.
1. Чтобы модификации участвовали в фильтрации и попадали в xml как самостоятельные товары:
$param['sql_select_modification'] = false;

2. Чтобы отсечь отображение товаров, у которых есть модификации (взято отсюда http://www.hostcms.ru/forums/22/2761/):
      if (!array_key_exists("sql_external_select", $param))
      {   $param['sql_external_select'] = "";   }
      $param['sql_external_select'] .= ', COUNT(t2.shop_items_catalog_item_id) as count ';

      if (!array_key_exists("sql_from", $param))
      {   $param['sql_from'] = "";   }
      $param['sql_from'] .= ' LEFT JOIN shop_items_catalog_table as t2 ON shop_items_catalog_table.shop_items_catalog_item_id = t2.shop_items_catalog_modification_id AND t2.shop_items_catalog_is_active = 1 ';

      if (!array_key_exists("sql_group_by", $param))
      {   $param['sql_group_by'] = ' GROUP BY shop_items_catalog_item_id ';   }

      if (!array_key_exists("sql_having", $param))
      {   $param['sql_having'] = ' HAVING count = 0 ';   }
      else {   $param['sql_having'] .= ' and count = 0 ';   }

3. У модификаций группа=0, поэтому при переходе в любую группу из корневой они не выводятся (по умолчанию). Чтобы модификации выводились в той группе, к которой принадлежит их родитель:
         if (!array_key_exists("sql_external_select", $param))
         {   $param['sql_external_select'] = "";   }
         $param['sql_external_select'] .= ', max(shop_items_catalog_table.shop_groups_id) as gr, max(t3.shop_groups_id) as gr3 ';

         if (!array_key_exists("sql_from", $param))
         {   $param['sql_from'] = "";   }
         $param['sql_from'] .= ' LEFT JOIN shop_items_catalog_table AS t3 ON t3.shop_items_catalog_item_id = shop_items_catalog_table.shop_items_catalog_modification_id ';

         if (!array_key_exists("sql_having", $param))
         {   $param['sql_having'] = ' HAVING (gr IN ('.$in.') or gr3 IN ('.$in.'))';   }
         else {   $param['sql_having'] .= ' and (gr IN ('.$in.') or gr3 IN ('.$in.')) ';   }

$in - строка, в которой через запятую перечислены id групп, например: 600,605,627
$param передается в метод ShowShop.
#
Re: Вохможное решение по фильтам модификаций
Тоже набросали своё решение по фильтру, охватывающему модификации товара, но в этом случае модификации - это не самостоятельный товар, а как изначально в hostcms - дочерний элемент. Таким образом, фильтр затрагивает модификации, но в результате выводится соответствующий главный товар. Если кому понадобится - http://www.auris-studio.ru/blog/filtr-po-modifikatsijam-v-hostcms/
творческая студия Auris
Авторизация