我正在尋找一個很好的解決方案來覆蓋Magento配置而不更改默認值。替代Magento配置
例如,我想覆蓋core_config_data表中的「web/unsecure/base_skin_url」項而不刪除現有值。因此,如果在任意位置的代碼這個確切的代碼被稱爲:
Mage::getStoreConfig('web/unsecure/base_skin_url');
它會找到的配置選項,我設置,而不是默認的一個......提前
謝謝!
查
我正在尋找一個很好的解決方案來覆蓋Magento配置而不更改默認值。替代Magento配置
例如,我想覆蓋core_config_data表中的「web/unsecure/base_skin_url」項而不刪除現有值。因此,如果在任意位置的代碼這個確切的代碼被稱爲:
Mage::getStoreConfig('web/unsecure/base_skin_url');
它會找到的配置選項,我設置,而不是默認的一個......提前
謝謝!
查
的Magento在運行時直接從配置對象的樹結構讀取它的配置值,所以你需要使用的配置對象的本地setNode
方法來改變值。然而,由於Magento loads in scoped configuration(自我鏈接)的方式,它並不像看起來那麼簡單。
對於當前版本的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將有一個加載配置,但商店對象不會被加載。如果是這種情況,您無法從商店對象中加載商店代碼。
我在Pulse Storm Chaos module中做了類似的事情。如果你對工作代碼感興趣,那麼它就是Github。
如果你想覆蓋一些特殊的配置數據,你可以把它放在app/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>
只有代碼爲「default」和admin的商店纔會重寫價值。另外,合併來自所有XML文件的全局配置後,Magento會從core_config_data表中更新它。如果商店範圍中的值是在它將覆蓋xml中的值之前定義的。 –
這正是我正在尋找的。我錯過了「
Alan的答案是正確的,但它並不關心配置緩存。例如,如果您撥打Mage::getStoreConfig('web/unsecure/base_skin_url')
兩次並更改兩者之間的值,則更改不起作用。 要解決此問題,您應該使用$store->setConfig('web/unsecure/base_skin_url', 'value_to_set')
。它既:更新配置緩存並用Alan的方法設置配置節點。
謝謝,它的作品!如果有人對如何獲得'$ store'變量感興趣,在回答中提到:'$ store = Mage :: app() - > getStore();' –
感謝您的好解釋艾倫!我可以看到這對每個商店的配置如何工作,但如果我想讓所有商店(和網站)使用我的自定義配置選項,該怎麼辦?實質上,我想我的自定義配置選項是全球... –
@ChuckD簡短版本:您需要爲系統中的每個商店添加它(多個調用)。當Magento創建stores/store_code節點時,會考慮默認值和網站值。這樣,getStoreConfig方法總是可以查看stores/store_code以找到正確的值。 –
Chuck,你嘗試過'$ config-> setNode(「global/web/unsecure/base_skin_url」,'value_to_set');'?只是一個想法,未經考驗。 – Jongosi