Domanda

In un'estensione Sto lavorando su, ho questa sezione config.xml del modulo -

<config>
    <frontend>
        <layout>
            <updates>
                <packagename_modulename module="packagename_modulename">
                    <file>packagename_modulename</file>
                </packagename_modulename>
            </updates>
        </layout>
    </frontend>
</config>

Questo funziona in modo corretto come previsto, ma ora ho un'altra situazione in cui voglio attivare tale aggiornamento layout di acc. ad alcune condizioni. Voglio ottenere lo stesso risultato finale, ma realizzarla in modo dinamico dal codice php. C'è qualche modo per inserire dinamicamente quel nodo nella configurazione globale sia dal controllore o dell'osservatore?

A proposito ci sono alcuni più config anche che voglio aggiungere a questo. E 'usato per riscrivere alcune classi di blocchi e modelli di Magento. Ma se io riesco a capire come inserire la configurazione globale a livello di codice, penso che sarò in grado di aggiungere che config anche nello stesso modo.

Modifica

Giusto per chiarire, io voglio fare il mio lavoro di estensione esattamente come se questa configurazione è presente nel file config.xml, ma voglio aggiungere che dal codice php al posto del config.xml.

Per riscrivere i blocchi e modelli, sto andando come -

<config>
    <global>
        <blocks>
            <payment>
                <rewrite>
                    <form_cc>PackageName_ModuleName_Block_Form_Cc</form_cc>
                </rewrite>
            </payment>
        </blocks>
    </global>
</config>

UPDATE

Quindi, utilizzando il suggerimento di Fabian, ho fatto un po 'di progresso. Non ho rimosso nulla dal config.xml, ho usato Mage::app()->getConfig()->setNode('path_to_config', '') all'interno del controller_action_layout_load_before dell'osservatore e che sia correttamente l'impostazione della configurazione. Questo mi ha permesso di annullare tutte le modelle e blocchi riscrive che ho fatto dalla configurazione del mio modulo. Avanti dal router, sono stato in grado di annullare la riscrittura di controllo che è stata aggiunta dal modulo.

Ora c'è solo un problema che rimane qui. Il file di layout, una volta caricato viene sempre memorizzato nella cache. I lavori soluzione di cui sopra fino a quando la cache del layout è stato disattivato da admin Magento. Quindi non v'è alcun modo per "non memorizzare nella cache la mia estensione particolare"? Questo è solo per un particolare caso d'uso, quindi sarebbe ok se posso farlo modificando un file core

È stato utile?

Soluzione 3

La soluzione alla fine ho usato è quello di annullare tutti i modelli e blocchi riscrive ho avuto in config.xml del modulo nell'osservatore controller_action_layout_load_before & Dopo di che andare a Magento di amministrazione e disabilitare la cache Block HTML & Layout.

Altri suggerimenti

Per aggiungere un file di layout:

Mage::app()->getLayout()->loadFile($file);

Per aggiungere una maniglia:

Mage::app()->getLayout()->getUpdate()->addHandle('your_handle_name');

Per modificare le impostazioni nella configurazione:

Mage::getConfig()->setNode(
    'global/helpers/core/encryption_model',
    'Ikonoshirt_Pbkdf2_Model_Stub_EE'
);

considerando che la logica può essere raggiunto tramite file XML di layout, ci sono due opzioni chiare: implementare un responsive design (potrebbe non funzionare in base alle vostre esigenze), o utilizzare un sottodominio separato con le proprie impostazioni del tema. L'approccio condizionale che si sta utilizzando richiederà di aggiungere la sua condizione a molte chiavi della cache, e poi sei nella stessa barca come prima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top