Magento后台可以通过disable/enable来启用和禁用model,同样,我们可以模块的配置选项来设置不同的模板。
Magento Model到调用不同的模板就需要用到block里的”ifconfig”这个参数,
我们可以在app/code/core/Mage/Core/Model/Layout.php 文件里找到相关的功能代码
protected function _generateAction($node, $parent) { if (isset($node['ifconfig']) && ($configPath = (string)$node['ifconfig'])) { if (!Mage::getStoreConfigFlag($configPath)) { return $this; } } $method = (string)$node['method']; if (!empty($node['block'])) { $parentName = (string)$node['block']; } else { $parentName = $parent->getBlockName(); } $_profilerKey = 'BLOCK ACTION: '.$parentName.' -> '.$method; Varien_Profiler::start($_profilerKey); if (!empty($parentName)) { $block = $this->getBlock($parentName); } if (!empty($block)) { $args = (array)$node->children(); unset($args['@attributes']); foreach ($args as $key => $arg) { if (($arg instanceof Mage_Core_Model_Layout_Element)) { if (isset($arg['helper'])) { $helperName = explode('/', (string)$arg['helper']); $helperMethod = array_pop($helperName); $helperName = implode('/', $helperName); $arg = $arg->asArray(); unset($arg['@']); $args[$key] = call_user_func_array(array(Mage::helper($helperName), $helperMethod), $arg); } else { /** * if there is no helper we hope that this is assoc array */ $arr = array(); foreach($arg as $subkey => $value) { $arr[(string)$subkey] = $value->asArray(); } if (!empty($arr)) { $args[$key] = $arr; } } } } if (isset($node['json'])) { $json = explode(' ', (string)$node['json']); foreach ($json as $arg) { $args[$arg] = Mage::helper('core')->jsonDecode($args[$arg]); } } $this->_translateLayoutNode($node, $args); call_user_func_array(array($block, $method), $args); } Varien_Profiler::stop($_profilerKey); return $this; }
如果magento config的值为真,ifconfig不会调用相关的模板文件,
如果需要自定义的话,可以在_generateAction 加入自己的判断条件,
以下这个例子可以作为参考:
在模块的system.xml里设置特殊的enable
<config> <sections> <advanced> <groups> <YOURMODULE> <fields> <enable> <label>YOUR MODULE</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_enabledisable</source_model> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </enable> </fields> </YOURMODULE> </groups> </advanced> </sections> </config>
这样,你可以在layout 文件里加入模板选择代码了:
<action method="setTemplate" ifconfig="advanced/YOURMODULE/enable"> <template>mytemplate.phtml</template> </action>
Comments on this entry are closed.