私はただの意味を理解したい
<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
はエイリアスに関連するクラス名で、各Wordの頭文字は大文字です。この場合、html
はHtml
になり、解決されたエイリアスに追加されるため、Mage_Page_Block_Html
になります。クラス名はMagentoの場所に直接変換されるため、これはおそらくapp/code/core/Mage/Page/Block/Html.php
ファイルにあります。
ブロックエイリアスの代わりにモデルエイリアスを使用している場合、page
は代わりにMage_Page_Model
になります。リソースモデルとヘルパーでも同じことが起こります。独自のモジュールでは、ブロック、モデル、ヘルパーを使用する場合、これらを config で定義する必要があります。
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
:このブロックは、アクションsetHtmlTagName
によって設定されたHTMLタグ内に子ブロックをレンダリングするラッパーブロックを作成するために使用されます。要素が設定されていない場合、デフォルトのタグは<div>
です。page/html_breadcrumbs
:このブロックは、ページ上のパンくずリストを定義します。page/html_footer
:フッターリンク、著作権メッセージなどを含むページのフッターエリアを定義します。core/messages
:このブロックは、エラー/成功/通知メッセージを表示します。page/switch
:このブロックは、言語またはストアスイッチャーに使用できます。これは、一般的に使用されるブロックタイプのみのリストです。高度なテーマの実装で使用される他の多くのブロックタイプがあります。
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">
pageはetc/config.xml
ファイルで定義されたFrontendName 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 page
ここでは、直接mydata()関数を呼び出すことができます
好む
<div>
<?php echo $this->mydata(); ?>
</div>
ブラウザで出力を取得できるようになりました「ブロックが呼び出されました」
「B」タイプについては知りませんが、「A」はconfig.xmlのconfig.xmlの例でモジュール名タグを参照します。
<A><!-- script --></A>
いいえ、あなたは間違っていません。しかし、"<!-- script -->"
は紛らわしいかもしれません。明確にしましょう:上記の回答が述べたように、これは2つの部分で構成されるエイリアスです。最初の部分( "A")自体は、モジュールのconfig.xml
でモジュールのクラスに定義するエイリアスです。ノードの値に相対的なパス。これらを一緒に(「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()
を確認することをお勧めします。
「B」タイプについては知りませんが、「A」はconfig.xmlのモジュール名タグを参照します
Config.xmlファイルの例:
<A><!-- script --></A>
nb:私が間違っていないことを願っています。