2013-07-23 28 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

感谢马维斯。几乎没有改变你的解决方案满足了我的要求。我设置了store =“true”而不是store =“2”,并写入store =“true”,而不是if(!Mage :: getStoreConfigFlag($ configPath,$ node ['store'])) :: getStoreConfigFlag($ configPath,Mage :: app() - > getStore()))这样就需要当前的商店设置。 –

+0

首先是马吕斯(不是马维斯):)。其次,如果您想检查当前商店的配置值,则不需要第二个参数。如果未提供第二个参数,则检查当前商店的值。 – Marius

0

尝试Conditive扩展使用ifconfig extension