Zoeken…


Opmerkingen

Kernfunctionaliteit aanpassen met thema's

Thema's hebben lay-outbestanden die onder andere kunnen worden gebruikt om te wijzigen welke blokken op de pagina worden weergegeven. De bloksjabloon kan ook worden gewijzigd en verschillende methoden worden aangeroepen.

Ontwerpen op winkelniveau

De hiërarchisch gestructureerde thema's van Magento betekent dat een basisthema kan worden uitgebreid en toegewezen op winkelniveau.

Aangepaste thema's registreren

Thema's kunnen op drie manieren worden geconfigureerd:

  1. Per winkel onder Systeem> Configuratie> Ontwerp.
  2. Ontwerpwijziging met tijdslimieten Systeem> Ontwerp.
  3. Thema-uitzonderingen kunnen ook worden ingesteld op categorie- en productniveau.

Pakket versus thema

Een pakket heeft meerdere thema's. Elk van de thema's in een pakket neemt over van het standaardthema in een pakket.

Design Fallback

De fallback-procedure voor het zoeken van sjablonenbestanden is:

  1. {Pakket} / {thema}
  2. {Pakket} / default
  3. base / default

Om meer mappen toe te voegen aan het thema fallback-mechanisme Mage_Core_Model_Design_Package :: getFilename-methode moet worden herschreven

Voor het admin-gebied is de fallback standaard / standaard.

Sjabloon- en lay-outpaden

Blocks

Blokken worden gebruikt voor uitvoer. Het rootblok is het bovenliggende blok van alle blokken en is van het type Mage_Page_Block_Html.

Mage_Core_Block_Template-blokken gebruiken sjabloonbestanden om inhoud weer te geven. De naam van het sjabloonbestand wordt ingesteld binnen setTemplate () of addData ('template') met relatieve paden.

Sjablonen zijn slechts stukjes PHP die zijn opgenomen in Mage_Core_Block_Template. Daarom verwijst $ dit in een sjabloon naar het blok.

Mage_Core_Block_Template gebruikt een buffer voordat een sjabloon wordt opgenomen om voortijdige uitvoer te voorkomen.

De methode Mage_Core_Model_Layout :: createBlock maakt instanties van blokken.

De klasse Mage_Core_Model_Layout_Update overweegt welke blokken voor elke pagina moeten worden gemaakt door te kijken naar de lay-outhandgrepen.

Alle uitvoerblokken worden weergegeven, bijvoorbeeld door toHtml () aan te roepen, die op hun beurt kunnen kiezen om hun kinderen weer te geven.

Tekst en tekst_Listblokken geven hun inhoud automatisch weer.

Er zijn twee gebeurtenissen rond het renderen van blokken die kunnen worden gebruikt om het blok voor en na het renderen van de HTML te wijzigen:

core_block_abstract_to_html_before core_block_abstract_to_html_ after Een kindblok wordt alleen automatisch weergegeven als het van klasse Mage_Core_Block_Textlist is, anders moet de methode getChildHtml worden aangeroepen.

Blokinstanties zijn toegankelijk via de lay-out, bijvoorbeeld Mage :: app () -> getLayout () en $ controller-> getLayout (). Blokuitvoer wordt geregeld door de functie _toHtml ().

Sjablonen worden weergegeven door de methoden renderView () / fetchView () in een sjabloonblok. Uitvoerbuffering kan worden uitgeschakeld met $ layout-> setDirectOutput.

Het is mogelijk om een blok aan de huidige lay-out toe te voegen, maar dit moet gebeuren voordat de methode renderLayout () wordt aangeroepen.

Lay-out XML

<reference>
  -edit a block
<block>
  - define a block 
<action>
  - call method on a block
<update>
  - include nodes from another handle.

Lay-outbestanden kunnen worden geregistreerd in config.xml:

<config>
    <{area}>
        <layout>
            <updates>
                <{name}>
                    <file>{filepath}</file>
                </{name}>
            </updates>
        </layout>
    </{area}>
</config>

Pagina-uitvoer kan op de volgende manieren worden aangepast:

  • Sjabloonwijzigingen
  • Opmaakwijzigingen
  • Blokkerende blokken
  • Waarnemersvariabelen op blokken kunnen op de volgende manieren worden ingesteld:
  • Lay-out - via acties of attributen
  • Controller - $ this-getLayout () -> getBlock ()
  • Onderliggende blokken - $ this-> getChild ()
  • Overige -Mage :: app () -> getLayout ()

Hoofdblokactiva

JavaScript- en CSS-middelen worden verwerkt in het blok Mage_Page_Block_Html_head. In dit blok wordt het samenvoegen van activa in één bestand verwerkt om HTTP-aanvragen te minimaliseren. Het samengevoegde bestand is gebaseerd op de bewerkingstijd van de bronbestanden.

Bij het samenvoegen van CSS wordt een callback-functie op Mage_Core_Model_Design_Package aangeroepen om alle @import- of url () -richtlijnen bij te werken met de juiste URL's

Verschillende mechanismen voor het uitschakelen van blokuitvoer

  • Als de respons al is gemaakt en ingesteld op het responsobject buiten het reguliere weergaveproces (bijvoorbeeld in een waarnemer), kan de vlag 'no-renderLayout' op de actiecontroller worden ingesteld met
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
  • Dit voorkomt dat renderLayout() de uitvoerblokken verwerkt.
  • Hetzelfde kan worden bereikt door setNoRender (true) aan te roepen op de frontcontroller: Mage::app()->getFrontController()->setNoRender(true);
  • Het instellen van de vlag isDispatched() op het responsobject is wellicht efficiënter om een soortgelijk effect te bereiken.

verschillende soorten blokken

  • 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 blokken zijn structurele blokken of Alle blokken zijn structurele blokken of inhoudsblokken. Voorbeeld:
  • kern / text_list

Voorbeeld van een structureel blok .

Het maakt geen gebruik van sjablonen; het wordt eenvoudigweg gebruikt om de inhoud van alle onderliggende blokken na elkaar weer te geven.

  • kern / matrijs

Voorbeeld van een inhoudsblok .

De uitvoer van dit type blok is afhankelijk van de toegewezen sjabloon. De onderliggende blokken worden binnen het sjabloon uitgevoerd via de methode getChildHtml ('block_name'). Voorbeeld: core / text_list - Voorbeeld van een structureel blok. Het maakt geen gebruik van sjablonen; het wordt eenvoudigweg gebruikt om de inhoud van alle onderliggende blokken na elkaar weer te geven. core / template - Voorbeeld van een inhoudsblok. De uitvoer van dit type blok is afhankelijk van de toegewezen sjabloon. De onderliggende blokken worden binnen de sjabloon uitgevoerd via de methode getChildHtml ('block_name').

Blokinstanties zijn toegankelijk via de controller

Van een actiecontroller:

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow