1

ブロックを作成し、そのブロックをテンプレートに追加したい

$this->_addContent($this->getLayout()->createBlock("device/device"))

現在、何も表示されていません。

ブロックがレンダリングされるように注意すべき点は何ですか(注意すべきファイルは何ですか?)

ノート:

 COMPANY NAME: Abc
 MODULE NAME: Device

また、createBlock( "device / device")は"false"を返します

4

2 に答える 2

9

device/device渡される文字列はクラスcreateBlockエイリアスです。クラスエイリアスは、Magento開発者に、実際のクラス名を使用せずにクラスを参照する方法を提供します。この間接参照により、クラスをインスタンス化して使用するコードを変更することなく、あるクラスを別のクラスに置き換える(またはMagentoの用語で書き直す)ことができます。

モジュールのファイルでクラスのプレフィックスをconfig.xml次のように定義することから始めます(注:このコードを、単に下部にドロップするのではなく、既存のタグに追加してくださいconfig.xml)。

<config>
    <global>
        <blocks>
            <device>
                <class>Abc_Device_Block</class>
            </devicer>
        </blocks>
    </global>
</config>

ブロックのクラス名を作成する場合、xmlの部分は、エイリアスの/の前にある部分であり、クラス名を生成するときにタグの内容に置き換えられます。次に、/は_に置き換えられ、クラスエイリアスの残りの部分がクラス名に追加されます。したがって、クラスエイリアスdevice/deviceと上記のXMLを使用して、次のクラス名が作成されます。Abc_Device_Block_Deviceこれは、Magentoがで見つけることを期待していますAbc/Device/Block/Device.php。include_pathで指定された順序でフォルダを検索します。通常は、app/code/local次に、、最後に`libです。app/code/communityapp/code/core

同じ基本ロジックがモデルクラスとヘルパークラスにも適用されます。

Alan Stormの不可欠なCommerceBug拡張機能には、クラス名とファイルの場所に関して、どのモデル/ブロック/ヘルパークラスエイリアスがマップされるかをテストするための優れたツールがあります。

このメソッドの他のパラメーターは、レイアウトXMLファイルからブロックを参照(および変更)するために使用できる名前、およびレイアウトXMLにある他の属性の配列です。

于 2012-06-21T23:49:57.787 に答える
2

それはジムの素晴らしい答えでした。それにポイントを追加すると、優先順位は

  1. ローカル
  2. コミュニティそして来る
  3. 私が間違っていなかったらコア。
于 2012-06-22T00:46:39.937 に答える