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...?

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());

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.


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>

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.