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的输出禁用能力,但其他人可能不会像我一样看待它。谢谢!!对于示例代码。我使我的模块真正模块化。以前我直接调用模板块,但现在我将其传递到模块块并使其显示模板。由于未知原因,我无法在此评论框中发布我的模块代码(变得混乱)…这有点过分,您可以从配置中请求扩展活动状态,而不是在所有加载的扩展上循环。如果您的扩展使用块,那么这个条件是毫无意义的,因为如果从管理页面禁用扩展,所有块输出都将被禁用