Come chiamare il blocco statico nel file modello knockout?


12

Sto usando Magento 2.1.

Vuoi mostrare un messaggio di spedizione personalizzato per il metodo di spedizione nella pagina di pagamento, l'ho fatto modificando direttamente il file del modello knockout.

Magento_Checkout / web / template / shipping.html

ma voglio questa impostazione nel backend. Quindi, è possibile chiamare un blocco statico nel file modello knockout, se sì, come posso farlo.

Voglio che il concorrente nella casella rossa arrivi dal blocco statico.

inserisci qui la descrizione dell'immagine

Risposte:


22

Puoi creare un modulo che renderà il tuo messaggio di blocco cms disponibile per il modello KO aggiungendolo alla configurazione di checkout.

In Your/Module/etc/frontend/di.xmlaggiungiamo un nuovo provider di configurazione alla configurazione di 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>

In Your/Module/Model/ConfigProvider.phpabbiamo il codice che recupera l'html del blocco 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()
        ];
    }
}

Ora dovresti sovrascrivere il modello KO shipping.html nel tuo tema in cui puoi visualizzare il blocco cms in questo modo:

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

Nota: se si desidera utilizzare tag html che contengono doppie virgolette (ad esempio un html un tag) nel blocco statico, è necessario evitare le doppie virgolette con una barra rovesciata. Per esempio:

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

Posso fare lo stesso per aggiungere il blocco CMS in minicart content.html?
Ronak Chauhan,

Per il minicart dovrai creare un plugin per il getConfigmetodo di \Magento\Checkout\Block\Cart\Sidebar. Questo metodo restituisce un array che viene quindi passato a JavaScript come window.checkoutoggetto (ciò si verifica in Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen,

@AaronAllen, funziona grazie per questo post.
Sarfaraj Sipai,

Qualcuno può dire che funzionerà per 2.3.3 poiché non vedo il contenuto del blocco statico cms visualizzato? @Sarfaraj Sipai
Haerriz

-4

Penso che non puoi chiamare blocco statico nel file .html devi aggiungere quel codice di blocco statico nel file phtml

Prova il percorso seguente

Magento_Checkout/view/frontend/templates/onepage.phtml 

prova ad aggiungere il codice qui sotto mantieni da hacks 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>

Questa è una soluzione temporanea potrebbe essere che otterrai altre buone risposte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.