1

Magento Web サイトの製品ビュー ページに表示されるコンテンツを変更し、そのページでも使用する独自のカスタム ブロックを作成したいと考えています。

私がやったこと

製品ビュー ハンドルのレイアウト更新を作成

製品のビュー ページに表示されていたものを更新するために、local.xmlファイル内に次のレイアウトの更新を追加しました。

<catalog_product_view>
    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
    </reference>
    <reference name="content">
        <remove name="product.tierprices" />
        <remove name="product.info.upsell" />
        <remove name="product.clone_prices" />
        <remove name="product.description" />
        <remove name="product.tag.list" />
        <remove name="product.info.addto" />
        <remove name="product.info.addtocart" />
        <remove name="product.info.downloadcontent" />
        <remove name="product.info.extrahint" />
        <remove name="product.info.options.wrapper.bottom" />
        <remove name="product.info.container1" />
        <remove name="product.info.container2" />
        <remove name="alert.urls" />
        <remove name="catalog.compare.sidebar" />
        <remove name="cart_sidebar" />
        <remove name="right.permanent.callout" />
        <remove name="paypal.partner.right.logo" />
        <remove name="right.poll" />
        <remove name="bundle.tierprices" />
        <remove name="product.attributes" />

        <!-- This should override the original product.info block -->
        <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
            <!-- Custom MyNamespace_Videos_Block_Player block -->
            <block type="videos/player" name="videoPlayer" as="videoPlayer" template="video/player.phtml"/>
        </block>

    </reference>
</catalog_product_view>

この時点で、ノードの削除が機能していることを確認しました。明らかに、videos/playerこの時点ではブロック クラスを作成していなかったため、何も表示されませんでした。

カスタムモジュール

の下に次のフォルダー構造を作成して、カスタム モジュールを作成しましたapp/code/local

  • マイネームスペース
  • MyNameSpace/ビデオ
  • MyNameSpace/ビデオ/ブロック
  • MyNameSpace/ビデオ/など

モジュールの構成ファイルを作成しMyNameSpace/Videos/etc/config.xml、次の xml ノードを配置しました。

<?xml version="1.0"?>
<config>
    <modules>
        <mynamespace_videos>
            <version>0.0.1</version>
        </mynamespace_videos>
    </modules>
    <global>
        <blocks>
            <videos>
                <class>MyNamespace_Videos_Block</class>
            </videos>
        </blocks>
    </global>
</config>

次に、モジュールを有効にして、機能することを確認しました。

カスタム ブロック クラス

MyNameSpace/Videos/Block/Player.phtml次のようにカスタム ブロックを作成しました。

class MyNamespace_Videos_Block_Player extends Mage_Core_Block_Template {
    public function _toHtml() {
        echo "Block's _toHtml() method called!";
        parent::_toHtml();
    }
}

カスタム テンプレート ファイル

design/frontend/mythemepackage/default/template/video/player.phtml次に、以下を含むカスタム テンプレート ファイルを作成しました。

<!--Check to see if Magento sees this!-->
<?php Mage::log(get_class($this)); ?>

catalog/product/view.phtml を修正

videos/playerブロックを 内に表示するために、 のデザイン パッケージ catalog/product/view.phtmlにコピーしました。app/design/frontend/base/default/template/catalog/product/view.phtmlapp/design/frontend/mythemepackage/default/template/catalog/product/view.phtml

次に、新しくコピーしたビュー テンプレートに次の行を追加しました。

<b>This text will show up!</b>
<i>The following wont: </i>
<?php echo $this->getChildHtml('videoPlayer'); ?>

結果

videoPlayer上記の構成では、ブロックをレンダリングできません。

私が知っていることは次のとおりです。

  • ファイルに通常の html テキストが表示されますcatalog/product/view.phtml。何が反響しているか見えない$this->getChildHtml('videoPlayer');
  • クラスの_toHtml()メソッド が呼び出されておらず、テンプレートからの出力が表示されませMyNamespace_Videos_Block_Playervideo/player.phtml
  • からコピーcatalog.xmlapp/design/frontend/base/default/layout/catalog.xmlて ブロックを追加すると、app/design/frontend/mythemepackage/default/layout/catalog.xmlブロックの _toHtml() メソッドが呼び出されました!」と表示されます。ブロックによってエコーされました。への追加は次のようになります。videos/playervideos/playercatalog.xml
    <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
        <block type="videos/player" name="videoPlayer" as="videoPlayer" template="video/player.phtml"/>
    </block>
  • catalog.xmlブロックのメソッド呼び出しのローカル バージョンを使用しても_toHtml()、テンプレートからは何も出力されません。

質問

この問題のトラブルシューティングにかなりの時間を費やしました。でキャッシュを完全に削除var/cacheし、モジュールがアクティブで動作していることを確認しました。

  • 私は何が欠けていますか?ブロックをレンダリングするには何が必要ですか?
  • ブロックのコピーcatalog.xmlと追加は機能するのに、更新はlocal.xml機能しないのはなぜですか?
4

1 に答える 1

0

こんにちは私はあなたが <catalog_product_view>あなたのモジュールにタグを追加できると思いますlayout xml

<catalog_product_view>
     <reference name="content">
         <reference name="product.info">
             <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                 <block type="videos/player" name="videoPlayer" as="videoPlayer" template="video/player.phtml"/>
             </block> 
         </reference>
    </reference>
</catalog_product_view> 

これはあなたを助けるでしょう

于 2012-11-09T05:58:58.937 に答える