2013-04-09 24 views
5

私はこれで始まり、私のモジュールにSystem.Xmlのを持っています。どうすればいいのですか?私の最初の考えは、Mage::getConfig('sections/dev/groups/my_module/label')でしたが、これは動作しません - それは<sections>設定の領域にアクセスできないようです。私はまた、Magentoがこの値をロードしている場所を特定することができません。この値は、ある時点で実行する必要があります。そうでないと、表示できません。magentoバックエンドのconfig xmlデータを取得するにはどうすればよいですか?私は別のモジュールから、このラベルの値を取得したい</p> <pre><code><config> <sections> <dev> <groups> <my_module> <label>... </code></pre> <p>:

完全に明確にするには:core_config_dataテーブルに格納されている設定データの値を取得しようとしていませんが、問題はありません。グループラベルやフィールドの並べ替え順などの他の属性を取得できるようにするために、設定の<sections>領域を読み取る必要があります。

答えて

6

system.xmlファイルは、グローバル設定とマージされません。これらは、Magentoがバックエンド管理アプリケーションのユーザーインターフェイスを構築するときにのみロードされます。

System -> Configuration 

バックエンド管理アプリケーションのセクション。それ以外に、アプリケーションはそれらのための使用を持っていません。

ラベルを取得する場合は、完全にsystem.xmlの設定を読み込む必要があります。このようなものはうまくいくはずです。このスレッドに別の答えで述べたように

//load and merge `system.xml` files 
$config = Mage::getConfig()->loadModulesConfiguration('system.xml');   

//grab entire <sections/> node 
var_dump($config->getNode('sections')->asXml());   

//grab label from a specific option group as a string 
var_dump((string)$config->getNode('sections/dev/groups/restrict/label')); 

は、getSection方法では、このロジックの一部をラップadminhtml/configモデルクラスもありますので、あなたはこのような何かを行うことができます。

Mage::getSingleton('adminhtml/config')->getSection('dev')->groups->my_module->label 

あなたはgetSection

#File: app/code/core/Mage/Adminhtml/Model/Config.php 
public function getSections($sectionCode=null, $websiteCode=null, $storeCode=null) 
{ 
    if (empty($this->_sections)) { 
     $this->_initSectionsAndTabs(); 
    } 

    return $this->_sections; 
} 

のソースを見て、_initSectionsAndTabs

#File: app/code/core/Mage/Adminhtml/Model/Config.php 
protected function _initSectionsAndTabs() 
{ 
    $config = Mage::getConfig()->loadModulesConfiguration('system.xml') 
     ->applyExtends(); 

    Mage::dispatchEvent('adminhtml_init_system_config', array('config' => $config)); 
    $this->_sections = $config->getNode('sections'); 
    $this->_tabs = $config->getNode('tabs'); 
} 

に介してコールスタックをたどる場合は、このラッパー・メソッドは、最終的にloadModulesConfigurationメソッド自体を呼び出す表示されます。 old bit of meta-programming in the configuration you can read about herea longer series on configuration loadingの一部)の場合は、追加のapplyExtendsが追加されます。 (自己リンク、StackOverflowの答えが長すぎます)。私は個人的にコンフィギュレーションから値を取得し、これを使用することはありません

理由は、あなたがこのコール

Mage::dispatchEvent('adminhtml_init_system_config', array('config' => $config)); 

を作るときに、このイベントは、あなたがしていると仮定してシステム内のコードを引き起こす可能性が派遣のイベントですシステム構成システムをバックエンド管理コンソール領域にロードする。 の場合は、XMLツリーを読んでください。単にあなた自身で読み込んで値を読むことは、行く方法のようです。もちろん、ユースケースはさまざまです。

+0

これを投稿した直後に別の解決策が見つかりました。違いは何ですか? getSingleton( 'adminhtml/config')の代わりにloadModulesConfigurationを使用する方が良い理由は何ですか? – Benubird

+0

@Benubirdもっと情報と文脈で答えを更新しました。短いバージョン:見つかったテクニックは、 'loadModulesConfiguration'メソッド自体を使用します。 –

2

よくあるようですが、私は質問を投稿した後、答えの瞬間を見つけます...

これは、セクションの/ dev/my_module /ラベルを取得する方法である:あなたが見ることができるように、あなたは(あなたはまた、すべてのセクションを取得するために->getSections()を使用することができ、バックエンドの設定を取得するためにMage::getSingleton('adminhtml/config')->getSection('dev')を使用する必要が

Mage::getSingleton('adminhtml/config')->getSection('dev')->groups->my_module->label 

上に繰り返します)。これは、Mage_Core_Model_Config_Elementオブジェクトを返します。これは、オブジェクトのツリーのルートであり、図示のようにアクセス可能です。任意の段階でprint_rを実行すると、それ以外のツリーが表示されます.print_rは配列のような形式ですが、そうではありません。

関連する問題

 関連する問題