我在模板文件中有一小段代码,如果安装了某个模块,我只想运行。我找到了下面的代码,您可以使用它来查找模块是否处于活动状态,但我想知道是否安装了模块。
$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;
if($modulesArray['Mage_Paypal']->is('active')) {
echo "Paypal module is active.";
} else {
echo "Paypal module is not active.";
}
我想我可能会得到所有已安装模块的名称列表,然后使用
if (stristr($modulelist, 'Name_Extension'))
仅在安装了引用的扩展名时显示我的代码。
任何想法如何做到这一点?或者更好的解决方案?
答案 0 :(得分:88)
有一个核心帮手:
Mage::helper('core')->isModuleEnabled('MyCompany_MyModule');
它在Mage_Core_Helper_Abstract
。
还有isModuleOutputEnabled()
方法来检查系统中是否禁用了模块的输出 - >配置 - >高级 - >禁用模块输出。
答案 1 :(得分:10)
试试这个:
$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;
if(isset($modulesArray['Mage_Paypal'])) {
echo "Paypal module exists.";
} else {
echo "Paypal module doesn't exist.";
}
答案 2 :(得分:6)
查找模块是否已安装但已禁用的另一种方法是:
if (Mage::getStoreConfigFlag('advanced/modules_disable_output/Mage_Paypal')) {
echo "Paypal module is installed";
}
修改强>
刚刚意识到这个版本 - 使用鲜为人知的ifconfig
- 只有在禁用另一个模块时才能显示一个块。例如
<layout>
<default>
<reference name="content">
<block ifconfig="advanced/modules_disable_output/Mage_Paypal" type="core/template" template="sorry/this/is/unavailable.phtml" />
</reference>
</default>
</layout>
答案 3 :(得分:2)
您可以使用此代码段检查安装时是否存在模块Mage::getConfig()->getNode('modules/Mage_Paypal')
如果不存在则返回FALSE
答案 4 :(得分:1)
在您的模块声明中,尝试添加depends
元素,例如this page。
这可能会引发一个异常,您可以使用try / catch块处理它。
答案 5 :(得分:0)
在任何类,模型,控制器甚至PHTML中,您都可以调用它,它将起作用。
Data.php
class Company_Module_Helper_Data extends Mage_Core_Helper_Abstract
{
const XML_PATH_GEN_ENABLE = 'Section/Group/Field';
public function isEnable()
{
return Mage::getStoreConfigFlag(XML_PATH_GEN_ENABLE,Mage::app()->getStore()->getId());
}
}
您可以使用以下代码Mage::helper('module_name')->isEnable()
您的配置文件就像
config.xml中
<global>
<helpers>
<module_name>
<class>Company_Module_Helper</class>
</module_name>
</helpers>
// Another Necessary Code for this extension
</global>