Вывод случайных товаров из корневой группы

Допустим что к карточке товара вы захотели добавить блок "С этим товаром также смотрят", в котором будут выводиться случайные товары из групп, расположенных в корневой группе текущего товара. Например: Товар находится в группе "Лакомства для кошек". Корневая группа для этого товара - это "Товары для кошек". В результате в блок "С этим товаром также смотрят" будут выведены товары, которые находятся в группах раздела "Товары для кошек".

Добавляем следующий код в код ТДС интернет-магазина:

$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 шаблоне указать в каком месте нужно показать блок.

comments powered by Disqus


  • Добавил в начало ТДС после
    $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. Ему будут показаны товары-ярлыки из группы, где все товары-ярлыки, или товары из группы товара?
      -- Из корневой группы для группы в которой сейчас находится товар. По-просту говоря все будет работать аналогично, как и с товарами.

Следующий "Маркет" К списку Предыдущий "Что нового?"