如何在淘汰模板文件中调用静态块?


12

我正在使用Magento 2.1。

想要在结帐页面上显示一些自定义运输消息以用于运输方法,我已经通过直接编辑到剔除模板文件来完成。

Magento_Checkout / web / template / shipping.html

但我想在后端使用此设置。因此,可以在敲除模板文件中调用静态块,如果可以,我该怎么做。

我希望红色框中的内容来自静态块。

在此处输入图片说明

Answers:


22

您可以创建一个模块,通过添加到checkout配置,使您的cms阻止消息可用于KO模板。

Your/Module/etc/frontend/di.xml我们向结帐配置中添加新的配置提供程序:

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\CompositeConfigProvider">
        <arguments>
            <argument name="configProviders" xsi:type="array">
                <item name="cms_block_config_provider" xsi:type="object">Your\Module\Model\ConfigProvider</item>
            </argument>
        </arguments>
    </type>
</config>

Your/Module/Model/ConfigProvider.php我们的代码中,获取cms块的html:

<?php

namespace Your\Module\Model;


use Magento\Checkout\Model\ConfigProviderInterface;
use Magento\Framework\View\LayoutInterface;

class ConfigProvider implements ConfigProviderInterface
{
    /** @var LayoutInterface  */
    protected $_layout;

    public function __construct(LayoutInterface $layout)
    {
        $this->_layout = $layout;
    }

    public function getConfig()
    {
        $cmsBlockId = 1; // id of cms block to use

        return [
            'cms_block_message' => $this->_layout->createBlock('Magento\Cms\Block\Block')->setBlockId($cmsBlockId)->toHtml()
        ];
    }
}

现在,您应该覆盖主题中的shipping.html KO模板,您可以在其中显示cms块,如下所示:

<div data-bind="html: window.checkoutConfig.cms_block_message"></div>

注意:如果要在静态块中使用包含双引号的html标记(例如html a标记),则应使用反斜杠对双引号进行转义。例如:

Accept our <a target=\"_blank\" href=\"/privacy-policy\">privacy policy</a>

我可以做同样的事情来将CMS块附加到minicart content.html吗?
罗纳克·乔汉

对于小型购物车,您需要在中插入的getConfig方法\Magento\Checkout\Block\Cart\Sidebar。此方法返回一个数组,然后将其作为window.checkout对象传递给javascript (在中发生 Magento/Checkout/view/frontend/templates/cart/minicart.phtml)。
亚伦·艾伦

@AaronAllen,谢谢您的这篇文章。
Sarfaraj Sipai

谁能说这将适用于2.3.3,因为我看不到显示的cms静态块内容?@Sarfaraj Sipai
Haerriz

-4

我认为您无法在.html文件中调用静态块,而必须在phtml文件中添加该静态块代码

尝试以下路径

Magento_Checkout/view/frontend/templates/onepage.phtml 

尝试添加以下代码,由CSS黑客维护

you have to change **static-block-id**


<div class ="static block" style="bottom: 127px; position: absolute;">
<?php   echo $this->getLayout()->createBlock('Magento\Cms\Block\Block')->setBlockId('static-block-id')->toHtml();   ?>
</div>

这是临时解决方案,可能您会得到一些其他好的答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.