我是magento的新手,我在自定义布局中调用view.phtml
文件时遇到问题。
Folowing是我的代码,我在cutom布局文件中包含但我得到致命错误
Fatal error: Call to a member function getMetaTitle() on a non-object in D:\wamp\www\projects\magento\app\code\core\Mage\Catalog\Block\Product\View.php on line 56
。
<?php echo $this->getLayout()->createBlock('catalog/product_view')->setTemplate('catalog/product/view.phtml')->toHtml(); ?>
请回答我这个问题。
提前致谢。
答案 0 :(得分:2)
您的错误发生在此行的文件D:\wamp\www\projects\magento\app\code\core\Mage\Catalog\Block\Product\View.php
$product = $this->getProduct();
$title = $product->getMetaTitle();
创建块时,不指定为其创建块的产品,这是一个重要且必需的参数。
获得产品的功能:
public function getProduct()
{
if (!Mage::registry('product') && $this->getProductId())
{
$product = Mage::getModel('catalog/product')->load($this->getProductId());
Mage::register('product', $product);
}
return Mage::registry('product');
}
你真的有一个选择如何解决这个问题,但它并不是很漂亮,而是工作。
<?php
Mage::register('product',Mage::getModel('catalog/product')->load(YOUR_PRODUCT_ID));
echo $this->getLayout()->createBlock('catalog/product_view')->setTemplate('catalog/product/view.phtml')->toHtml();
Mage::unregister('product');
?>
此决定无法在产品页面上使用。
答案 1 :(得分:0)
你不应该像那样实例化一个Block。
查看标准产品页面以了解其工作原理:
你有一个名为catalog / product / view的控制器,它在Mage_Catalog_ProductController类中定义
此控制器链接到app / design / package / theme / layout / catalog.xml中catalog.xml文件中定义的布局更新句柄
在这个布局文件中,你会看到块目录/ product_view是用几个孩子声明的:
<catalog_product_view translate="label">
[...]
<reference name="content">
<block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
<block type="catalog/product_view_media" name="product.info.media" as="media" template="catalog/product/view/media.phtml"/>
<block type="core/text_list" name="alert.urls" as="alert_urls" translate="label">
<label>Alert Urls</label>
</block>
[...]
这是你手动实例化的部分。
您必须根据需要调整/了解catalog.xml中的布局
祝你好运