Спасибо! Я всё же сам добился истины..!! Вчера до 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);
// --------------------------------------------------------------------------