web-dev-qa-db-ja.com

MagentoでgetChildHtmlを理解する

2columns-right.phtmlの次の行から

<div class="col-main">
    <?php echo $this->getChildHtml('global_messages') ?>
    <?php echo $this->getChildHtml('content') ?>
</div>

<?php echo $this->getChildHtml('content') ?>のコンテンツがどこから来ているのか、私には理解できません。

witch .phtmlファイルは、<?php echo $this->getChildHtml('content') ?>によってデータを表示するために呼び出されます

59
Anup_Tripathi

ウェブサイトのフロントエンドについて議論している場合、あなたが尋ねた特定の行....

<?php echo $this->getChildHtml('content') ?>

app/design/frontend/base/default/layout/page.xmlのMagentoレイアウトXMLに追加されます。 Magentoバージョン1.8では、行92〜94で定義されています。

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

このブロックタグの「type」属性を見ると、レイアウトのこのセクションがどのオブジェクトクラスであるかがわかります。これは「コア」モジュールに由来し、ブロックタイプのテキストリストです。このMage_Core_Block_Text_Listのクラス名。 (app/code/core/Mage/Core/Block/Text/List.php)。テキストリストは、追加の子ブロックを内部に格納することを目的とした単純なブロックコンテナーです。任意の数の子ブロックをテキストリストに追加でき、追加された順序または割り当てられた順序でレンダリングされます。

つまり、あなたの質問に答えるために、$ this-> getChildHtml( 'content')のコンテンツをレンダリングするビュースクリプト(.phtmlファイル)はありません。されたブロックこのブロックに追加され、それ自体にビュースクリプトが関連付けられている場合があります。それらがどのビュースクリプトであるかを調べるには、ブロックを追加したレイアウトXMLを見つける必要があります。

たとえば、ウェブサイトのテーマのフロントエンドに次のレイアウトファイルを追加した場合:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="content">
            <block type="core/template" name="my_view_script" template="hello/world.phtml" />
        </reference>
    </default>
</layout>

上記のコードは、Mage_Core_Block_Templateのオブジェクトクラスを持つブロックを、「content」という名前のブロックに追加します(たまたまあなたが尋ねたものです)。その後、Magentoは次の場所でこの順序でビュースクリプトを探します。

app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml
app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml
app/design/frontend/base/default/template/hello/world.phtml

最初に見つかったものは、それが使用するものです。ビュースクリプトが見つからない場合、Magentoは、ビュースクリプトが見つからなかったことを示すエラーをvar/logs/system.log(デフォルトのログファイル設定)に記録します。ブロックからの出力は発生しません。

システム->設定->(一般)デザインの設定によっては、Magentoが検索するpackage/themeの場所が追加される場合があります。「カスタムテーマ」フィールドが変更された場合など、他のシナリオもあります個々のCMSページ、カタログカテゴリ、またはカタログ製品の場合、これらの個々のモデルのビューページには、サイトのデフォルト設定よりも優先される追加のビュースクリプトの場所(選択したテーマに一致する)があります。

Magentoは、翻訳ファイルおよびレイアウトXMLファイルを検索するときに、この同じフォールバックロジックに従います。

app/design/frontend/base/default/template/からローカルテーマに個々のビュースクリプトをコピー(ディレクトリ全体のコピーを避け、実際に変更するビュースクリプトのみをコピー)し、Webサイトの目的に合わせてカスタマイズすることは完全に許容されることに注意してくださいテーマ。ただし、アップグレード互換サイトを使用するには、レイアウトファイルをベースからローカルテーマにコピーしないでください。そうすることで、アップグレードの互換性のある慣行に従いません。代わりに、テーマのXMLレイアウトの更新をapp/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xmlに含める必要があります。 app/design/frontend/base/default/layout/*からのレイアウト指示はありません。これは、local.xmlの適切なXML指示では、削除、追加、変更、what-have-youはできません。

150
Darren Felton