magento
レンダリング
サーチ…
備考
テーマによるコア機能のカスタマイズ
テーマにはレイアウトファイルがあり、とりわけページに表示されるブロックを変更するのに使用できます。ブロックテンプレートを変更して、異なるメソッドを呼び出すこともできます。
店舗レベルの設計
Magentoの階層構造テーマは、基本テーマを店舗レベルで拡張して割り当てることができるということを意味します。
カスタムテーマの登録
テーマは、次の3つの方法で設定できます。
- システム>設定>デザインの下の店舗ごと。
- 時間制限付きの設計変更システム>設計。
- テーマの例外は、カテゴリと製品レベルで設定することもできます。
パッケージとテーマ
パッケージには複数のテーマがあります。パッケージ内の各テーマは、パッケージ内のデフォルトテーマを継承しています。
デザインフォールバック
テンプレートファイルを検索するためのテーマフォールバック手順は次のとおりです。
- {パッケージ} / {テーマ}
- {パッケージ} /デフォルト
- ベース/デフォルト
テーマ代替メカニズムにディレクトリを追加するには、Mage_Core_Model_Design_Package :: getFilenameメソッドを書き直す必要があります
管理領域の場合、フォールバックはデフォルト/デフォルトです。
テンプレートとレイアウトのパス
ブロック
ブロックは出力に使用されます。ルートブロックはすべてのブロックの親であり、Mage_Page_Block_Htmlタイプです。
Mage_Core_Block_Templateブロックはテンプレートファイルを使用してコンテンツをレンダリングします。テンプレートファイル名は相対パスでsetTemplate()またはaddData( 'template')内で設定されます。
テンプレートは、Mage_Core_Block_Templateに含まれる単なるPHPの部分です。したがって、$ thisはテンプレートを参照しています。
Mage_Core_Block_Templateは、早すぎる出力を防ぐためにテンプレートを含める前にバッファを使用します。
Mage_Core_Model_Layout :: createBlockメソッドは、ブロックのインスタンスを作成します。
Mage_Core_Model_Layout_Updateクラスは、レイアウトハンドルを見て、各ページに対して作成する必要のあるブロックを考慮します。
すべての出力ブロックがレンダリングされます。たとえば、toHtml()を呼び出すことによってレンダリングされます。これは、子をレンダリングすることを選択できます。
TextおよびText_Listブロックは自動的にコンテンツをレンダリングします。
HTMLをレンダリングする前と後でブロックを変更するために使用できるブロックレンダリングには、2つのイベントが発生します。
core_block_abstract_to_html_before core_block_abstract_to_html_after子ブロックは、クラスMage_Core_Block_Textlistの場合にのみ自動的にレンダリングされます。それ以外の場合、getChildHtmlメソッドを呼び出す必要があります。
ブロックインスタンスは、Mage :: app() - > getLayout()や$ controller-> getLayout()などのレイアウトを通じてアクセスできます。ブロック出力は_toHtml()関数によって制御されます。
テンプレートは、テンプレートブロック内のrenderView()/ fetchView()メソッドによってレンダリングされます。出力バッファリングは$ layout-> setDirectOutputで無効にすることができます。
現在のレイアウトにブロックを追加することは可能ですが、renderLayout()メソッドが呼び出される前にブロックを追加する必要があります。
レイアウトXML
<reference>
-edit a block
<block>
- define a block
<action>
- call method on a block
<update>
- include nodes from another handle.
レイアウトファイルはconfig.xmlに登録することができます:
<config>
<{area}>
<layout>
<updates>
<{name}>
<file>{filepath}</file>
</{name}>
</updates>
</layout>
</{area}>
</config>
ページ出力は、次の方法でカスタマイズできます。
- テンプレートの変更
- レイアウトの変更
- ブロックのオーバーライド
- オブザーバブロックの変数は、次のように設定できます。
- レイアウト - アクションまたは属性を通じて
- コントローラ - $ this-getLayout() - > getBlock()
- 子ブロック - $ this-> getChild()
- その他-Mage :: app() - > getLayout()
ヘッドブロックアセット
JavaScriptとCSSアセットはMage_Page_Block_Html_headブロックで処理されます。このブロックでは、アセットを単一のファイルにマージしてHTTP要求を最小限に抑えます。マージされたファイルは、ソースファイルの編集時間に基づいています。
CSSをマージするとき、Mage_Core_Model_Design_Packageのコールバック関数が呼び出され、@importまたはurl()ディレクティブが正しいURLで更新されます
ブロック出力を無効にするためのさまざまなメカニズム
- レスポンスが既に作成され、通常のレンダリングプロセス(例えば、オブザーバ内)の外側のレスポンスオブジェクトに設定されている場合、アクションコントローラで 'no-renderLayout'フラグを使用して設定できます
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
- これにより、
renderLayout()
が出力ブロックを処理できなくなります。 - フロントコントローラでsetNoRender(true)を呼び出すことでも同じことができます:
Mage::app()->getFrontController()->setNoRender(true);
- 同様の効果を得るには、レスポンスオブジェクトに
isDispatched()
フラグを設定する方が効率的かもしれません。
異なるタイプのブロック
- Mage_Core_Block_Template
- Mage_Core_Block_Text_List
- Mage_Core_Block_Messages
- Mage_Core_Block_Text_Tag
- Mage_Core_Block_Text
- Mage_Page_Block_Template_Linksすべてのブロックは構造ブロックであるか、またはすべてのブロックは構造ブロックまたはコンテンツブロックのいずれかです。例:
- コア/テキストリスト
構造ブロックの例
テンプレートは使用しません。すべての子ブロックの内容を順に出力するために使用されます。
- コア/テンプレート
コンテンツブロックの例
このタイプのブロックの出力は、割り当てられたテンプレートに依存します。その子ブロックはgetChildHtml( 'block_name')メソッドを介してテンプレート内に出力されます。例:core / text_list - 構造ブロックの例。テンプレートは使用しません。すべての子ブロックの内容を順に出力するために使用されます。 core / template - コンテンツブロックの例。このタイプのブロックの出力は、割り当てられたテンプレートに依存します。子ブロックはgetChildHtml( 'block_name')メソッドを介してテンプレート内に出力されます。
ブロックインスタンスはコントローラからアクセスできます
アクションコントローラから:
$this->getLayout()->getBlock('head')->getTemplate();
/**
* Get specified tab grid
*/
public function gridOnlyAction()
{
$this->_initProduct();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('adminhtml/catalog_product_edit_tab_' .
$this->getRequest()->gerParam('gridOnlyBlock')
)
->toHtml()
);
}