Помощь с Magento и сопутствующими продуктами - PullRequest
1 голос
/ 07 января 2011

У меня есть страница продукта клиента, которая буквально живет рядом со страницей catalog / product / view.phtml.Он в основном идентичен той странице с несколькими небольшими исключениями.По сути, это страница типа «продукт дня», поэтому я не могу совмещать ее с обычной страницей продукта, поскольку мне нужно получить данные из БД и выполнить загрузку, чтобы получить информацию о продукте

$_product = Mage::getModel('catalog/product')->load($row['productid']);

Короче говоря, все работает (включая все дочерние блоки html), за исключением исключений связанных продуктов.

После загрузки я сохраняю продукт в реестре с

Mage::register('product', $_product); 

и затем попытайтесь загрузить соответствующие продукты с:

echo $this->getLayout()->createBlock('catalog/product_view')->setTemplate('catalog/product/list/related.phtml')->toHtml();`

Все из которых возвращают ошибку:

Fatal error: Call to a member function getSize() on a non-object in catalog/product/list/related.phtml on line 29`, 

и строка 29 -

<?php if($this->getItems()->getSize()): ?>`.

Любая помощь в получении соответствующих ссылок будет оценена.

Ответы [ 2 ]

5 голосов
/ 07 января 2011

Я не совсем понял, что вы пытаетесь сделать, но я знаю, почему вы получаете свои ошибки. Вы создаете блок с псевдонимом класса / class

catalog/product_view
Mage_Catalog_Block_Product_View

но вы устанавливаете шаблон этого блока как

 catalog/product/list/related.phtml

Шаблон catalog/product/list/related.phtml был создан для использования с catalog/product_list_related Block only , а не с catalog/product_view Block.

Если вы посмотрите на определение класса для catalog/product_list_related блока (то есть Mage_Catalog_Block_Product_List_Related), вы увидите, что есть метод getItems().

public function getItems()
{
    return $this->_itemCollection;
}

, который возвращает коллекцию. Коллекция устанавливается в методе _prepareData

protected function _prepareData()
{
    $product = Mage::registry('product');
    /* @var $product Mage_Catalog_Model_Product */

    $this->_itemCollection = $product->getRelatedProductCollection()
    ...

Эта коллекция никогда не устанавливается с блоком catalog/product_view, поэтому вы получаете свои ошибки.

В приведенном выше коде, если вы переключитесь на создание блока catalog/product_list_related, ваши ошибки должны исчезнуть.

0 голосов
/ 04 октября 2013
public function relatedproductsAction(){

    $this->loadLayout();
    $relatedBlock = "";

    $rec_prod_id = Mage::getSingleton('checkout/session')->getLastAddedProductId(true);
    $_product = Mage::getModel('catalog/product')->load($rec_prod_id);
    Mage::register('product', $_product);


    $relatedBlock = $this->getLayout()->createBlock('catalog/product_list_related')->setTemplate('catalog/product/related.phtml')->toHtml();

    echo $relatedBlock;
    exit;

}

Получение html связанного блока через ajax-вызов, сразу после добавления товара в корзину.может быть относительно полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...