2013-07-23 2 views
0

В Magento XML layut или конфигурационный файл можно записать IFCONFIG в качестве параметра в теге, чтобы применить условие, как этотпараметр Ifconfig с магазина состояния

<action method="addLink" translate="label title" module="contacts"  ifconfig="contacts/contacts/enabled"> 
<label>Contact Us</label> 
<url>contacts</url> 
<title>Contact Us</title> 
<prepare>true</prepare> 
</action> 

Я пытался найти IFCONFIG альтернативу этой функции

Mage::getStoreConfig($path,Mage::app()->getStore()); 

, так что я могу включить состояние хранилища вместе с путем в ifconfig. Любая помощь будет оценена по достоинству.

ответ

2

Нет встроенного способа сделать это, главным образом потому, что ограничение ifconfig используется для текущего хранилища. При вызове Mage::getStroreConfig() только с одним параметром в качестве второго параметра используется текущее хранилище. и макет загружается для текущего хранилища.
Но если вы настаиваете, вот возможная идея о том, как это сделать.
Теги action разобраны и применяются в этом методе Mage_Core_Model_Layout::_generateAction(). Этот фрагмент кода проверяет атрибут ifconfig.

if (isset($node['ifconfig']) && ($configPath = (string)$node['ifconfig'])) { 
    if (!Mage::getStoreConfigFlag($configPath)) { 
     return $this; 
    } 
} 

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

<action method="someMethod" ifconfig="some/config/path" store="2" /> 

Теперь измените код, приведенный выше, который вызывает действие на это:

if (isset($node['ifconfig']) && ($configPath = (string)$node['ifconfig'])) { 
    if (isset($node['store'])){//check config setting for supplied store 
     if (!Mage::getStoreConfigFlag($configPath, $node['store'])) { 
      return $this; 
     } 
    } 
    else{//default behavior 
     if (!Mage::getStoreConfigFlag($configPath)) { 
      return $this; 
     } 
    } 
} 
+0

Благодаря Marvis. С небольшим изменением ваше решение выполнило мое требование. Я установил store = "true" вместо store = "2" и написал store = "true", а вместо if (! Mage :: getStoreConfigFlag ($ configPath, $ node ['store'])) я написал if (! Mage :: getStoreConfigFlag ($ configPath, Mage :: app() -> getStore())) Так что он принимает текущие настройки хранилища. –

+0

Прежде всего это Мариус (не Марвис) :). И, во-вторых, вам не нужен этот второй параметр, если вы хотите проверить значение конфигурации для текущего хранилища. Если второй аргумент не указан, то проверяется значение для текущего хранилища. – Marius

Смежные вопросы