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

Magento 2 : I want to add ifconfig in override block xml

我试图用

中的 phtml 文件覆盖块

vendor\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 文件执行。

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

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

请帮我解决这个问题

提前致谢。

if 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>