如果 isset 得到参数 x 那个 x.phtml 否则 y.phtml 是不可能的还是在布局 xml 文件中写入条件?我看到在动作控制器中解决了这个问题。但是我覆盖了其他模块中的操作。而且我认为xml更好。
实际上,我有一份来自完成模块的会员计划的注册表。我想覆盖这个动作并从 2 个表格中显示 1 个。根据获取参数值的内容。
如果 isset 得到参数 x 那个 x.phtml 否则 y.phtml 是不可能的还是在布局 xml 文件中写入条件?我看到在动作控制器中解决了这个问题。但是我覆盖了其他模块中的操作。而且我认为xml更好。
实际上,我有一份来自完成模块的会员计划的注册表。我想覆盖这个动作并从 2 个表格中显示 1 个。根据获取参数值的内容。
有一种方法可以用几乎纯 xml 做到这一点:
背景:
您可以从您的 xml 调用函数,该函数将返回值而不是静态值。
因此,在您的情况下,您可以对 xml 执行类似的操作来归档所需的行为:
<reference name="your-block-name">
<action method="setTemplate">
<template helper="your_module/getTemplate">
<param>a_default_template_if_wanted</param>
</template>
</action>
</reference>
在Data.php
你模块的助手中,函数getTemplate
可能如下所示:
public function getTemplate($defaultTemplate){
//check for your get params
if(Mage::app()->getRequest()->getParam('x')){
return 'x.phtml';
}
return $defaultTemplate;
}
实现这一点的最佳方法是创建自己的模块并在 XML 中添加块,如下所示:
<block type="mymodule/someblock" name="my_block" as="myBlock" />
所以在 XML 中没有任何模板参数。比在您的块中在构造函数中设置模板,如下所示:
public function __construct() {
parent::__construct();
if($some_value == 'something') {
$this->setTemplate('mymodule/first-template.phtml');
} else {
$this->setTemplate('mymodule/second-template.phtml');
}
}
当然,你会用你需要的任何“如果”来替换“如果”语句。
我知道在配置中执行 if 语句的唯一方法是使用 the ,ifconfig
但这不是你想要的。
在你的情况下,我建议有一个带有子块的主块,然后将你的条件语句放在主模板中并使用$this->getChildHtml('child_name')
. 这样你就可以把你的逻辑放在一个模板中而不污染你的配置(我认为可能有办法)。
配置:
<block type="core/template" name="master_block" template="folder/path/master_block.phtml">
<block type="core/template" name="sub_block_form1" template="folder/path/form1.phtml" />
<block type="core/template" name="sub_block_form2" template="folder/path/form2.phtml" />
</block>
在folder/path/master_block.phtml
:
<?php if ($this->someBlockMethod() === 'Something'): ?>
<?php echo $this->getChildHtml('sub_block_form1'); ?>
<?php else: ?>
<?php echo $this->getChildHtml('sub_block_form2'); ?>
<?php endif; ?>