Сопутствующие товары в корзине

#
Re: Сопутствующие товары в корзине
id55048 писал(а):
а в XSL что?

Вы посмотрите что в XML у вас для начала. Я делал отдельным блоком с вызовом в ТДС корзины со всеми шагами на 1 странице и потом использовал кустарный select с [not(.=preceding::*)] - чтобы не повторялись, ибо у товаров сопутствующие могут пересекаться, потому что в тот момент вызов template не работал у меня. Получилось так http://prntscr.com/ohvr1q. Мне так было проще, возможно это не правильно и есть более оптимальное решение.



<xsl:template match="/shop">

<xsl:for-each select="/shop//shop_cart/shop_item/associated/shop_item[not(.=preceding::*)]">

шаблон товара будет тут

...

<xsl:value-of select="name" />

<img src="{dir}{image_small}"  alt="{name}" title="{name}" />

</xsl:for-each>

</xsl:template>



Ускорение сайтов / Любые работы по сайту / Обращайтесь в nivaks-studio.ru
#
Re: Сопутствующие товары в корзине

  • associatedItems(TRUE|FALSE) показывать сопутствующие товары для выбранных товаров, по умолчанию FALSE

Выведет в XML все сопутствующие у товаров которые в корзине. К примеру один и тот же товар может быть как сопутствующие ко многим товарам. И в XML попадает этот товар несколько раз.
nikolajgromkov писал(а):
select с [not(.=preceding::*)] - чтобы не повторялись, ибо у товаров сопутствующие могут пересекаться

Рабочее решение хорошее на стороне XSL, но по сути сам XSL процессор заедает на генерацию достаточно ресурсов. Всегда хочется как можно мало нагрузки отдавать процессору XSL, по этому решил одним из вариантов вытащить сопутствующие в корзине отдельным запросом и положить в контроллер корзины:
/* Начало сопутствующие товары*/
        $aShop_Cart = Shop_Cart_Controller::instance()->getAll($oShop);
        $items=[];

        foreach ($aShop_Cart as $oShop_Cart)
        {
            $items[] = $oShop_Cart->shop_item_id;
        }

        if (count($items))
        {
            $oAssociatedXmlEntity = Core::factory('Core_Xml_Entity')->name('associated');
            $Shop_Cart_Controller_Show->addEntity($oAssociatedXmlEntity);

            $oShop_Items = $oShop->Shop_Items;
            $oShop_Items
                ->queryBuilder()
                ->clearSelect()
                ->select('shop_items.*')
                ->join('shop_item_associated', 'shop_item_associated.shop_item_associated_id', '=', 'shop_items.id')
                ->where('shop_item_associated.shop_item_id', 'IN', $items)
                ->groupBy('shop_item_associated.shop_item_associated_id');

            $oAssociates = $oShop_Items->findAll(FALSE);

            foreach ($oAssociates as $oEntry)
            {
                $oAssociatedXmlEntity->addEntity(
                    $oEntry->clearEntities()
// Тут можно еще ограничить не нужные данные в XML ->addForbiddenTag('shop_producer')
                );
            }
        }
        /* Конец сопутствующие товары */
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 МагазинКорзинаСайт, вставляем

<xsl:for-each select="/shop//shop_cart/shop_item/associated/shop_item[not(.=preceding::*)]">
---
код самого темплейта товара
---
</xsl:for-each>  

в контролере меняем на TRUE, не выводит...  
Авторизация