[解決済み] MagentoのgetChildHtmlを理解する
質問
2columns-right.phtmlの以下の行から。
<div class="col-main">
<?php echo $this->getChildHtml('global_messages') ?>
<?php echo $this->getChildHtml('content') ?>
</div>
がどこにあるのか理解できません。
content
で
<?php echo $this->getChildHtml('content') ?>
が来ています。
によってデータを表示するために、どの.phtmlファイルが呼び出されるのでしょうか?
<?php echo $this->getChildHtml('content') ?>
?
解決方法は?
ウェブサイトのフロントエンドの話であれば、ご質問の特定の行は......。
<?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" 属性を見れば、レイアウトのこのセクションがどのオブジェクトクラスであるかがわかります。これは"Core"モジュールに由来し、ブロック・タイプはText Listです。この 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
最初に見つかったものが使用されます。ビュースクリプトが見つからなかった場合は
var/logs/system.log
(デフォルトのログファイル設定) に、ビュースクリプトが見つからなかったと記載されています。このブロックからの出力は発生しません。
システム -> 構成 -> (一般)設計での設定によっては、さらに別の
package/theme
の場所を探します。また、個々の CMS ページ、カタログカテゴリ、またはカタログ商品について "Custom Theme" フィールドが変更された場合、これらの個々のモデルのビューページには、サイトのデフォルト設定よりも優先される追加のビュースクリプトの場所(選択したテーマに一致する)があるかもしれないといったシナリオもあります。
Magento は、レイアウト XML ファイルだけでなく、翻訳ファイルを探す際にも、これと同じフォールバックロジックに従います。
個々のビュースクリプトをコピーすることはまったく問題ありません。
app/design/frontend/base/default/template/
をローカルテーマに追加し、ウェブサイトのテーマの目的に合わせてカスタマイズしてください。ただし、アップグレードに対応したサイトにするためには
レイアウトファイル
は、ベーステーマからローカルテーマにコピーしてはいけません。そうすると、アップグレードに対応した慣習に従わないからです。代わりに、あなたのテーマのための XML レイアウトの更新は、以下のものに含まれていなければなりません。
app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml
. からのレイアウト指示はありません。
app/design/frontend/base/default/layout/*
を削除したり、追加したり、変更したりすることは、local.xml の適切な XML 命令で可能です。
関連
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
[解決済み】Fatal error: mysqli_result 型のオブジェクトは使用できません [終了] 。
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み] [Solved] Fatal error: メンバ関数 query() の null への呼び出し。
-
[解決済み】Fatal error: mysqli_result 型のオブジェクトは使用できません [終了] 。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。