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

#
Re: Ограничить вывод дополнительного свойства в Фильтре
Да. Поведение странное. SQL запрос то формируется корректный.

Цитата:
правильно ругается, исключение в конструкторе - нет у производителя атрибута count

а как его добавить, ведь они из таблиц берутся. Или я ошибаюсь?

Цитата:
ругается так
Exception: Could not execute Shop_Producer_Model::__construct()


У меня почему то не получается воспроизвести эту ошибку. Вместо неё возникает вот эта:
Exception: The property 'count' does not exist in the model 'shop_producer'

Цитата:
выводит нужный результат но как бы это все вложить в XML что бы отобразить соответственно.


Если люди которые будут поддерживать ваш код не склонны к насилию, то можно использовать существующий столбец. Например kpp.


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


Такой вариант у меня работает. Количество вынимать из <kpp>???</kpp>
Email: roman.fov@gmail.com Skype: roman-fov
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Roman Fov писал(а):
Если люди которые будут поддерживать ваш код не склонны к насилию, то можно использовать существующий столбец. Например kpp.


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



Такой вариант у меня работает. Количество вынимать из <kpp>???</kpp>

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

var_dump($_SESSION);

Показывает следующее:

array (size=1)
  'hostcmsViewed' =>
    array (size=1)
      1 =>
        array (size=1)
          0 => string '977' (length=3)

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

// Viewed items
/*if ($Shop_Controller_Show->item)
{
    $view_item_id = $Shop_Controller_Show->item;

    if (Core_Entity::factory('Shop_Item', $view_item_id)->shop_id == $oShop->id)
    {
        Core_Session::start();
        if (isset($_SESSION['hostcmsViewed'][$oShop->id]) && in_array($view_item_id, $_SESSION['hostcmsViewed'][$oShop->id]))
        {
            unset($_SESSION['hostcmsViewed'][$oShop->id][
                array_search($view_item_id, $_SESSION['hostcmsViewed'][$oShop->id])
                ]);
        }
        else
        {
            $_SESSION['hostcmsViewed'][$oShop->id][] = $view_item_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: Ограничить вывод дополнительного свойства в Фильтре
Проблема была в том что  поле <kpp> в модели Shop_Producers имеет тип varchar по этому глючила везде где можно. Прописал вместо него <user_id> тип int все работает без ошибок и багов. Все же тип поле имеет место быть.
Выше код раскомментировал, все работает.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ограничить вывод дополнительного свойства в Фильтре
Проблема повторяется, нельзя ли это решить собственным конструктором? Например http://www.hostcms.ru/documentation/modules/core/querybuilder/

$oCore_QueryBuilder_Select = Core_QueryBuilder::select(array('shop_producers.id', 'id'), array('shop_producers.shop_id', 'shop_id'), array('shop_producers.name', 'name'), array('COUNT(shop_items.id)', 'count'))
            ->distinct()
            ->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
            ->where('shop_items.shop_group_id', 'IN', $IN)
            ->where('shop_items.deleted', '=', 0)
            ->where('shop_items.active', '=', 1)
            ->groupBy('shop_producers.id')
            ->orderBy('shop_producers.sorting', 'ASC')
   ->from('shop_producers');
$aRows = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();

Положить в XSL и отобразить. Кто ни будь может дать пример как это делается?
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');
        $oCore_QueryBuilder_Select = Core_QueryBuilder::select(array('shop_producers.id', 'id'), array('shop_producers.shop_id', 'shop_id'), array('shop_producers.name', 'name'), array('COUNT(shop_items.id)', 'count'))
            ->distinct()
            ->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
            ->where('shop_items.shop_group_id', 'IN', $IN)
            ->where('shop_items.deleted', '=', 0)
            ->where('shop_items.active', '=', 1)
            ->groupBy('shop_producers.id')
            ->orderBy('shop_producers.sorting', 'ASC')
            ->from('shop_producers');
        $aRows = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();

        foreach ($aRows as $value)
        {
            $oProducersXmlEntity->addEntity(
                Core::factory('Core_Xml_Entity')
                    ->name('producer')
                    ->addAttribute('id', $value['id'])
                    ->addEntity(
                        Core::factory('Core_Xml_Entity')->name('p_name')->value($value['name'])
                    )
                    ->addEntity(
                        Core::factory('Core_Xml_Entity')->name('p_count')->value($value['count'])
                    )
            );
        }
        $this->addEntity($oProducersXmlEntity);


XSL


<xsl:if test="count(/shop/producers/producer) > 1">
                    <fieldset>
                        <legend>
                            <span>Бренды</span>
                        </legend>
                        <div class="propertyInput">
                            <xsl:for-each select="/shop/producers/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="./p_name"/><small><xsl:value-of select="./p_count"/></small>
                                    </label>
                                </div>
                            </xsl:for-each>
                        </div>
                    </fieldset>
                </xsl:if>
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация