Magentoのブロックとブロックタイプについて


105

の意味を理解したいだけ

 <block type="page/html" name="root" output="toHtml" template="example/view.phtml">

私はGoogleから多くの参照を得て、それについて多くのことを理解しtype="page/html"ましたが、カスタムモジュールのタイプを形成する方法の形成をまだ理解できません。

説明してください

type="A/B"

このAとBの出所を教えてください。

回答:


126

Aモジュールのあるエイリアス。この場合pageはの略ですMage_Page_Blockapp/code/core/Mage/Page/etc/config.xml見たい場合はで定義されています)。

Bエイリアスに対するクラス名で、各単語の最初の文字が大文字です。この場合htmlになりHtml、解決エイリアスに追加されるので、それがありますMage_Page_Block_Htmlapp/code/core/Mage/Page/Block/Html.phpクラス名はMagento内の場所に直接変換されるため、これはおそらくファイル内にあります。

ブロックエイリアスの代わりにモデルエイリアスを使用した場合pageは、Mage_Page_Model代わりに使用されます。同じことがリソースモデルとヘルパーにも起こります。独自のモジュールは、それの中でこれらを定義する必要があります設定、それはブロック、モデルやヘルパーを持っている場合。


@clockworkgeekどうもありがとうございました。あなたの答えは私にとってとても役に立ちます。
Anup_Tripathi

あなたは私を1トン救った。ありがとう。
Sumit Malik 2013年

素敵な説明
Jalpesh Patel

それが書き換えられた/上書きされたブロックである場合、どうすればブロックタイプを定義して使用できますか?
Vicky Dev 2017

@VickyDev新しいブロックは古いブロックの子孫であり、互換性があるため、何もする必要はありません。あなたはそれが存在しないふりをすることができ、そうすべきです。
clockworkgeek 2017

158

magentoブロックタイプの詳細については、レイアウトで広く使用されているいくつかの組み込みブロックタイプを次に示します。

  1. core/template:このブロックは、そのtemplate 属性で定義されたテンプレートをレンダリングし  ます。レイアウトで定義されている大部分のブロックは、タイプまたはサブタイプです  core/template
  2. page/html:これはのサブタイプで  core/template あり、ルートブロックを定義します。他のすべてのブロックは、このブロックの子ブロックです。
  3. page/html_head:JavaScript、CSSなどを含めるための要素を含むページのHTMLヘッドセクションを定義します。
  4. page/html_header:サイトのロゴ、トップリンクなどを含むページのヘッダー部分を定義します。
  5. page/template_links:このブロックは、リンクのリストを作成するために使用されます。フッターとヘッダー領域に表示されるリンクは、このブロックタイプを使用します。
  6. core/text_list:のようないくつかのブロック  content、  left、  right などがタイプです  core/text_list。これらのブロックがレンダリングされると、getChildHtml() メソッドを呼び出す必要なく、すべての子ブロックが自動的にレンダリングされます。
  7. page/html_wrapper:このブロックは、アクションによって設定されたHTMLタグ内に子ブロックをレンダリングするラッパーブロックを作成するために使用されます  setHtmlTagName。デフォルトのタグは<div> 、要素が設定されていない場合です  。
  8. page/html_breadcrumbs:このブロックは、ページのブレッドクラムを定義します。
  9. page/html_footer:フッターリンク、著作権メッセージなどを含むページのフッター領域を定義します。
  10. core/messages:このブロックは、エラー/成功/通知メッセージをレンダリングします。
  11. page/switch:このブロックは、言語またはストアスイッチャーに使用できます。

これは、一般的に使用されるブロックタイプのみのリストです。高度なテーマの実装で使用される他の多くのブロックタイプがあります。


何について:{{block type = "cms / block" block_id = "terms"}}
daslicht

5
@daslichtすでに回答で言及されている:これは一般的に使用されるブロックタイプのみのリストです。高度なテーマの実装で使用される他の多くのブロックタイプがあります。
Kamesh Jungi

ありがとう。本当に役に立ちました。
arqam

8
<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>

これで、ブラウザで出力を取得できます "ブロックが呼び出されました"


ブロックにhello.phpという名前を付けましたが、ブロッククラスの名前は 'namespace_modulename_Block_Data'ですが、名前の末尾がHelloである必要はありませんか?
Rai Ehtisham 2016年

5

"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()


3

"B"タイプはわかりませんが、 "A"はconfig.xmlのモジュール名タグを参照します

config.xmlファイルの例:

<A><!-- script --></A>

nb:私は間違っていないことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.