Ограничить вывод дополнительного свойства в Фильтре

#
Ограничить вывод дополнительного свойства в Фильтре
Есть дополнительное свойства группы определенное как "Производитель" - Отображается в фильтре как флажок checkbox.
Есть список производителей записанное в дополнительном свойстве: Sony, Toshiba, Hitachi и.т.д.
Необходимо в зависимости от групп товаров где мы находимся ограничить вывод из дополнительного свойства.
Например если в группе товаров имеется производитель только Sony то остальные производители из списка дополнительного свойства "Производитель"  не отображать.

Изучая конструкцию понял что все списки дополнительных свойств выводит ->itemsProperties(true) по ИД дополнительного свойства
Но как передать так что бы по ИД дополнительного свойства отображались нужные записи из списка производителей. Например только Sony
В идеале еще хотелось бы выводит так, например количество товаров в производителе

  • Sony [6]
  • Toshiba [3]


Для примера как работает здесь либо производители активные если есть товары в производителях. Или не активные производители если нет товара по такому производителю в текущей категории.

Надеюсь удалось выложить суть своих мыслей. Буду рад любой подсказке или идеи. Спасибо!

E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Тут наблюдаю похожую мысль задачи, почитаю еще может найдется решение.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Во первых, нужно наверное узнать у вас, собираетесь ли вы проделывать данный трюк с другими свойствами?
Если да, то могу посоветовать фильтры товарища Котова. Штука дельная.
Если нет: Пару месяцев назад собирал подобное. Можно скинуть. Только производители были занесены в производителей товаров, а не в дополнительные свойства. Кстати, почему данные о производителях занесены в дополнительные свойства?
Email: roman.fov@gmail.com Skype: roman-fov
#
Re: Re: Ограничить вывод дополнительного свойства в Фильтре
Roman Fov писал(а):
Во первых, нужно наверное узнать у вас, собираетесь ли вы проделывать данный трюк с другими свойствами?
Если да, то могу посоветовать фильтры товарища Котова. Штука дельная.

Да, у этого товарища посмотрел фильтр но не готов тратится на покупку
Roman Fov писал(а):
Если нет: Пару месяцев назад собирал подобное. Можно скинуть. Только производители были занесены в производителей товаров, а не в дополнительные свойства. Кстати, почему данные о производителях занесены в дополнительные свойства?

Будь добр скинь пожалуйста код на почту nfhfjy520tp@znvy.eh Спасибо. Вообще да согласен что надо использовать таблицу производители, а не дополнительные свойства, заказчика убедил о том что надо перенести значение из доп.свойства на раздел производители.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Спасибо, фильтр работает отлично! Теперь делаю производители как флажок единственное не могу уловить понять почему после GET не выделяются

// Фильтр по производителю
        if (Core_Array::getGet('producer_id') and is_array(Core_Array::getGet('producer_id')))
        {
            // Получаем список производителей для текущей группы
            $oShop_Producers = $oShop->Shop_Producers;
            $oShop_Producers->queryBuilder()
                ->select('shop_producers.*')
                ->distinct()
                ->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
                ->where('shop_items.deleted', '=', 0)
                ->where('shop_items.active', '=', 1)
                ->where('shop_items.shop_group_id',  'NOT IN', Core_QueryBuilder::select('id')->from('shop_groups')->where('shop_id', '=', $oShop->id)->where('active', '=', 0));
            $aShop_Producers = $oShop_Producers->findAll();

            $aShop_Producers_Id = array();

            foreach ($aShop_Producers as $oShop_Producer)
            {
                $aShop_Producers_Id[] = $oShop_Producer->id;
            }

            // Получаем и чистим массив идентификаторов выбранных пользователем производителей
            $aSelected_Producers_Id = array_intersect(Core_Array::getGet('producer_id'), $aShop_Producers_Id);
            if ($aSelected_Producers_Id)
            {
                $Shop_Controller_Show
                    ->shopItems()
                    ->queryBuilder()
                    ->where('shop_items.shop_producer_id', 'IN', $aSelected_Producers_Id);

                $Shop_Controller_Show->addCacheSignature('producer_id=' . implode(',', $aSelected_Producers_Id));

                // Информируем вьюхи о выбранных производителях для отметки в select'е
                $oProducersXmlEntity = array();
                foreach ($aSelected_Producers_Id as $iSelected_Producer_Id)
                {
                    $oProducerIdXmlEntity[] = Core::factory('Core_Xml_Entity')
                        ->name('producer_id')
                        ->value($iSelected_Producer_Id);
                }

                $Shop_Controller_Show->addEntity(
                    Core::factory('Core_Xml_Entity')->name('filter_producer_id')->addEntities($oProducerIdXmlEntity)
                );
            }
        }

