Php 如何基于自定义模块状态禁用magento中的自定义布局?
我在Php 如何基于自定义模块状态禁用magento中的自定义布局?,php,magento,e-commerce,mage,Php,Magento,E Commerce,Mage,我在frontend\default\default\layout\mytemplate中创建了一个名为“myblock.phtml”的文件。它只显示一个“check”按钮,该按钮依次调用自定义模块的控制器url。问题是,我想停止显示该按钮(即myblock.html模板) 无论何时禁用该自定义模块,因为如果不启用该模块,它就没有意义。任何在模块的config.xml中进行调整的方法都应该经过一个块,在块中,您可以进行其他检查,或者在从管理中禁用扩展时,让默认的magento功能禁用块输出pag
frontend\default\default\layout\mytemplate
中创建了一个名为“myblock.phtml”的文件。它只显示一个“check”按钮,该按钮依次调用自定义模块的控制器url。问题是,我想停止显示该按钮(即myblock.html模板)
无论何时禁用该自定义模块,因为如果不启用该模块,它就没有意义。任何在模块的config.xml中进行调整的方法都应该经过一个块,在块中,您可以进行其他检查,或者在从管理中禁用扩展时,让默认的magento功能禁用块输出page要扩展Anton的答案,请创建一个自定义块类,该类执行以下操作:
class Mypackage_Myextension_Block_Checkbox extends Mage_Core_Block_Template {
protected function _toHtml() {
if(!$this->checkIfModuleIsEnabled()) {
return "";
}
return parent::_toHtml();
}
}
希望有帮助
谢谢,
Joe//这是我模块块“Checkbox.php”中的代码。可能对其他人有用
<?php
class Mypackage_Myextension_Block_Checkbox extends Mage_Core_Block_Template {
//echos a text based on module state
protected function checkstate() {
$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;
//my module name
if($modulesArray['Mypackage_Myextension']->is('active')) {
echo "Mypackage_Myextension is active.";
}
else {
echo "Mypackage_Myextension is not active.";
}
}
}
?>
因此,当我禁用模块(System->Advanced->disable module)时,块内容不会显示。考虑在其中某处使用
Mage::helper('core')->IsModuleOutputened($moduleName)
。谢谢,这绝对是一个好建议。就个人而言,我从来都不相信Magento的输出禁用能力,但其他人可能不会像我一样看待它。谢谢!!对于示例代码。我使我的模块真正模块化。以前我直接调用模板块,但现在我将其传递到模块块并使其显示模板。由于未知原因,我无法在此评论框中发布我的模块代码(变得混乱)…这有点过分,您可以从配置中请求扩展活动状态,而不是在所有加载的扩展上循环。如果您的扩展使用块,那么这个条件是毫无意义的,因为如果从管理页面禁用扩展,所有块输出都将被禁用