帮助Magento及相关产品

时间:2011-01-07 05:27:14

标签: magento

我有一个客户产品页面,它实际上位于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 个答案:

答案 0 :(得分:5)

我并没有完全遵循你想要做的事情,但我知道你为什么会得到你的错误。您正在创建一个其别名/类为

的块
catalog/product_view
Mage_Catalog_Block_Product_View

但您将此块的模板设置为

 catalog/product/list/related.phtml

库存catalog/product/list/related.phtml模板的构建仅用于catalog/product_list_related阻止 ,而不是catalog/product_view阻止。

如果你看一下catalog/product_list_related Block的类定义(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块,则您的错误应该消失。

答案 1 :(得分:0)

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;

}

在产品添加到购物车后立即通过ajax调用获取相关块的html。可能相对有帮助。