В шаблоне написано так:

<xsl:if test="count(producers/shop_producer) > 0">
                    <fieldset>
                        <legend>
                            <span>Бренды</span>
                        </legend>
                        <div class="propertyInput">
                            <xsl:apply-templates select="producers/shop_producer"/>
                        </div>
                    </fieldset>
</xsl:if>
------------------------------------------------
    <xsl:template match="producers/shop_producer">
        <div class="check-itm-elem">
            <input type="checkbox" value="{@id}" name="producer_id[]" id="producer_{@id}">
                <xsl:if test="@id = /shop/filter_producer_id/producer_id">
                    <xsl:attribute name="checked">checked</xsl:attribute>
                </xsl:if>
            </input>
            <label for="producer_{@id}">
<xsl:value-of disable-output-escaping="yes" select="name"/>-<xsl:value-of select="/shop/producer_id"/>
            </label>
        </div>
    </xsl:template>

/shop/filter_producer_id/producer_id само по себе представляет массив и в этом случае как же проверить при условии
<xsl:if test="@id = /shop/filter_producer_id/producer_id">
?
Голову уже сломал вроде ничего сложно нет но загнул в ступор. У кого какая идея? Буду рад пишите. Спасибо!
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Разобрался с ошибкой. Просто не на тот XLS отдавал данные) Всем спасибо.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Пытаюсь вывести рядом с названием производителей количество товаров, пишу так:

$oProducersXmlEntity = Core::factory('Core_XML_Entity')->name('producers');
        $this->addEntity($oProducersXmlEntity);

        $oShop_Producers = $oShop->Shop_Producers;
        $oShop_Producers->queryBuilder()
            ->select('shop_producers.*', array('COUNT(shop_items.id)', 'count'))
            ->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
            ->where('shop_items.deleted', '=', 0)
            ->where('shop_items.active', '=', 1)
            ->groupBy('shop_producers.id')
            ->orderBy('shop_producers.sorting', 'ASC')
            ->where('shop_items.shop_group_id', 'IN', $IN);

        $aShop_Producers = $oShop_Producers->findAll();

        foreach ($aShop_Producers as $oShop_Producer)
        {
            // Добавляем производителя потомком XML-сущности
            $oProducersXmlEntity->addEntity(
                $oShop_Producer->clearEntities()
            );
        }

ругается так
Exception: Could not execute Shop_Producer_Model::__construct()
и не хочет отобразить ничего. Как тут правильно построить конструкцию?
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Модератор
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Seri,
правильно ругается, исключение в конструкторе - нет у производителя атрибута count
#
Re: Ограничить вывод дополнительного свойства в Фильтре
HostCMS писал(а):
правильно ругается, исключение в конструкторе - нет у производителя атрибута count

Спасибо. Но можете ответить  как тут правильно построить конструкцию?
Я в шаблонах XSL пока еще не силен, до этого работал с Smarty.
Запрос пишу так:
SELECT `shop_producers`.`id`, `shop_producers`.`name`, COUNT(`shop_items`.`id`) AS `count`
FROM `shop_producers`
INNER JOIN `shop_items` ON `shop_items`.`shop_producer_id` = `shop_producers`.`id`
WHERE `shop_producers`.`shop_id` = '1' AND `shop_items`.`deleted` = 0 AND `shop_items`.`active` = 1
AND `shop_producers`.`deleted` = 0 GROUP BY `shop_producers`.`id` ORDER BY `shop_producers`.`sorting`

выводит нужный результат но как бы это все вложить в XML что бы отобразить соответсвенно.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Похоже супер сложная задача у меня что не кто не пишет или все отдыхают)
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация