Comment appeler un bloc statique dans un fichier modèle knockout?

12

J'utilise Magento 2.1.

Vous voulez afficher un message d'expédition personnalisé pour la méthode d'expédition sur la page de paiement, je l'ai fait en modifiant directement le fichier de modèle de knockout.

Magento_Checkout / web / template / shipping.html

mais je veux ce paramètre sur le backend. Donc, il est possible d'appeler un bloc statique dans le fichier de modèle knockout, si oui, comment puis-je le faire.

Je veux que le contant dans la case rouge vienne du bloc statique.

entrez la description de l'image ici

Arun Karnawat
la source

Réponses:

22

Vous pouvez créer un module qui rendra votre message de blocage de cms disponible pour le modèle KO en l'ajoutant à la configuration de paiement.

Dans Your/Module/etc/frontend/di.xmlnous ajoutons un nouveau fournisseur de configuration à la configuration de paiement:

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

Dans Your/Module/Model/ConfigProvider.phpnous avons le code qui récupère le code HTML du bloc 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()
        ];
    }
}

Maintenant, vous devez remplacer le modèle KO shipping.html dans votre thème où vous pouvez afficher le bloc cms comme suit:

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

Remarque: si vous souhaitez utiliser des balises html contenant des guillemets doubles (par exemple une balise html a) dans le bloc statique, vous devez échapper les guillemets doubles avec une barre oblique inverse. Par exemple:

Accept our <a target=\"_blank\" href=\"/privacy-policy\">privacy policy</a>
Aaron Allen
la source
Puis-je faire de même pour ajouter un bloc CMS dans minicart content.html?
Ronak Chauhan
Pour le minicart, vous devrez créer un plugin pour la getConfigméthode de \Magento\Checkout\Block\Cart\Sidebar. Cette méthode renvoie un tableau qui est ensuite transmis à javascript en tant window.checkoutqu'objet (cela se produit dans Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen
@AaronAllen, ça marche merci pour ce post.
Sarfaraj Sipai
Quelqu'un peut-il dire que cela fonctionnera pour 2.3.3 car je ne vois pas le contenu du bloc statique cms affiché? @Sarfaraj Sipai
Haerriz
-4

Je pense que vous ne pouvez pas appeler un bloc statique dans un fichier .html, vous devez ajouter ce code de bloc statique dans un fichier phtml

Essayez le chemin ci-dessous

Magento_Checkout/view/frontend/templates/onepage.phtml 

essayez d'ajouter le code ci-dessous maintenir par 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>

Il s'agit de solutions temporaires, vous obtiendrez d'autres bonnes réponses

Brad Hodge
la source