¿Cómo llamar al bloque estático en el archivo de plantilla de eliminación?

12

Estoy usando Magento 2.1.

Quiero mostrar un mensaje de envío personalizado para el método de envío en la página de pago, lo hice editando directamente en el archivo de plantilla de eliminación.

Magento_Checkout / web / template / shipping.html

pero quiero esta configuración en el backend. Entonces, es posible llamar a un bloque estático en el archivo de plantilla de eliminación, si es así, ¿cómo puedo hacerlo?

Quiero que el contenido en el cuadro rojo venga del bloque estático.

ingrese la descripción de la imagen aquí

Arun Karnawat
fuente

Respuestas:

22

Puede crear un módulo que haga que su mensaje de bloqueo de cms esté disponible para la plantilla KO al agregarlo a la configuración de pago.

En Your/Module/etc/frontend/di.xmlagregamos un nuevo proveedor de configuración a la configuración de pago:

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

En Your/Module/Model/ConfigProvider.phptenemos el código que recupera el html del bloque 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()
        ];
    }
}

Ahora debe sobrescribir la plantilla KO shipping.html en su tema donde puede mostrar el bloque cms de esta manera:

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

Nota: si desea utilizar etiquetas html que contienen comillas dobles (por ejemplo, una etiqueta html a) en el bloque estático, debe escapar de las comillas dobles con una barra diagonal inversa. Por ejemplo:

Accept our <a target=\"_blank\" href=\"/privacy-policy\">privacy policy</a>
Aaron Allen
fuente
¿Puedo hacer lo mismo para agregar el bloque CMS en minicart content.html?
Ronak Chauhan
Para el minicart, deberá crear un complemento para el getConfigmétodo de \Magento\Checkout\Block\Cart\Sidebar. Este método devuelve una matriz que luego se pasa a javascript como el window.checkoutobjeto (esto ocurre en Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen
@AaronAllen, está funcionando gracias por esta publicación.
Sarfaraj Sipai
¿Alguien puede decir que esto funcionará para 2.3.3 ya que no veo el contenido del bloque estático cms mostrado? @Sarfaraj Sipai
Haerriz
-4

Creo que no puede llamar al bloque estático en el archivo .html, debe agregar ese código de bloque estático en el archivo phtml

Prueba el siguiente camino

Magento_Checkout/view/frontend/templates/onepage.phtml 

intente agregar el siguiente código mantener por 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>

Se trata de soluciones temporales, es posible que obtenga otras buenas respuestas.

Brad Hodge
fuente