Como chamar um bloco estático no arquivo de modelo do knockout?

12

Estou usando o Magento 2.1.

Deseja mostrar alguma mensagem de remessa personalizada para o método de remessa na página de check-out, eu fiz isso editando diretamente no arquivo de modelo do KO.

Magento_Checkout / web / template / shipping.html

mas eu quero essa configuração no back-end. Portanto, é possível chamar um bloco estático no arquivo de modelo do knockout, se sim, como posso fazer isso.

Quero que o contant na caixa vermelha venha formar um bloco estático.

insira a descrição da imagem aqui

Arun Karnawat
fonte

Respostas:

22

Você pode criar um módulo que disponibilize sua mensagem de bloqueio de cms ao modelo KO, adicionando à configuração do checkout.

Em Your/Module/etc/frontend/di.xmlnós adicionamos um novo provedor de configuração à configuração do checkout:

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

Em Your/Module/Model/ConfigProvider.phpnós temos o código que busca o html do bloco 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()
        ];
    }
}

Agora você deve substituir o modelo KO shipping.html no seu tema, para exibir o bloco cms da seguinte forma:

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

Nota: se você quiser usar tags html que contenham aspas duplas (por exemplo, uma tag html a) no bloco estático, deverá escapar das aspas duplas com uma barra invertida. Por exemplo:

Accept our <a target=\"_blank\" href=\"/privacy-policy\">privacy policy</a>
Aaron Allen
fonte
Posso fazer o mesmo para anexar o bloco CMS ao minicart content.html?
Ronak Chauhan
Para o minicart, você precisará criar um plugin para o getConfigmétodo de \Magento\Checkout\Block\Cart\Sidebar. Este método retorna uma matriz que é passada para javascript como o window.checkoutobjeto (isso ocorre em Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen
@AaronAllen, está funcionando, obrigado por este post.
Sarfaraj Sipai
Alguém pode dizer que isso funcionará para a 2.3.3, pois não vejo o conteúdo do bloco estático do cms exibido? @Sarfaraj Sipai
Haerriz
-4

Eu acho que você não pode chamar bloco estático no arquivo .html, você precisa adicionar esse código de bloco estático no arquivo phtml

Experimente o caminho abaixo

Magento_Checkout/view/frontend/templates/onepage.phtml 

tente adicionar o código abaixo manter por vir hacks 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>

Esta é uma solução temporária. Você pode obter outras boas respostas

Brad Hodge
fonte