【问题标题】:Call view.phtml template in custom layout在自定义布局中调用 view.phtml 模板
【发布时间】:2012-10-16 12:37:18
【问题描述】:

我是 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(); ?>

请就这个问题回复我。

提前致谢。

【问题讨论】:

  • getLayout() 之前的 $this-> 在哪里?顺便说一句,您应该使用 loayout xml 文件,而不是强制创建这样的块
  • 您好,碧玺,感谢您的回复。你能给我这个步骤吗?我怎么能建造那个?这对我很有帮助。感谢您的回复....再次
  • 好的,谢谢,我会看到的。

标签: templates magento layout


【解决方案1】:

你的错误出现在文件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');
 ?>

此决定不能用于产品页面。

【讨论】:

  • 您好 Dzmitry,感谢您的回复...它工作正常,但不能像 view.phtml 一样获得完整视图,有些缺少产品价格、添加到购物车功能、产品图片。你能告诉我怎么去那个吗?再次感谢!
【解决方案2】:

你不应该像那样实例化一个 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 中的布局

祝你好运

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多