Как вызвать статический блок в файле шаблона нокаута?

12

Я использую Magento 2.1.

Хочу показать на странице оформления заказа какое-то пользовательское сообщение о способе доставки, я сделал это, отредактировав файл шаблона нокаута.

Magento_Checkout / веб / шаблон / shipping.html

но я хочу эту настройку на бэкэнд. Итак, есть возможность вызвать статический блок в файле шаблона нокаута, если да, как я могу это сделать.

Я хочу, чтобы константа в красном поле появилась из статического блока.

введите описание изображения здесь

Арун Карнават
источник

Ответы:

22

Вы можете создать модуль, который сделает ваше сообщение о блокировке 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нас есть код, который выбирает html блока cms:

<?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()
        ];
    }
}

Теперь вам нужно переписать шаблон KO shipping.html в вашей теме, где вы можете отобразить блок 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. Этот метод возвращает массив, который затем передается в javascript как window.checkoutобъект (это происходит в Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Аарон Аллен,
@AaronAllen, это работает, спасибо за этот пост.
Сарфарадж Сипай
Кто-нибудь может сказать, будет ли это работать для 2.3.3, так как я не вижу отображаемого содержимого статического блока cms? @Sarfaraj Sipai
Haerriz
-4

Я думаю, что вы не можете вызвать статический блок в файле .html, вы должны добавить этот код статического блока в файле phtml

Попробуйте путь ниже

Magento_Checkout/view/frontend/templates/onepage.phtml 

попробуйте добавить приведенный ниже код, поддерживаемый come css hacks

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>

Это временное решение может быть, вы получите некоторые другие хорошие ответы

Брэд Ходж
источник