0

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

この問題を解決する方法を実際に 1 つ持っていますか。

 <?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

そのようなブロックをインスタンス化するべきではありません。

標準の製品ページを見て、その仕組みを理解してください。

Mage_Catalog_ProductController クラスで定義されている catalog/product/view という名前のコントローラーがあります。

このコントローラーは、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 に答える