Wie finde ich heraus, welche Layout-Handles geändert werden sollen?

8

Wie finde ich heraus, welche Handles ich verwenden soll, wenn ich eine bestimmte Seite anpassen möchte?

Bei der Online-Suche habe ich beispielsweise herausgefunden, dass dies checkout_onepage_indexdas Handle zum Ändern der Checkout-Seite ist. Ich weiß nichts über diese Magie, aber irgendwie weiß es einfach jemand und ich möchte wissen, wie sie diese Magie lernen.

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

Woher weiß ich, was behandelt wird, wenn ich stattdessen die Erfolgsseite ändern möchte? oder die Detailseite der Frontend-Bestellung? usw...?

Yeo
quelle

Antworten:

5

Sie können dies zu Ihrer Controller-Aktion hinzufügen. Es zeigt Handles ordentlicher als var_dump. Seltsam, dass diese Antwort noch nicht gestapelt ist.

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

Im einfachsten Fall stellen Layout-Handles dar frontName_controller_action.

Also, in Ihrem Beispiel:

  • frontNameist checkoutfür das Mage_CheckoutModul (wie durch seine config.xmlDatei im <routers></routers>Abschnitt definiert).
  • controllerist onepagefür Mage_Checkout_OnepageController.
  • actionist indexfürMage_Checkout_OnepageController::indexAction()

Beachten Sie, dass dies nur der einfachste Fall ist. Layout-Handles können an vielen anderen Stellen und PRODUCT_TYPE_xauf verschiedene Arten erstellt / hinzugefügt werden, z. B. in der Kataloglogik ( Layout-Handles für verschiedene Produkttypen).

Eine gute Möglichkeit, Layout-Handles zu finden, besteht darin, die Dateien einzuchecken. In design/frontend/base/default/layoutdiesem Verzeichnis werden alle Layout-Dateien des Basispakets / Themas gespeichert, und es enthält die meisten (wenn nicht alle) Standard-Layout-Handles, die Sie verwenden nutzen kann.

Agop
quelle
ist frontName_controller_actionnur eine Konvention? Ich habe geglaubt, dass es einige Griffe gibt, die diesem Muster nicht folgen, stimmt das?
Yeo
Ja, das ist nur eine Konvention für die meisten Controller. Und ja, es gibt viele andere Layout-Handles, und Sie können sogar Ihre eigenen hinzufügen.
Agop
3

Wir haben hier aufgeschrieben, wie der Griff aufgebaut ist (und viele andere Dinge):

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

und wir haben ein paar Layout-Handles aufgeschrieben, die man kennen sollte, wie customer_logged_in|out

Benutzerdefinierte Aktion

Das Layout-Handle wird mit dem NODE-Namen erstellt!

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

Route: Frontend // Layout Handle: companyModule_frontend_controllerName_actionName

Phtandard Layout-Griff

Passen


^ Magento verwendet abhängig von der angeforderten Seite nur Teile der Layout-XML-Datei. Diese Teile werden als Layout-Handle bezeichnet. Es gibt einige, die jedes Mal verwendet werden, und andere, die zu genau einer URL gehören

Die wichtigsten Layout-Handles, die nicht zu einer Seite gehören:

  • (alle Seiten)
  • (Kundenstatus)
  • (Kategorie ohne LN)
  • (Kategorie mit LN)
  • (Alle Kategorien)
  • (Produktdetailseite)

Spezieller Layout-Griff

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

Benutzerdefiniertes Layout-Handle

Am einfachsten: Fügen Sie eine mit einem Beobachter hinzu

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

als Sie in Layout-XML verwenden können

<layout>
    <my_own_handle>
Fabian Blechschmidt
quelle
2

Die Konvention wird auf diese Weise erstellt, da Magento vor dem Laden des Layouts zunächst nach dem Handle mit diesem Handle-Typ sucht, damit es die Vorlage vom Controller findet. Sie können jedoch Ihre eigenen benutzerdefinierten Handles erstellen


öffentliche Funktion 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);
    }

Übrigens gibt es unten 5 Arten von Griffen, und wir sprechen hier über den vierten.

default
STORE_bare_us
THEME_frontend_default_default
helloworld_index_index
customer_logged_out

Weitere Informationen finden Sie unter

http://alanstorm.com/layouts_blocks_and_templates

Rahul Kathuria
quelle