Як викликати статичний блок у файлі шаблону нокауту?


12

Я використовую Magento 2.1.

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

Magento_Checkout / web / template / 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()
        ];
    }
}

Тепер слід замінити шаблон shipping.html KO у свою тему, де ви можете відобразити блок cms так:

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

Примітка: якщо ви хочете використовувати теги html, які містять подвійні лапки (наприклад, тег html) у статичному блоці, вам слід уникнути подвійних цитат із зворотною косою рисою. Наприклад:

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

Чи можу я зробити те ж саме, щоб додати блок CMS до minicart content.html?
Ronak Chauhan

Для міні-картки вам потрібно буде зробити плагін для 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 

спробуйте додати наведений нижче код підтримки від hass come 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>

Це тимчасові рішення, можливо, ви отримаєте ще кілька хороших відповідей

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.