web-dev-qa-db-ja.com

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

私はただの意味を理解したい

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

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

説明してください

type="A/B"

このAとBがどこから来たのか教えてください。

105
Anup_Tripathi

Aはモジュールのエイリアスです。この場合、pageMage_Page_Blockの短縮形です(表示したい場合はapp/code/core/Mage/Page/etc/config.xmlで定義されます)。

Bはエイリアスに関連するクラス名で、各Wordの頭文字は大文字です。この場合、htmlHtmlになり、解決されたエイリアスに追加されるため、Mage_Page_Block_Htmlになります。クラス名はMagentoの場所に直接変換されるため、これはおそらくapp/code/core/Mage/Page/Block/Html.phpファイルにあります。

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

126
clockworkgeek

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_listcontentleftrightなどのようないくつかのブロックはcore/text_list型です。これらのブロックがレンダリングされると、getChildHtml()メソッドを呼び出す必要なく、すべての子ブロックが自動的にレンダリングされます。
  7. page/html_wrapper:このブロックは、アクションsetHtmlTagNameによって設定されたHTMLタグ内に子ブロックをレンダリングするラッパーブロックを作成するために使用されます。要素が設定されていない場合、デフォルトのタグは<div>です。
  8. page/html_breadcrumbs:このブロックは、ページ上のパンくずリストを定義します。
  9. page/html_footer:フッターリンク、著作権メッセージなどを含むページのフッターエリアを定義します。
  10. core/messages:このブロックは、エラー/成功/通知メッセージを表示します。
  11. page/switch:このブロックは、言語またはストアスイッチャーに使用できます。

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

156
Kamesh Jungi
<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()を確認することをお勧めします。

5
ZeNC

「B」タイプについては知りませんが、「A」はconfig.xmlのモジュール名タグを参照します

Config.xmlファイルの例:

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

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

3
Rully