Wie rufe ich einen statischen Block in einer Aussparungsvorlagendatei auf?

12

Ich benutze Magento 2.1.

Möchten Sie eine benutzerdefinierte Versandnachricht für die Versandart auf der Checkout-Seite anzeigen? Ich habe sie durch direkte Bearbeitung der KO-Vorlagendatei erstellt.

Magento_Checkout / web / template / shipping.html

aber ich möchte diese einstellung im backend. Es ist also möglich, einen statischen Block in der Knockout-Vorlagendatei aufzurufen. Wenn ja, wie kann ich das tun?

Ich möchte, dass der Inhalt in der roten Box einen statischen Block bildet.

Bildbeschreibung hier eingeben

Arun Karnawat
quelle

Antworten:

22

Sie können ein Modul erstellen, das Ihre Cms-Blockierungsnachricht für die KO-Vorlage verfügbar macht, indem Sie sie zur Checkout-Konfiguration hinzufügen.

In Your/Module/etc/frontend/di.xmlder Checkout-Konfiguration fügen wir einen neuen Konfigurationsanbieter hinzu:

<?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 haben Your/Module/Model/ConfigProvider.phpwir den Code, der den HTML-Code des cms-Blocks abruft:

<?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()
        ];
    }
}

Jetzt sollten Sie die Vorlage "shipping.html KO" in Ihrem Design überschreiben, in der Sie den cms-Block folgendermaßen anzeigen können:

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

Hinweis: Wenn Sie HTML-Tags verwenden möchten, die doppelte Anführungszeichen enthalten (z. B. ein HTML-Tag), müssen Sie die doppelten Anführungszeichen mit einem Backslash versehen. Beispielsweise:

Accept our <a target=\"_blank\" href=\"/privacy-policy\">privacy policy</a>
Aaron Allen
quelle
Kann ich den CMS-Block auch an die minicart content.html anhängen?
Ronak Chauhan
Für den Minicart müssen Sie ein Plugin für die getConfigMethode von erstellen \Magento\Checkout\Block\Cart\Sidebar. Diese Methode gibt ein Array zurück, das dann als window.checkoutObjekt an Javascript übergeben wird (dies tritt in auf Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen
@ AaronAllen, es funktioniert. Danke für diesen Beitrag.
Sarfaraj Sipai
Kann jemand sagen, ob dies für 2.3.3 funktioniert, da der statische Blockinhalt von cms nicht angezeigt wird? @Sarfaraj Sipai
Haerriz
-4

Ich denke, Sie können nicht statischen Block in HTML-Datei aufrufen Sie müssen diesen statischen Block-Code in HTML-Datei hinzufügen

Versuchen Sie den folgenden Pfad

Magento_Checkout/view/frontend/templates/onepage.phtml 

Versuchen Sie, den folgenden Code hinzuzufügen, der von Come CSS-Hacks verwaltet wird

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>

Dies ist eine vorübergehende Lösung, möglicherweise erhalten Sie einige andere gute Antworten

Brad Hodge
quelle