Блог
Вывод нескольких товаров из каждой подгруппы
Данное решение поможет организовать вывод нескольких товаров под каждой группой товаров. Например, в каталоге требуется вывести по 6 товаров под каждым разделом.
В код ТДС информационной системы необходимо добавить скрипт, который поместит элементы в XML. Перед вызовом метода show() добавляем код
if (!$Shop_Controller_Show->item) { $oXML = Core::factory('Core_Xml_Entity')->name("groupitems"); $aoGroups = Core_Entity::factory('shop_group')->getAllByParent_id($Shop_Controller_Show->group); foreach ($aoGroups as $oGroup) { if ($Shop_Controller_Show->group != $oGroup->id) { $oSomeItems = Core_Entity::factory('shop_item'); $oSomeItems->queryBuilder() ->where('shop_group_id', '=', $oGroup->id) ->limit(6); $aoSomeItems = $oSomeItems->findAll(); $oXML->addEntities($aoSomeItems); } } $Shop_Controller_Show->addEntity($oXML); }
В этом коде, в методе limit() устанавливается количество товаров, которые будут добавлены для каждой группы. После того, как мы добавили этот код, в XML появилась информация о товарах раздела внутри тега groupitems. Теперь в XSL шаблоне каталога в подшаблон вывода подгрупп xsl:template match="shop_group" нужно добавить код вывода товаров:
<xsl:variable name="id" select="@id" />
<xsl:apply-templates select="/shop/groupitems/shop_item[shop_group_id = $id]" />
Если вы используете стандартный шаблон, то код этот нужно добавить внутри цикла xsl:for-each в подшаблоне xsl:template match="shop_group".
-
-
Добрый день, а подскажите как добавить в вывод этих товаров - дополнительные свойства, точнее вот это: ->itemsProperties(TRUE)
? -
-
Добрый. Вместо $oXML->addEntities($aoSomeItems); нужно написать
foreach ($aoSomeItems as $oSomeItem)
{
$oXML->addEntity($oSomeItem->showXmlProperties());
}
Писал на глаз, может потребоваться корректировка, но суть именно такая. -
-
Спасибо Артем, все сработало!
-
-
Пожалуйста, рад помочь.
-
-
Решение отличное! Но ярлыки из подгрупп не выводятся, хотя в xml они видны( Может подскажите как доработать код?
-
-
Для вывода ярлыков попробуйте такой код. Вместо $oXML->addEntities($aoSomeItems); нужно написать:
foreach ($aoSomeItems as $oSomeItem)
{
if ($oSomeItem->shortcut_id)
{
$oXML->addEntity($oSomeItem->shop_item);
} else
{
$oXML->addEntity($oSomeItem);
}
}
Писал на глаз, может потребоваться корректировка, но суть именно такая. -
-
Спасибо за решение!
На сайте разраба часа 3 лазал, так и не смог найти ничего путного.
А тут все получилось с 1 раза и именно как было нужно. -
-
Рад, что смог Вам помочь!
-