変更するレイアウトハンドルを見つける方法は?


8

特定のページをカスタマイズしたい場合、どのハンドルを使用すればよいですか?

たとえば、オンラインで検索したところcheckout_onepage_index、チェックアウトページを変更するためのハンドルであることがわかりました。私はこの魔法については知りませんが、どういうわけか誰かがそれを知っていて、どうやってこの魔法を学ぶのか知りたいです。

<?xml version="1.0"?>
<layout>
    <checkout_onepage_index>
        <reference name="head"></reference>
    </checkout_onepage_index>
</layout>

代わりに成功ページを変更したい場合、どのように処理するかを知るにはどうすればよいですか?またはフロントエンド注文詳細ページ?等...?

回答:


5

これをコントローラーアクションに追加できます。ハンドルはvar_dumpよりもきれいに表示されます。この回答がまだスタックされていないことは奇妙です。

Zend_Debug::dump($this->getLayout()->getUpdate()->getHandles());

3

最も単純なケースでは、レイアウトハンドルはを表しfrontName_controller_actionます。

したがって、あなたの例では:

  • frontNameであるcheckoutためにMage_Checkout(それによって定義されるように、モジュールconfig.xml内のファイル<routers></routers>を参照)。
  • controlleronepageためMage_Checkout_OnepageControllerです。
  • actionindexためですMage_Checkout_OnepageController::indexAction()

これは最も単純なケースにすぎないことに注意してください。レイアウトハンドルは、カタログロジック(PRODUCT_TYPE_xさまざまな製品タイプのレイアウトハンドル)など、他の多くの場所や方法で作成/追加できます。

使用するレイアウトハンドルを見つける良い方法は、ファイルをチェックインすることです。design/frontend/base/default/layoutこのディレクトリには、基本パッケージ/テーマのすべてのレイアウトファイルが格納されており、すぐに使用できるレイアウトハンドルのほとんど(すべてではない)があります。利用できます。


あるfrontName_controller_actionだけの規則?これらのパターンに従わないハンドルがいくつかあると思いましたが、それは本当ですか?
Yeo

うん、それはほとんどのコントローラーの慣例にすぎません。そして、はい、他にもたくさんのレイアウトハンドルがあり、独自のハンドルを追加することもできます。
Agop

3

ハンドルがどのように構築されるか(および他の多くのもの)をここに書き留めました。

http://theslidesareonline.de/magento-in-30-minutes-en.pdf

知っておくべきいくつかのレイアウトハンドルを書き留めました。 customer_logged_in|out

カスタムアクション

レイアウトハンドルはNODE名で構築されます!

<routers>
    <companyModule_frontend>
        <use>standard</use>
        <args>
            <module>Company_Module</module>
            <frontName>frontend</frontName>
        </args>
    </companyModule_frontend>
</routers>

ルート:フロントエンド//レイアウトハンドル:companyModule_frontend_controllerName_actionName

Phtandardレイアウト-ハンドル

フィット


^ Magentoは、要求されたページに応じて、Layout-XMLファイルの一部のみを使用します。これらのパーツはレイアウトハンドルと呼ばれます。毎回使用されるものと、正確に1つのURLに属するものがあります。

ページに属さない最も重要なLayout-Handles:

  • (すべてのページ)
  • (お客様のステータス)
  • (LNなしのカテゴリ)
  • (LNのあるカテゴリ)
  • (すべてのカテゴリ)
  • (商品詳細ページ)

特別なレイアウト-ハンドル

<PRODUCT\_TYPE\_(simple|configurable|grouped|virtual|downloadable|bundle{|giftcard})

カスタムレイアウトハンドル

最も簡単:オブザーバーで追加する

public function addMyOwnLayoutHandle(){
    Mage::app()->getLayout()->addHandle('my_own_handle');
}

レイアウトXMLで使用できるより

<layout>
    <my_own_handle>

2

規則をこのように作成しているのは、レイアウトをロードする前に、magentoが最初にこのタイプのハンドルを使用してハンドルを検索し、コントローラーからテンプレートを見つけられるようにするためです。ただし、独自のカスタムハンドルを作成できます。


public function controllerActionLayoutLoadBefore(Varien_Event_Observer $ observer) { / ** @var $ layout Mage_Core_Model_Layout * / $ layout = $ observer-> getEvent()-> getLayout();

        $id = Mage::app()->getRequest()->getParam('id');

        /* or */

        if($ourCoolObject = Mage::registry('our_cool_object'))
        {
            $id = $ourCoolObject->getId();
        }

        $layout->getUpdate()->addHandle('OUR_COOL_OBJECT_'.$id);
    }

ちなみに、以下に説明する5種類のハンドルがあり、ここでは4番目のハンドルについて説明します。

default
STORE_bare_us
THEME_frontend_default_default
helloworld_index_index
customer_logged_out

詳細については参照してください

http://alanstorm.com/layouts_blocks_and_templates

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