私はフロントエンドのMagento開発者であり、私自身のテーマをかなり構築しました。MagentoのXMLブロックのポジショニングをより良く理解したいです...
私は通常local.xml
ファイルを使用してすべてを操作します。ブロックを次のように定義できます。
<cms_index_index>
<reference name="root">
<block type="core/template" name="example_block" as="exampleBlock" template="page/html/example-block.phtml"/>
</reference>
</cms_index_index>
これにより、ホームページ(cms_index_index
)にブロックが作成され、ブロックはroot
の1レベル下に作成されるため、通常は以下を追加してブロックを呼び出します。
<?php echo $this->getChildHtml('exampleBlock') ?>
... 1column.phtml
(または2columns-left
/right.phtml
、3columns.phtml
など)へ。適切なページタグをcms_index_index
に置き換えることにより、ブロックを任意のページに配置できます。
コアXMLファイル全体およびチュートリアルには、次のようなものがあります。
<reference name="root">
<block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
content
はmagentoの一般的なページ構造の一部であるブロックであり、私が理解していることから、before="content"
はgetChildHtml('exampleBlock')
を使用せずに、あなたが期待する場所に配置すべきです。とても良い...しかし、前/後はほとんど役に立たないようです。私は頻繁にバックアップとしてgetChildHtmlメソッドに頼っています。これは必ずしも理想的ではなく、必要以上の.phtmlファイルを編集することを意味します。
私はもう試した:
<reference name="root">
<block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
何も表示されません...
<reference name="root">
<block type="core/template" name="example_block" after="header" template="page/html/example-block.phtml"/>
</reference>
まだ何もありません...私は、before="-"
またはafter="-"
を使用して、親ブロック内のすべての前に何かを配置することも知っています。私は時々それでいくらか運がありますが、一般的には混乱して欲求不満になります。
私は「動作しない前/後のmagento xml」の場所をグーグルで検索し、それが私だけに起こるのだろうかと疑問に思い始めています...ブロックを配置するために前/後を使用できる場合とできない場合は誰でも説明できますか?上記の例の何が問題になっていますか?
私はmagento 1.7.0.2にいます(投稿時の最新版)
これの主な動機は、getChildHtml()
を追加するために編集する必要があるコア.phtmlファイルの数を減らすことです。したがって、これを回避する別の(XML)方法がある場合、知りたいと思います...
before
およびafter
属性は、次の2つの場合のいずれかでのみ機能します。
core/text_list
ブロックに挿入するときgetChildHtml
を呼び出すときあなたが言う時
<reference name="root">
<block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
あなたはMagentoに言っている
ちょっとMagento、
root
ブロックの中にexample_block
を入れてください。
親の中にいくつかの異なるブロックを配置すると、それらのブロックには暗黙的な順序があります。テンプレートブロックの場合、これらのブロックは明示的にレンダリングされるため、この順序は重要ではありません。
<?php echo $this->getChildHtml('example_block') ?>
ただし、順序が重要な場合が2つあります。まず、電話をかけると
<?php echo $this->getChildHtml() ?>
テンプレートから、Magentoはall子ブロックを順番にレンダリングします。
第二に、「テキストリスト」と呼ばれる特別なタイプのブロックがあります(core/text_list
/Mage_Core_Block_Text_List
)。これらのブロックは、すべての子を再び順番に自動的にレンダリングします。 content
ブロックはこの例です
<block type="core/text_list" name="content"/>
これが、ブロックをcontent
に挿入して、自動的にレンダリングできる理由です。
したがって、上記の例では、root
ブロックにブロックを挿入しています。 root
ブロックは、phtmlテンプレートが明示的なパラメーターでgetChildHtml
呼び出しを使用するテンプレートブロックです。したがって、before
属性とafter
属性は、あなた(および私を含む他の多くの人)が望んでいたことを行いません。