Magento lee sus valores de configuración en tiempo de ejecución directamente desde la estructura de árbol del objeto de configuración, por lo que es necesario utilizar métodos nativos setNode
del objeto de configuración para cambiar los valores. Sin embargo, debido a la forma en que Magento loads in scoped configuration (enlace propio), no es tan sencillo como parece.
Con las versiones actuales de Magento (y creo, pero no lo he probado, con versiones anteriores), tendrá que establecer el valor de configuración en el conjunto de nodos para el store
actual.
El primer paso es obtener el código para la tienda configurada actualmente. Usted puede hacer esto mediante programación con la siguiente
$store = Mage::app()->getStore();
$code = $store->getCode();
a continuación, se puede establecer un valor de configuración con la siguiente llamada
$config = Mage::getConfig();
$config->setNode("stores/$code/web/unsecure/base_skin_url", 'value_to_set');
que tener en cuenta que todo esto tiene que suceder después Magento ha bootstrap la configuración objeto. También tenga en cuenta que hay un período de tiempo en el que Magento tendrá una configuración cargada, pero el objeto de la tienda no se cargará. Si este es el caso, no podrá cargar el código de tienda desde el objeto de la tienda.
Hice algo similar en mi Pulse Storm Chaos module. Si está interesado en el código de trabajo, está en Github.
Gracias por la buena explicación Alan! Puedo ver cómo esto funcionaría bien en la configuración por tienda, pero ¿qué sucede si quiero que todas las tiendas (y sitios web) utilicen mi opción de configuración personalizada? En esencia, quiero que mi opción de configuración personalizada sea global ... –
@ChuckD Versión corta: deberá agregarla para cada tienda en el sistema (llamadas múltiples). Cuando Magento crea los nodos stores/store_code, toma en consideración los valores predeterminados y del sitio web. De esta forma, el método getStoreConfig siempre puede buscar en stores/store_code para encontrar el valor correcto. –
Chuck, ¿has probado '$ config-> setNode (" global/web/unsecure/base_skin_url ", 'value_to_set');'? Solo una idea, no probada. – Jongosi