の意味を理解したいだけ
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">
私はGoogleから多くの参照を得て、それについて多くのことを理解しtype="page/html"
ましたが、カスタムモジュールのタイプを形成する方法の形成をまだ理解できません。
説明してください
type="A/B"
このAとBの出所を教えてください。
の意味を理解したいだけ
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">
私はGoogleから多くの参照を得て、それについて多くのことを理解しtype="page/html"
ましたが、カスタムモジュールのタイプを形成する方法の形成をまだ理解できません。
説明してください
type="A/B"
このAとBの出所を教えてください。
回答:
A
モジュールのあるエイリアス。この場合page
はの略ですMage_Page_Block
(app/code/core/Mage/Page/etc/config.xml
見たい場合はで定義されています)。
B
エイリアスに対するクラス名で、各単語の最初の文字が大文字です。この場合html
になりHtml
、解決エイリアスに追加されるので、それがありますMage_Page_Block_Html
。app/code/core/Mage/Page/Block/Html.php
クラス名はMagento内の場所に直接変換されるため、これはおそらくファイル内にあります。
ブロックエイリアスの代わりにモデルエイリアスを使用した場合page
は、Mage_Page_Model
代わりに使用されます。同じことがリソースモデルとヘルパーにも起こります。独自のモジュールは、それの中でこれらを定義する必要があります設定、それはブロック、モデルやヘルパーを持っている場合。
magentoブロックタイプの詳細については、レイアウトで広く使用されているいくつかの組み込みブロックタイプを次に示します。
core/template
:このブロックは、そのtemplate
属性で定義されたテンプレートをレンダリングし ます。レイアウトで定義されている大部分のブロックは、タイプまたはサブタイプです core/template
。page/html
:これはのサブタイプで core/template
あり、ルートブロックを定義します。他のすべてのブロックは、このブロックの子ブロックです。page/html_head
:JavaScript、CSSなどを含めるための要素を含むページのHTMLヘッドセクションを定義します。page/html_header
:サイトのロゴ、トップリンクなどを含むページのヘッダー部分を定義します。page/template_links
:このブロックは、リンクのリストを作成するために使用されます。フッターとヘッダー領域に表示されるリンクは、このブロックタイプを使用します。core/text_list
:のようないくつかのブロック content
、 left
、 right
などがタイプです core/text_list
。これらのブロックがレンダリングされると、getChildHtml()
メソッドを呼び出す必要なく、すべての子ブロックが自動的にレンダリングされます。page/html_wrapper
:このブロックは、アクションによって設定されたHTMLタグ内に子ブロックをレンダリングするラッパーブロックを作成するために使用されます setHtmlTagName
。デフォルトのタグは<div>
、要素が設定されていない場合です 。page/html_breadcrumbs
:このブロックは、ページのブレッドクラムを定義します。page/html_footer
:フッターリンク、著作権メッセージなどを含むページのフッター領域を定義します。core/messages
:このブロックは、エラー/成功/通知メッセージをレンダリングします。page/switch
:このブロックは、言語またはストアスイッチャーに使用できます。これは、一般的に使用されるブロックタイプのみのリストです。高度なテーマの実装で使用される他の多くのブロックタイプがあります。
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">
ページはetc/config.xml
ファイルhtmlで定義されたフロントエンド名であり、ブロッククラス名です
詳細:
この行でtype(type="page/html")
、あなたに関連するブロッククラス名を定義します。template(template="example/view.phtml">)
名前は各ブロックに固有です。
まずフォルダ構造を見る
app> local> namespace> modulename> etc> config.xml
私たちは設定します FrontendName = 'mymodule'
app> local> namespace> modulename> Block > hello.php
hello.phpで関数を作成しました
class namespace_modulename_Block_Data extends Mage_Core_Block_Template
{
public function mydata()
{
$data = "Block is called";
return $data;
}
}
そしてあなたのレイアウトのXMLページに来てください:
<block type="mymodule/data" name="xyz" template="example/view.phtml">
ここでmydataはフロントエンド名です
そして今あなたのテンプレートに来ます
template / example / view.phtmlページ
ここでmydata()関数を直接呼び出すことができます
お気に入り
<div>
<?php echo $this->mydata(); ?>
</div>
これで、ブラウザで出力を取得できます "ブロックが呼び出されました"
"B"タイプはわかりませんが、 "A"はconfig.xmlのconfig.xmlの例にあるモジュール名タグを参照しています。
<A><!-- script --></A>
いいえ、あなたは間違っていません。しかし、"<!-- script -->"
混乱するかもしれません。明確にしましょう:上記の回答が述べたように、これは2つの部分からなるエイリアスです。最初の部分( "A")自体は、モジュールの内のモジュールのクラスに定義するエイリアスですconfig.xml
。2つ目は、ノードの値。これら(「A」+大文字の「B」)は、最初の部分(「A」ノードの値)を定義したとおりに使用してクラス名に変換されます(時間を必要としない場合は、大文字と小文字に注意してください)苦しみの)と2番目の部分は、各アンダースコアの後に大文字です。したがって、ブロックとこの構成を含むA / Bの例から始めます。
<config>
...
<global>
<blocks>
<A>Vendor_Module_Block</A>
</blocks>
</global>
...
</config>
ランタイムでA/B
は、Magento構成によって解決されVendor_Module_Block_B
、次のパスからオートロードによってインクルードされますpublic/app/local/Vendor/Module/Block/B.php
。より良い理解を得るために私はあなたがを見てみることをお勧めMage_Core_Model_Config::getGroupedClassName()
、Mage_Core_Model_Config::getModelInstance()
とVarien_Autoload::autoload()
。