0

我是 magento 的新手,view.phtml在自定义布局中调用文件时遇到问题。

以下是我的代码,我包含在自定义布局文件中,但出现致命错误
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(); ?>

请就这个问题回复我。

提前致谢。

4

2 回答 2

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');
 ?>

此决定不能在产品页面上使用。

于 2012-10-26T13:07:17.320 回答
0

你不应该像这样实例化一个 Block 。

查看标准产品页面以了解其工作原理:

您有一个名为 catalog/product/view 的控制器,它在 Mage_Catalog_ProductController 类中定义

此控制器链接到 app/design/package/theme/layout/catalog.xml 中 catalog.xml 文件中定义的布局更新句柄

在此布局文件中,您将看到块 catalog/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 中的布局

祝你好运

于 2012-10-26T10:17:55.883 回答