2012-10-10 17 views
5

Magentoの設定を上書きする良い解決策を探していますが、デフォルト値を変更することはありません。Magento Configをオーバーライド

たとえば、既存の値を削除せずに、core_config_dataテーブルの "web/unsecure/base_skin_url"項目を上書きしたいとします。だから、もしどこかのコードでは、この正確なコードが呼び出されます。

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

それは私が設定設定オプションではなくデフォルトのものを見つけるでしょう...事前に

感謝を!

チャック

答えて

9

Magentoのは、構成オブジェクトのツリー構造から直接実行時にその設定値を読み取り、あなたが値を変更する構成オブジェクトのネイティブsetNodeメソッドを使用する必要があります。しかし、方法Magento loads in scoped configuration(自己リンク)のために、それはそれほどまっすぐではないようです。

現在のバージョンのMagentoでは、現在のstoreのノードの設定値を設定する必要があります。

ステップ1で現在設定されているストアのコードが取得されています。その後、次

$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にあります。

+0

素敵な説明をありがとうアラン!私はこれが店舗ごとの設定でうまくいくことは理解できますが、すべての店舗(およびウェブサイト)にカスタム設定オプションを使用させたい場合はどうすればいいでしょうか?本質的に、私は自分のカスタム設定オプションをグローバルにしたいと思っています。 –

+0

@ChuckDショートバージョン:システム内の各ストアに複数のコールを追加する必要があります。 Magentoがstores/store_codeノードを作成すると、デフォルト値とウェブサイトの値が考慮されます。こうすることで、getStoreConfigメソッドは常にstore/store_codeを調べて適切な値を見つけることができます。 –

+0

チャック、 '$ config-> setNode(" global/web/unsecure/base_skin_url "、 'value_to_set');'を試してみましたか?ただのアイデア、未テスト。 – Jongosi

1

いくつかの特別な設定データを上書きする場合は、/ etc/local.xmlアプリに配置することができます。しかし、それは公共のモジュールのためではなく、自分の店でのみ有用です。

Heresは、データベースを変更せずに、開発目的で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> 
+0

コード "default"とadminを持つストアの値のみを書き換えます。また、すべてのXMLファイルからグローバル構成をマージした後、Magentoはcore_config_dataテーブルからそれを更新します。ストアスコープの値が定義されてからxmlの値をオーバーライドする場合。 –

+0

これはまさに私が探していたものでした。私は ""タグを見逃しましたが、今は動作しています:) @PavelNovitskyが言ったことについては完全にはわかりません。しかし、単純な1店舗のサイトでは、これで十分です。 – func0der

7

アランの答えは正しいですが、設定キャッシュは気にしません。たとえば、Mage::getStoreConfig('web/unsecure/base_skin_url')を2回呼び出してその間の値を変更した場合、変更は無効です。 この問題を回避するには、$store->setConfig('web/unsecure/base_skin_url', 'value_to_set')を使用してください。それは両方とも行います:設定キャッシュを更新し、設定ノードをAlanの方法で設定します。

+2

ありがとう、それは動作します! '$ store = Mage :: app() - > getStore();'のように '$ store'変数を取得する方法が不思議であれば、 –