Ricerca…


Osservazioni

Personalizzazione della funzionalità principale con temi

I temi hanno file di layout che, tra le altre cose, possono essere usati per cambiare i blocchi visualizzati sulla pagina. Il modello di blocco può anche essere cambiato e vengono chiamati diversi metodi.

Design a livello di negozio

I temi strutturati gerarchici di Magento indicano che un tema di base può essere esteso e assegnato a livello di negozio.

Registrazione di temi personalizzati

I temi possono essere configurati in tre modi:

  1. Per archivio in Sistema> Configurazione> Progettazione.
  2. Modifica del design con limiti di tempo Sistema> Design.
  3. Le eccezioni ai temi possono anche essere impostate su una categoria e un livello di prodotto.

Pacchetto contro tema

Un pacchetto ha più temi. Ciascuno dei temi in un pacchetto eredita dal tema predefinito all'interno di un pacchetto.

Design Fallback

La procedura di fallback del tema per individuare i file di modelli è:

  1. {Package} / {} tema
  2. {Package} / default
  3. Base / default

Per aggiungere ulteriori directory al meccanismo di fallback del tema, è necessario riscrivere il metodo Mage_Core_Model_Design_Package :: getFilename

Per l'area di amministrazione, il fallback è predefinito / predefinito.

Percorsi modello e layout

blocchi

I blocchi sono usati per l'output. Il root block è il genitore di tutti i blocchi ed è di tipo Mage_Page_Block_Html.

I blocchi Mage_Core_Block_Template utilizzano i file modello per il rendering del contenuto. Il nome del file modello è impostato all'interno di setTemplate () o addData ('modello') con percorsi relativi.

I modelli sono solo parti di PHP incluse in Mage_Core_Block_Template. Pertanto $ questo in un modello si riferisce al blocco.

Mage_Core_Block_Template utilizza un buffer prima di includere un modello per impedire l'output prematuro.

Il metodo Mage_Core_Model_Layout :: createBlock crea istanze di blocchi.

La classe Mage_Core_Model_Layout_Update considera quali blocchi devono essere creati per ciascuna pagina esaminando gli handle del layout.

Tutti i blocchi di output sono resi, ad esempio chiamando aHtml (), che a sua volta può scegliere di rendere i propri figli.

Text e Text_List bloccano automaticamente il rendering del loro contenuto.

Ci sono due eventi che vengono attivati ​​attorno al rendering del blocco che può essere utilizzato per modificare il blocco prima e dopo il rendering dell'HTML:

core_block_abstract_to_html_before core_block_abstract_to_html_after Un blocco figlio verrà reso automaticamente solo se appartiene alla classe Mage_Core_Block_Textlist, altrimenti il ​​metodo getChildHtml deve essere chiamato.

È possibile accedere alle istanze di blocco tramite il layout, ad es. Mage :: app () -> getLayout () e $ controller-> getLayout (). L'output del blocco è controllato dalla funzione _toHtml ().

I modelli sono resi dai metodi renderView () / fetchView () all'interno di un blocco template. Il buffering dell'output può essere disabilitato con $ layout-> setDirectOutput.

È possibile aggiungere un blocco al layout corrente, ma è necessario farlo prima che venga chiamato il metodo renderLayout ().

Layout XML

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

I file di layout possono essere registrati in config.xml:

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

L'output della pagina può essere personalizzato nei seguenti modi:

  • Modifiche al modello
  • Modifiche al layout
  • Sovrascrivere i blocchi
  • Osservatori Le variabili sui blocchi possono essere impostate nei seguenti modi:
  • Layout: azioni o attributi
  • Controller - $ this-getLayout () -> getBlock ()
  • Blocchi figlio - $ this-> getChild ()
  • Altro -Mage :: app () -> getLayout ()

Capi di testa

Le risorse JavaScript e CSS sono gestite nel blocco Mage_Page_Block_Html_head. Questo blocco gestisce la fusione delle risorse in un singolo file per ridurre al minimo le richieste HTTP. Il file unito si basa sul tempo di modifica dei file di origine.

Quando si fondono i CSS, viene richiamata una funzione di callback su Mage_Core_Model_Design_Package per aggiornare le direttive @import o url () con gli URL corretti

Diversi meccanismi per disabilitare l'output dei blocchi

  • Se la risposta è già stata creata e impostata sull'oggetto risposta al di fuori del normale processo di rendering (ad esempio, in un osservatore), il flag 'no-renderLayout' può essere impostato sul controller di azione usando
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
  • Ciò impedisce a renderLayout() di elaborare i blocchi di output.
  • Lo stesso può essere ottenuto chiamando setNoRender (true) sul front controller: Mage::app()->getFrontController()->setNoRender(true);
  • L'impostazione del isDispatched() sull'oggetto risposta potrebbe essere più efficiente per ottenere un effetto simile.

diversi tipi di blocchi

  • 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 Tutti i blocchi sono blocchi strutturali o Tutti i blocchi sono blocchi strutturali o blocchi di contenuto. Esempio:
  • core / text_list

Esempio di un blocco strutturale .

Non utilizza modelli; è semplicemente usato per generare il contenuto di tutti i suoi blocchi figlio uno dopo l'altro.

  • core / template

Esempio di un blocco di contenuti .

L'output di questo tipo di blocco dipende dal modello assegnato. I suoi blocchi figlio vengono visualizzati nel suo modello tramite il metodo getChildHtml ('block_name'). Esempio: core / text_list - Esempio di un blocco strutturale. Non utilizza modelli; è semplicemente usato per generare il contenuto di tutti i suoi blocchi figlio uno dopo l'altro. core / template - Esempio di un blocco di contenuti. L'output di questo tipo di blocco dipende dal modello assegnato. I suoi blocchi figlio vengono emessi all'interno del suo modello tramite il metodo getChildHtml ('block_name').

È possibile accedere alle istanze di blocco dal controller

Da un controller di azioni:

$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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow