Скрыть группы

#
Скрыть группы
Добрый день, есть группы которые надо скрыть, пустые, с товарами в которых 0 остатков, если у всей группы товаров цена 0. Думал сделать это через хук, добавить поле в xls там проверить и все, но проблема в том, что я могу найти только товары верхней группы, тоесть если в группе есть группы но нет больше товаров, то у меня она как 0.
$oCore_QueryBuilder_Select = Core_QueryBuilder::select()
            ->select(array(Core_QueryBuilder::expression('COUNT(*)'), 'count'))
            ->from('shop_items')
            ->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
            ->leftJoin('shop_groups', 'shop_groups.id', '=', 'shop_items.shop_group_id')
            ->having('SUM(shop_warehouse_items.count)', '>', 0)
            ->where('shop_items.active', '=', 1)
            ->where('shop_items.deleted', '=', 0)
            ->where('shop_groups.id', '=', $object->id)
            ->where('shop_items.price','>',0)
            ->groupBy('shop_items.id');
        ;

        $row = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();
            $object->addXmlTag('myTag', count($row));



   <xsl:template match="shop_group">
      <a href="{url}"><xsl:value-of select="name" /></a>
   </xsl:template>
<xsl:variable name="group" select="group"/>
      
      <div class="row">
         <div class="col-xs-12">
            <div class="groups-list hidden-xs">
               <xsl:apply-templates select=".//shop_group[parent_id=$group]"/>
            </div>
            <div class="groups-list category-mob visible-xs">
               <a  class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                  Категории товаров
               </a>
               <div class="dropdown-menu">
                  <xsl:apply-templates select=".//shop_group[parent_id=$group]"/>
               </div>
            </div>
         </div>
      </div>


может можно сделать это как-то проще ?
#
Re: Скрыть группы
vip.viktor,
используйте параметр items_total_count, главное чтобы у вас был пересчет магазина актуальный
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Скрыть группы
alexpimnev, думал про это, видел, советуют, но у группы в которых есть товара с 0 остатками все равно показывают что там есть товар, хотя товар не отображается в группе, она пустая, может я просто что-то не понимаю
#
Re: Скрыть группы
vip.viktor,
можно через хук shop.onBeforeSelectCountGroupsInRecount добавить условие со складами и тогда пересчет будет работать так как вам нужно
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Скрыть группы
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Скрыть группы
alexpimnev,
Спасибо, буду дальше разбираться
#
Re: Скрыть группы
Решил сделать вот так, по своему, ибо через onBeforeSelectCountGroupsInRecount не получилось
static public function onBeforeGetXml($object, $args)
    {
        $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
            ->select(array(Core_QueryBuilder::expression('COUNT(*)'), 'count'))
            ->from('shop_items')
            ->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
            ->leftJoin('shop_groups', 'shop_groups.id', '=', 'shop_items.shop_group_id')
            ->having('SUM(shop_warehouse_items.count)', '>', 0)
            ->where('shop_items.active', '=', 1)
            ->where('shop_items.deleted', '=', 0)
            ->where('shop_groups.id', '=', $object->id)
            ->where('shop_items.price','>',0)
            ->groupBy('shop_items.id');
        ;

        $row = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();

        $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
            ->from('shop_groups')
            ->where('shop_groups.active', '=', 1)
            ->where('shop_groups.deleted', '=', 0)
            ->where('shop_groups.parent_id', '=', $object->id);

         $countGroup = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();

        if (count($row) > 0 || count($countGroup) != 0){
            $object->addXmlTag('groupIsNotNull', 1);
         } else {
            $object->addXmlTag('groupIsNotNull', 0);
        }

    }

Знаю, криво косо но мне подходит. Вопрос только в том, почему у меня у авторизированного это поле есть, а у простого пользователя его нет, тоесть я делают проверку через if когда я авторизированного все хорошо работает, только выхожу все, переменная пустая, условия не выполняются
Модератор
#
Re: Скрыть группы
vip.viktor,
а в какое место вы добавили вызов хука
#
Re: Скрыть группы
hostcms,
В файл bootstrap.php
Модератор
#
Re: Скрыть группы
vip.viktor,
может быть вы это разместили в каком-то условии, как пример уже имеющимся там?
Авторизация