Блог
Вывод случайных товаров из корневой группы
Допустим что к карточке товара вы захотели добавить блок "С этим товаром также смотрят", в котором будут выводиться случайные товары из групп, расположенных в корневой группе текущего товара. Например: Товар находится в группе "Лакомства для кошек". Корневая группа для этого товара - это "Товары для кошек". В результате в блок "С этим товаром также смотрят" будут выведены товары, которые находятся в группах раздела "Товары для кошек".
Добавляем следующий код в код ТДС интернет-магазина:
$xslName = 'ТоварыМакет'; $oGroup = Core_Entity::factory('shop_group', Core_Page::instance()->object->group); while ($oGroup->parent_id != 0 && $oGroup = $oGroup->getParent()); class Also_Shop_Controller_Show extends Shop_Controller_Show { protected function _groupCondition() { if ($this->group) { $this->shopItems()->queryBuilder() ->join('shop_groups', 'shop_groups.id', '=', 'shop_items.shop_group_id', array( array('AND' => array('(')), array('' => array('shop_groups.parent_id', '=', $this->group)), array('OR' => array('shop_groups.id', '=', $this->group)), array('' => array(')')) ) ) ->clearOrderBy() ->orderBy('RAND()'); } else { $this->shopItems()->queryBuilder() ->where('shop_items.shop_group_id', '=', 0); } return $this; } } $Also_Shop_Controller_Show = new Also_Shop_Controller_Show($oShop); ob_start(); $Also_Shop_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName($xslName) ) ->group($oGroup->id) ->limit(10) ->viewed(FALSE) ->show(); $alsoItems = ob_get_clean();
Где $xslName - это название XSL шаблона, отвечающего за отображение блока "С этим товаром также смотрят".
$alsoItems - это уже готовое отображение(HTML-код) вашего блока "С этим товаром также смотрят".
После этого вам надо передать $alsoItems в XML товара интренет-магазина, и в XSL шаблоне указать в каком месте нужно показать блок.
-
-
Добавил в начало ТДС после
$Shop_Controller_Show = Core_Page::instance()->object;
$xslName = $Shop_Controller_Show->item
? Core_Array::get(Core_Page::instance()->libParams, 'shopItemXsl')
: Core_Array::get(Core_Page::instance()->libParams, 'shopXsl');
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('ТекущаяГруппа')->value($Shop_Controller_Show->group)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_add_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
);
Результат
Fatal error: Call to a member function getXml() on a non-object in G:\home\....\www\modules\core\entity.php on line 489 -
-
Сергей, мне не удается повторить вашу проблему, возможно ошибка в чем то другом? Вы можете привести полный код тдс?
-
-
<Отредактировано модератором. Причина: Комментарий содержит слишком объемный код.>
-
-
Сергей, выложите файл в любое хранилище, например, Google Docs и вышлите ссылку на него. Не копируйте такой объемный код в текст комментария.
-
-
И что получается, собирается статистика по товарам которые ТАКЖЕ СМОТРЯТ С ЭТИМ?
Или просто рандомные товары из одноименной группы?
Что если пользователь купил ярлык и смотрел группу с ярлыками.
Ему будут показаны товары-ярлыки из группы, где все товары-ярлыки, или товары из группы товара?
Спасибо. -
-
1. И что получается, собирается статистика по товарам которые ТАКЖЕ СМОТРЯТ С ЭТИМ?
-- Нет, статистика не собирается, о статистике речи не было.
2. Или просто рандомные товары из одноименной группы?
-- Не из одноименной группы, а из корневой группы для текущего товара. Например, есть структура каталога:
"Интернет Магазин Зоотоваров Зоо Идея → Товары для кошек → Лакомства для кошек → Кишки бараньи (для кошек) - Б2-M"
Корневая группа здесь "Товары для кошек". Будут выбраны случайные товара из всех подгрупп группы "Товары для кошек".
3. Что если пользователь купил ярлык и смотрел группу с ярлыками.
-- Не могу сказать наверняка - не тестировали с ярлыками, но все должно работать аналогично.
4. Ему будут показаны товары-ярлыки из группы, где все товары-ярлыки, или товары из группы товара?
-- Из корневой группы для группы в которой сейчас находится товар. По-просту говоря все будет работать аналогично, как и с товарами. -