帮助Magento及相关产品

1 magento

我有一个客户产品页面,它实际上位于catalog/product/view.phtml页面旁边.它与该页面基本相同,但有一些小例外.它基本上是"当天的产品"类型页面,所以我不能将它与常规产品页面结合起来,因为我必须从数据库中获取数据并执行加载以获取产品信息

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

总而言之,一切都有效(包括所有儿童html块),除了相关产品之外.

加载后我将产品保存到注册表中

Mage::register('product', $_product); 
Run Code Online (Sandbox Code Playgroud)

然后尝试加载相关产品:

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

所有这些都给出了错误:

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

第29行是

<?php if($this->getItems()->getSize()): ?>`.
Run Code Online (Sandbox Code Playgroud)

任何有关加载相关内容的帮助都会被贬低.

Ala*_*orm 5

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

catalog/product_view
Mage_Catalog_Block_Product_View
Run Code Online (Sandbox Code Playgroud)

但是你将这个块的模板设置为

 catalog/product/list/related.phtml
Run Code Online (Sandbox Code Playgroud)

库存catalog/product/list/related.phtml模板构建为catalog/product_list_related块一起使用,而不是块. catalog/product_view

如果你看一下catalog/product_list_relatedBlock 的类定义(也就是a Mage_Catalog_Block_Product_List_Related),你可以看到有一个getItems()方法.

public function getItems()
{
    return $this->_itemCollection;
}
Run Code Online (Sandbox Code Playgroud)

它返回一个集合.该集合在_prepareData方法中设置

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

    $this->_itemCollection = $product->getRelatedProductCollection()
    ...
Run Code Online (Sandbox Code Playgroud)

此集合永远不会设置为catalog/product_view阻止,这就是您收到错误的原因.

在上面的代码中,如果切换到创建catalog/product_list_related块,则错误应该消失.