San*_*utt 6 php xml magento magento2 magento2.1
我试图用 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>
Run Code Online (Sandbox Code Playgroud)
当我从配置中启用模块时,然后使用我的块和 phtml 文件执行。
当禁用模块然后执行默认文件并阻止。
但是当我从配置中禁用模块时,默认文件和块不会执行。
请帮我解决这个问题
提前致谢。
如果 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在布局中包含您的块而不是这个
<referenceBlock name="checkout.success">
<action method="setTemplate">
<argument name="template" xsi:type="helper" helper="Custom\Module\Helper\Data::getTemplate"></argument>
</action>
</referenceBlock>
Run Code Online (Sandbox Code Playgroud)