0

製品ビュー (のみ)、製品詳細ページのフッター ブロックにテンプレート ブロックを追加しようとしています。catalog.xml レイアウト ファイルで次のことを試しましたが、うまくいきませんでした。

<catalog_product_view translate="label">
  ...
  <reference name="footer">
      <block type="core/template" name="uniqueName" template="catalog/product/mytemplate.phtml" />
  </reference>
</catalog_product_view>

<catalog_product_view translate="label">
  ...
  <reference name="footer">
      <block type="core/template" name="uniqueName">
          <action method="setTemplate"><template>catalog/product/mytemplate.phtml</template></action>
      </block>
  </reference>
</catalog_product_view>

content後者の方法を使用してテンプレートブロックを同じ方法でブロックに入れることができた<reference name="content">ので、これが機能しない理由がわかりません。フッターを適切に参照していないようです.. page.xml ファイルで、作成中のフッターが<block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml">. 誰かがこれを理解するのを手伝ってくれますか? とても有難い!

4

2 に答える 2

1

ブロックを追加しようとしているブロック テンプレート (私の場合はフッター ブロック) が、レイアウト xml に追加した子ブロックを呼び出していることを確認する必要があります。

フッター.phtml:

<?php echo $this->getChildHtml('uniqueName'); ?>
于 2012-11-01T23:11:56.467 に答える
1

で、ブロック オブジェクトpage.xmlをインスタンス化するレイアウト更新 xml フラグメントを見てください。content

<block type="core/text_list" name="content" as="content" translate="label">

contentブロックはブロックcore/text_list。ブロックはcore/text_list子ブロックを自動的にレンダリングします (つまり、それらはテキスト ブロックのリストの包含ブロックです)。core/text_listエイリアスは に解決されます。Mage_Core_Block_Text_Listこのクラスのレンダリング メソッドを見て、コンテンツ ブロックへの追加が機能する理由を確認してください。

ここで、フッター ブロックをインスタンス化するレイアウト更新 XML フラグメントを見てみましょう。

<block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml">

フット ブロックはテキスト リスト ブロックではありません。page/html_footerテンプレートブロックであるブロックです。page/html_footerこれは、ブロックが継承するクラスを調べることで判断できます

class Mage_Page_Block_Html_Footer extends Mage_Core_Block_Template

テンプレート ブロックは、すべての子ブロックを自動的にレンダリングするわけではありません。代わりに、ブロックのテンプレート内で、への呼び出しで子を明示的にレンダリングする必要があります。

echo $this->getChildHtml('block_name'); 

だからあなたが言うとき

<reference name="footer">
     <block type="core/template" name="uniqueName" template="catalog/product/mytemplate.phtml" />
</reference>

uniqueNameブロックの子ブロックとして名前が付けられたブロックを挿入するように Magento に指示していfooterます。ただし、ブロックをレンダリングするには、フッターのテンプレートで呼び出す必要があります

$this->getChildHtml('uniqueName')
于 2012-11-01T23:12:18.597 に答える