6

我试图用 phtml 文件覆盖块

供应商\magento\module-checkout\view\frontend\success.phtml

到我的档案

app\code\Custom\Module\view\frontend\checkout\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 文件执行。

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

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

请帮助我并解决这个问题

提前致谢。

4

1 回答 1

7

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

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

像这样的东西:

<?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>
于 2017-11-11T12:38:33.127 回答