magento
Rendering
Suche…
Bemerkungen
Anpassen der Kernfunktionalität mit Designs
Themes verfügen über Layout-Dateien, mit denen unter anderem geändert werden kann, welche Blöcke auf der Seite erscheinen. Die Blockvorlage kann auch geändert und verschiedene Methoden aufgerufen werden.
Designs auf Ladenebene
Magentos hierarchisch strukturierte Themen bedeuten, dass ein Basisthema erweitert und auf Geschäftsebene zugewiesen werden kann.
Benutzerdefinierte Designs registrieren
Themes können auf drei Arten konfiguriert werden:
- Pro Shop unter System> Konfiguration> Design.
- Designänderung mit Zeitlimit System> Design.
- Themenausnahmen können auch auf Kategorie- und Produktebene festgelegt werden.
Paket gegen Thema
Ein Paket hat mehrere Themen. Jedes Design eines Pakets erbt vom Standarddesign eines Pakets.
Design Fallback
Das Fallback-Verfahren für das Finden von Vorlagendateien lautet:
- {package} / {theme}
- {package} / default
- Basis / Standard
Um dem Fallbackmechanismus weitere Designs hinzuzufügen, muss die Mage_Core_Model_Design_Package :: getFilename-Methode neu geschrieben werden
Für den Adminbereich ist der Fallback Default / Default.
Vorlagen- und Layoutpfade
Blöcke
Blöcke werden für die Ausgabe verwendet. Der Root-Block ist das übergeordnete Element aller Blöcke und hat den Typ Mage_Page_Block_Html.
Mage_Core_Block_Template-Blöcke verwenden zum Rendern von Inhalten Vorlagendateien. Der Name der Vorlagendatei wird innerhalb von setTemplate () oder addData ('template') mit relativen Pfaden festgelegt.
Vorlagen sind nur Teile von PHP, die in Mage_Core_Block_Template enthalten sind. Daher bezieht sich $ this in einer Vorlage auf den Block.
Mage_Core_Block_Template verwendet einen Puffer, bevor eine Vorlage eingefügt wird, um eine vorzeitige Ausgabe zu verhindern.
Die Mage_Core_Model_Layout :: createBlock-Methode erstellt Instanzen von Blöcken.
Die Mage_Core_Model_Layout_Update-Klasse berücksichtigt, welche Blöcke für jede Seite erstellt werden müssen, indem die Layout-Handles betrachtet werden.
Alle Ausgabeblöcke werden gerendert, z. B. durch Aufruf von toHtml (), die wiederum die untergeordneten Elemente darstellen kann.
Text- und Text_List-Blöcke rendern automatisch ihren Inhalt.
Beim Block-Rendering werden zwei Ereignisse ausgelöst, mit denen der Block vor und nach dem Rendern des HTML-Codes geändert werden kann:
core_block_abstract_to_html_before core_block_abstract_to_html_after Ein untergeordneter Block wird nur dann automatisch gerendert, wenn er zur Klasse Mage_Core_Block_Textlist gehört. Andernfalls muss die Methode getChildHtml aufgerufen werden.
Auf Blockinstanzen kann über das Layout zugegriffen werden, z. B. Mage :: app () -> getLayout () und $ controller-> getLayout (). Die Blockausgabe wird von der Funktion _toHtml () gesteuert.
Vorlagen werden von den Methoden renderView () / fetchView () innerhalb eines Vorlagenblocks gerendert. Die Ausgabepufferung kann mit $ layout-> setDirectOutput deaktiviert werden.
Es ist möglich, einen Block zum aktuellen Layout hinzuzufügen. Dies muss jedoch vor dem Aufruf der renderLayout () -Methode geschehen.
Layout XML
<reference>
-edit a block
<block>
- define a block
<action>
- call method on a block
<update>
- include nodes from another handle.
Layoutdateien können in config.xml registriert werden:
<config>
<{area}>
<layout>
<updates>
<{name}>
<file>{filepath}</file>
</{name}>
</updates>
</layout>
</{area}>
</config>
Die Seitenausgabe kann auf folgende Weise angepasst werden:
- Vorlagenänderungen
- Layoutänderungen
- Blöcke überschreiben
- Observers Variablen für Blöcke können auf folgende Weise festgelegt werden:
- Layout - Durch Aktionen oder Attribute
- Controller - $ this-getLayout () -> getBlock ()
- Untergeordnete Blöcke - $ this-> getChild ()
- Other -Mage :: app () -> getLayout ()
Head Block Assets
JavaScript- und CSS-Elemente werden im Block Mage_Page_Block_Html_head behandelt. Dieser Block behandelt das Zusammenführen von Assets in einer einzigen Datei, um HTTP-Anforderungen zu minimieren. Die zusammengeführte Datei basiert auf der Bearbeitungszeit der Quelldateien.
Beim Zusammenführen von CSS wird eine Callback-Funktion in Mage_Core_Model_Design_Package aufgerufen, um die Anweisungen @import oder url () mit den richtigen URLs zu aktualisieren
Verschiedene Mechanismen zum Deaktivieren der Blockausgabe
- Wenn die Antwort bereits außerhalb des regulären Rendering-Prozesses (z. B. in einem Observer) für das Antwortobjekt erstellt und festgelegt wurde, kann das Flag 'no-renderLayout' auf dem Aktionscontroller mit gesetzt werden
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
- Dies verhindert, dass
renderLayout()
die Ausgabeblöcke verarbeitet. - Dasselbe kann durch Aufrufen von setNoRender (true) auf dem Frontcontroller erreicht werden:
Mage::app()->getFrontController()->setNoRender(true);
- Das Festlegen des
isDispatched()
Flags für dasisDispatched()
möglicherweise effizienter, um einen ähnlichen Effekt zu erzielen.
verschiedene Arten von Blöcken
- 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 Alle Blöcke sind entweder Strukturblöcke oder Alle Blöcke sind entweder Strukturblöcke oder Inhaltsblöcke. Beispiel:
- core / text_list
Beispiel eines Strukturblocks .
Es verwendet keine Vorlagen; Es wird einfach verwendet, um den Inhalt aller untergeordneten Blöcke nacheinander auszugeben.
- Kern / Vorlage
Beispiel für einen Inhaltsblock .
Die Ausgabe dieses Blocktyps hängt von der zugewiesenen Vorlage ab. Die untergeordneten Blöcke werden innerhalb der Vorlage über die Methode getChildHtml ('block_name') ausgegeben. Beispiel: core / text_list - Beispiel für einen Strukturblock. Es verwendet keine Vorlagen; Es wird einfach verwendet, um den Inhalt aller untergeordneten Blöcke nacheinander auszugeben. core / template - Beispiel eines Inhaltsblocks. Die Ausgabe dieses Blocktyps hängt von der zugewiesenen Vorlage ab. Die untergeordneten Blöcke werden innerhalb der Vorlage über die Methode getChildHtml ('block_name') ausgegeben.
Auf Blockinstanzen kann von der Steuerung aus zugegriffen werden
Von einem Action Controller:
$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()
);
}