2011-01-07 75 views
1

我有一个客户产品页面,它的字面意思是生活在catalog/product/view.phtml页面旁边。除了一些小例外,它与该页面基本相同。这基本上是一个类型的页面“的日子产品”,所以我不能与常规产品页面结合起来,因为我有来从数据库中的数据并进行负载获得的产品信息帮助Magento及相关产品

$_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()): ?>`. 

任何帮助获取相关负载将是appreicated。

+0

只是一个很快的FYI。如果您将一行缩进四个字符,您将获得代码格式,并且这是在这些部分周围发布代码示例的首选方式。这就是编辑的原因。 – 2011-01-07 06:42:13

+0

我试过了,但没有奏效。这就是我累了的时候得到的。 – Anthony 2011-01-07 13:36:39

回答

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块(它是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
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,当产品被添加到购物车后。可能相对有帮助。

相关问题