是不可能的或在布局xml文件写入条件,如果isset得到param x那x.phtml else y.phtml?我看到在动作控制器中解决了这个问题。但是我在其他模块中覆盖了动作。我认为xml更好。
Actualy我有一个来自完成模块的联盟计划的注册表格。我想覆盖这个动作并从2个表单中显示1。根据获得参数的价值。
答案 0 :(得分:4)
有一种方法可以用几乎纯粹的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;
}
答案 1 :(得分:3)
实现这一目标的最佳方法是创建自己的模块并在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'替换'if'语句。
答案 2 :(得分:1)
我知道如果在configs中使用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; ?>
:
{{1}}