Magento 2:我想在覆盖块xml中添加ifconfig

时间:2017-11-11 11:03:27

标签: php xml magento magento2 magento2.1

我试图用

中的phtml文件覆盖阻止

供应商\的magento \模块结账\视图\前端\ success.phtml

到我的档案

应用\代码\定制\模块\视图\前端\结帐\ success.phtml

和xml文件是checkout_onepage_success.xml

<referenceBlock name="checkout.success">
       <action method="setTemplate" ifconfig="custom_general/general/active">
            <argument name="template" xsi:type="string">Custom_Module::checkout/success.phtml</argument>
        </action>
</referenceBlock>

当我从配置启用模块然后执行我的块和phtml文件。

当禁用模块然后执行默认文件并阻止。

但是当我从配置中禁用模块时,默认文件和块不会执行。

请帮助我解决这个问题

提前致谢。

1 个答案:

答案 0 :(得分:3)

如果config仅在值为true时显示模板,则它不能用作其他条件。

为了解决您的问题,我建议您创建一个辅助函数并在辅助方法中添加条件。

这样的事情:

<?php

namespace Custom\Module\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    protected $_request;

    public function __construct
    (
        \Magento\Framework\App\Request\Http $request
    ) {
        $this->_request = $request;
    }

    public function getTemplate()
    {
        if ($this->_scopeConfig->isSetFlag('custom_general/general/active')) {
            $template =  'Custom_Module::checkout/success.phtml';
        } else {
            $template = 'Vendor_Module::checkout/success.phtml';
        }

        return $template;
    }
} 

然后在布局中包含您的块 而不是这个

<referenceBlock name="checkout.success">
    <action method="setTemplate">
        <argument name="template" xsi:type="helper" helper="Custom\Module\Helper\Data::getTemplate"></argument>
    </action>
</referenceBlock>