質問
私は混乱していると思います。なぜなら、Magentoを学んだ後、この基本的な疑念を得ているからです。
問題は、作成したテーマフォルダーのレイアウトで新しいブロックを作成したことです。私が理解できないのは、ブロックレイアウト要素の「タイプ」属性の値はどうあるべきかということです。
「タイプ」属性はPHPクラスを指すことを知っていますが、私が理解できないのは、ブロックレイアウト要素に「タイプ」属性として割り当てる必要があるPHPクラス名ですか?
ブロックは、以下に示されています。タイプ" --> page/html_header
. (なぜそれがレンダリングされているのかわかりません 大丈夫 この「タイプ」属性値)
<block type="page/html_header" name="happy.label" as="happyLabel" template="page/html/happyLabel.phtml"/>
関連するXMLレイアウトコードは次のとおりです design/frontend/default/{$mytheme}/layout/page.xml
:
<default translate="label" module="page">
<label>All Pages</label>
<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
<!--------------->
<block type="page/html_header" name="header" as="header">
<block type="page/html_header" name="happy.label" as="happyLabel" template="page/html/happyLabel.phtml"/>
<block type="page/template_links" name="top.links" as="topLinks"/>
<block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>
<block type="core/text_list" name="top.menu" as="topMenu" translate="label">
<label>Navigation Bar</label>
<block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml"/>
</block>
<block type="page/html_wrapper" name="top.container" as="topContainer" translate="label">
<label>Page Header</label>
<action method="setElementClass"><value>top-container</value></action>
</block>
<block type="page/html_welcome" name="welcome" as="welcome"/>
</block>
<!--------------->
</block>
</default>
テンプレートファイルには、ULおよびLI形式の5つのリストアイテムのみがあります。
編集:
- ブロックを作成するときに、「タイプ」属性に渡す値をどのように選択する必要がありますか?
解決
タイプが、関連するテンプレートファイルの表示をレンダリングするために使用されるブロッククラスを定義することが正しいです。
「page/html_header」を使用する理由は、それがベースMagentoテンプレートブロックのチャイルドクラスであるためです mage_core_block_template
class Mage_Page_Block_Html_Header extends Mage_Core_Block_Template
テンプレートファイルはクラスmage_page_block_html_header(またはその親)にないメソッドを呼び出していないため、最終的にはテンプレートをロードするために必要なベースメソッドをすべて備えたベースコア/テンプレートクラスを扱っているため、最終的には正常にレンダリングされます。レンダリング(たとえば、保護された関数_tohtml())
テンプレートがレンダリングするために特別な機能を必要としないため、「コア/テンプレート」をタイプとして使用することもできます(また)使用できます。
たとえば、テンプレートファイルには、生命、宇宙、およびすべてへの答えを決定するための方法を呼び出しました。
<?php echo $this->whatIsTheAnswer() ?>
その後、テンプレートのレンダリングは失敗しました。 $これはブロック定義で定義されているタイプです。Mage_Page_Block_Html_Header
あなたの場合/例。
したがって、Type =テンプレートファイルから呼び出されるメソッドを含むクラス。 ($これはテンプレートで)テンプレートファイルにカスタム呼び出し/メソッドがない場合、コア/テンプレートで十分です。カスタムメソッドが必要な場合は、カスタムモジュールでそのブロックを作成し、タイプとして使用する必要がありますが、カスタムブロックは最終的に継承を介して「mage_core_block_template」につながる必要があります。
それがあなたがそれをもう少し理解するのに役立つことを願っています、そうでなければ、尋ねてください、そして私はもっと説明しようとします。