Переопределить Magento Config

Я ищу хорошее решение для переопределения конфигурации Magento без изменения значений по умолчанию.

Например, я хочу переопределить элемент «web / unsecure / base_skin_url» в таблице core_config_data без удаления существующего значения. Поэтому, если в любом месте кода этот точный код вызывается:

Mage::getStoreConfig('web/unsecure/base_skin_url'); 

Он найдет параметр конфигурации, который я установил, а не по умолчанию …

Заранее спасибо!

цыпленок

Related of "Переопределить Magento Config"

Magento считывает свои значения конфигурации во время выполнения непосредственно из древовидной структуры объекта конфигурации, поэтому вам нужно использовать собственный метод setNode объекта конфигурации для изменения значений. Однако из-за того, как Magento загружается в облачную конфигурацию (self link), это не так прямо, как кажется.

С текущими версиями Magento (и я считаю, но не тестировался со старыми версиями) вам нужно будет установить значение конфигурации в наборе узлов для текущего store .

Шаг первый получает код для текущего установленного хранилища. Вы можете сделать это программно следующим образом

 $store = Mage::app()->getStore(); $code = $store->getCode(); 

то вы можете установить значение конфигурации со следующим вызовом

 $config = Mage::getConfig(); $config->setNode("stores/$code/web/unsecure/base_skin_url", 'value_to_set'); 

Имейте в виду, что все это должно произойти после того, как Magento загрузил объект конфигурации. Также имейте в виду, что есть период времени, когда Magento будет иметь загруженную конфигурацию, но объект магазина не будет загружен. Если это так, вы не сможете загрузить код магазина из объекта store.

Я сделал что-то подобное в модуле Pulse Storm Chaos . Если вам интересен рабочий код, он находится на Github .

Ответ Алана правильный, но он не заботится о кеш-конфигурации. Например, если вы Mage::getStoreConfig('web/unsecure/base_skin_url') вызываете Mage::getStoreConfig('web/unsecure/base_skin_url') и изменяете значение между ними, это изменение не влияет. Чтобы обойти эту проблему, вы должны использовать $store->setConfig('web/unsecure/base_skin_url', 'value_to_set') . Он выполняет оба действия: обновляет кеш конфигурации и устанавливает узел конфигурации с помощью метода Алана.

Если вы хотите перезаписать некоторые специальные данные конфигурации, вы можете поместить их в приложение / etc / local.xml. Но это полезно только для вашего собственного магазина, а не для общедоступных модулей.

Это способ перезаписать base_url для целей разработки без изменения базы данных.

 <config> ... <stores> <default> <web> <unsecure> <base_url>http://dev.myshop.com/</base_url> </unsecure> <secure> <base_url>http://dev.myshop.com/</base_url> </secure> </web> </default> <admin> <web> <unsecure> <base_url>http://dev.myshop.com/</base_url> </unsecure> <secure> <base_url>http://dev.myshop.com/</base_url> </secure> </web> </admin> </stores> ... </config> по <config> ... <stores> <default> <web> <unsecure> <base_url>http://dev.myshop.com/</base_url> </unsecure> <secure> <base_url>http://dev.myshop.com/</base_url> </secure> </web> </default> <admin> <web> <unsecure> <base_url>http://dev.myshop.com/</base_url> </unsecure> <secure> <base_url>http://dev.myshop.com/</base_url> </secure> </web> </admin> </stores> ... </config> по <config> ... <stores> <default> <web> <unsecure> <base_url>http://dev.myshop.com/</base_url> </unsecure> <secure> <base_url>http://dev.myshop.com/</base_url> </secure> </web> </default> <admin> <web> <unsecure> <base_url>http://dev.myshop.com/</base_url> </unsecure> <secure> <base_url>http://dev.myshop.com/</base_url> </secure> </web> </admin> </stores> ... </config>