товары подгруппы

#
Re: товары подгруппы
в xml смотрел - нету товар из подгруппы. В самой подгруппе товар находит
#
Re: товары подгруппы
В таком случае напишите в тех поддержку  с данными доступа в центр администрирования сайта и примером страницы. https://www.hostcms.ru/support/
«Не выходи из комнаты, не совершай ошибку…»
#
Re: товары подгруппы
Спасибо! Я всё же сам добился истины..!! Вчера до 12 ночи и сегодня с 6 утра мучения)) Проблема заключалась в том, что у меня было переопределено несколько методов класса Shop_Controller_Show в файле настройки ТДС.  Сейчас для меня крайне очевидна ситуация и злюсь на себя, что не обнаружил этот момент сразу. Для сострадальцев коллег расскажу, может окажусь полезным. А за комментарий поддержки буду благодарен.

Я не знаю, штатно это предусмотрено или предыдущий разработчик внедрял какую-то логику.. Методов переопределено несколько, а самый главный в данной ситуации - _groupCondition()
в теле есть ключевое ветвление:

   if ($this->group)
         {
            // если ID группы не 0, т.е. не корневая группа
            // получаем подгруппы
            $aSubGroupsID = $this->fillShopGroup($oShop->id, $this->group); // добавляем текущую группу в массив
            $aSubGroupsID[] = $this->group;


            if (isset($_GET['filter']) && ($_GET['filter'] == 1)) {
               // получаем все товары из подгрупп (если фильтр по одной из родительских групп)
               $this->shopItems()->queryBuilder()
                  ->where('shop_items.shop_group_id', 'IN', $aSubGroupsID);
            } else   
               $this->shopItems()->queryBuilder()
                  ->where('shop_items.shop_group_id', '=', $this->group);
         }


Что тут происходит... только в корневой группе выбираются товары из подгрупп и только тогда, когда имеется гетзапрос, означающий применение фильтра.
Тут две проблемы - мне нужно выбирать товары из подгруппы в любой группе, где нахожусь, и исключительно при применении фильтра. Но вот фильтр у меня не отправляет get параметры, а основан на ЧПУ. Благо, когда применяется фильтр, появляется значение его пути  в свойстве _filterPath. Вот оно мне и показывает, когда применен фильтр. Вот что получилось:
if (true)
         {

            // если ID группы не 0, т.е. не корневая группа
            // получаем подгруппы
            $aSubGroupsID = $this->fillShopGroup($oShop->id, $this->group);
            $aSubGroupsID[] = $this->group;  // добавляем текущую группу в массив

                if ($this->_filterPath){
               // получаем все товары из подгрупп (если фильтр по одной из родительских групп)
               $this->shopItems()->queryBuilder()
                  ->where('shop_items.shop_group_id', 'IN', $aSubGroupsID);
            } else
               $this->shopItems()->queryBuilder()
                  ->where('shop_items.shop_group_id', '=', $this->group);
         }



Вот.. А далее возникла еще проблемка. Когда выбираешь на сайте значения фильтра(тыкаешь галочки и т.д.), появляется кнопка применения фильтра и количество найденного. ------- тут вопрос к ув.поддержке: правильно ли, что реализацию вывода количества найденного я называю быстрым фильтром? Или это не только оно------- Мне нужно, чтобы количество определилось не только для текущей группы, но и для всех подгрупп. Тогда пришлось доработать метод if (Core_Array::getRequest('fast_filter'), именно он обрабатывает ajax запрос при формировании появляющейся кнопки применить:

        $thisSubGroups = array();   // Массив для текущей группы и её подгрупп.
        $thisSubGroups[] = $Shop_Controller_Show -> group;   // Добавляюем в массив текущую группу.
        // ------- Получаем подгрупппы текущей группы ---
        $oShopGroup = Core_Entity::factory('shop_group');
        $oShopGroup->queryBuilder()
            ->where('parent_id', '=', $Shop_Controller_Show->group);
        $aShopGroup = $oShopGroup->findAll();
        // -----------------------------------------------
        
        // --- Добавляем в массив ИДы подгрупп. ---
        foreach ($aShopGroup as $shopGroup)
        {
            $thisSubGroups[] = $shopGroup->id;
        }
        // -----------------------------------------
        
        // --- Выбираем товары для определенных групп - текущаа и ее подгруппы. ---
        $Shop_Controller_Show->shopItems()
            ->queryBuilder()
            ->select('shop_items.*')
            ->where('shop_items.shop_group_id', 'IN', $thisSubGroups);
        // --------------------------------------------------------------------------
Модератор
#
Re: товары подгруппы
prizrak067,
1. Быстрый фильтр  - это не только показ количества найденных, это еще и сама возможность быстро найти товары по условиям.
2. Чтобы запрос на fast_filter правильно работал, в нем должны быть такие же условия (в частности subgroups(TRUE)), а не собственная работа с подгруппами.
#
Re: товары подгруппы
Спасибо Но ощущаю некий восторг от того, что получилось самому поработать с orm и всё получилось)

Авторизация