Magento legge i propri valori di configurazione in fase di esecuzione direttamente dalla struttura ad albero dell'oggetto di configurazione, quindi è necessario utilizzare il metodo nativo setNode
dell'oggetto di configurazione per modificare i valori. Tuttavia, a causa del modo in cui Magento loads in scoped configuration (collegamento automatico), non è così semplice come sembra.
Con le versioni correnti di Magento (e credo, ma non ho testato, con versioni precedenti), è necessario impostare il valore di configurazione nel set di nodi per l'attuale store
.
Il primo passo è ottenere il codice per il negozio attualmente impostato. È possibile farlo a livello di codice con il seguente
$store = Mage::app()->getStore();
$code = $store->getCode();
allora, è possibile impostare un valore di configurazione con il seguente invito
$config = Mage::getConfig();
$config->setNode("stores/$code/web/unsecure/base_skin_url", 'value_to_set');
Tenete a mente tutto questo deve accadere dopo Magento ha bootstrap della configurazione oggetto. Inoltre, tieni presente che esiste un periodo in cui Magento avrà una configurazione caricata, ma l'oggetto del negozio non verrà caricato. In questo caso non è possibile caricare il codice negozio dall'oggetto del negozio.
Ho fatto qualcosa di simile nel mio Pulse Storm Chaos module. Se sei interessato a lavorare su codice, è il Github.
fonte
2012-10-10 23:05:03
Grazie per la bella spiegazione Alan! Posso vedere come questo potrebbe funzionare bene sulla configurazione per negozio, ma cosa succede se voglio tutti i negozi (e siti web) per utilizzare la mia opzione di configurazione personalizzata? In sostanza, voglio che la mia opzione di configurazione personalizzata sia globale ... –
Versione corta di @ChuckD: dovrai aggiungerla per ogni negozio nel sistema (chiamate multiple). Quando Magento crea i nodi store/store_code prende in considerazione i valori predefiniti e quelli del sito web. In questo modo, il metodo getStoreConfig può sempre guardare store/store_code per trovare il valore corretto. –
Chuck, hai provato '$ config-> setNode (" global/web/unsecure/base_skin_url ", 'value_to_set');'? Solo un'idea, non testata. – Jongosi