我有一个客户产品页面,它实际上位于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()): ?>`.
任何有关加载相关内容的帮助都会被贬低。
答案 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。可能相对有帮助。