Jak wywołać blok statyczny w pliku szablonu nokaut?

12

Używam Magento 2.1.

Chcę pokazać niestandardową wiadomość wysyłkową dla metody wysyłki na stronie kasy, zrobiłem to, edytując bezpośrednio w pliku szablonu nokaut.

Magento_Checkout / web / template / shipping.html

ale chcę to ustawienie na zapleczu. Możliwe jest więc wywołanie bloku statycznego w pliku szablonu nokautu, jeśli tak, jak mogę to zrobić.

Chcę, aby zawartość w czerwonym polu pochodziła z bloku statycznego.

wprowadź opis zdjęcia tutaj

Arun Karnawat
źródło

Odpowiedzi:

22

Możesz utworzyć moduł, który udostępni wiadomość blokową cms szablonowi KO, dodając go do konfiguracji kasy.

W Your/Module/etc/frontend/di.xmldodajemy nowego dostawcę konfiguracji do konfiguracji kasy:

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

W Your/Module/Model/ConfigProvider.phpmamy kod, który pobiera html bloku 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()
        ];
    }
}

Teraz należy nadpisać szablon shipping.html KO w motywie, w którym można wyświetlić blok cms w następujący sposób:

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

Uwaga: jeśli chcesz używać znaczników HTML zawierających podwójne cudzysłowy (na przykład znacznika HTML) w bloku statycznym, powinieneś uciec od podwójnych cudzysłowów odwrotnym ukośnikiem. Na przykład:

Accept our <a target=\"_blank\" href=\"/privacy-policy\">privacy policy</a>
Aaron Allen
źródło
Czy mogę zrobić to samo, aby dołączyć blok CMS do minicart content.html?
Ronak Chauhan,
W przypadku minicart musisz utworzyć wtyczkę do getConfigmetody \Magento\Checkout\Block\Cart\Sidebar. Ta metoda zwraca tablicę, która jest następnie przekazywana do javascript jako window.checkoutobiekt (dzieje się to w Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen,
@AaronAllen, działa, dziękuję za ten post.
Sarfaraj Sipai
Czy ktoś może powiedzieć, czy to zadziała w 2.3.3, ponieważ nie widzę wyświetlanej zawartości bloku statycznego cms? @Sarfaraj Sipai
Haerriz
-4

Myślę, że nie można wywołać statycznego bloku w pliku .html, należy dodać ten statyczny kod bloku w pliku phtml

Wypróbuj poniższą ścieżkę

Magento_Checkout/view/frontend/templates/onepage.phtml 

spróbuj dodać poniższy kod utrzymuj przez come hacks hss

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>

To są tymczasowe rozwiązania, ponieważ możesz uzyskać inne dobre odpowiedzi

Brad Hodge
źródło