2

如果 isset 得到参数 x 那个 x.phtml 否则 y.phtml 是不可能的还是在布局 xml 文件中写入条件?我看到在动作控制器中解决了这个问题。但是我覆盖了其他模块中的操作。而且我认为xml更好。

实际上,我有一份来自完成模块的会员计划的注册表。我想覆盖这个动作并从 2 个表格中显示 1 个。根据获取参数值的内容。

4

3 回答 3

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;
}
于 2014-02-14T17:10:36.780 回答
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');
    }
}

当然,你会用你需要的任何“如果”来替换“如果”语句。

于 2013-09-02T11:41:22.620 回答
1

我知道在配置中执行 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; ?>
于 2013-09-02T11:01:27.690 回答