ノックアウトテンプレートファイルで静的ブロックを呼び出す方法は?


12

Magento 2.1を使用しています。

チェックアウトページで配送方法のカスタム配送メッセージを表示するには、ノックアウトテンプレートファイルを直接編集して行いました。

Magento_Checkout / web / template / shipping.html

しかし、バックエンドでこの設定が必要です。だから、ノックアウトテンプレートファイルで静的ブロックを呼び出すことは可能ですが、そうであれば、どうすればいいですか?

赤いボックス内の定数が静的ブロックから形成されるようにします。

ここに画像の説明を入力してください

回答:


22

チェックアウト構成に追加することにより、KOテンプレートでcmsブロックメッセージを使用できるようにするモジュールを作成できます。

ではYour/Module/etc/frontend/di.xml、私たちのチェックアウトの設定に新しい設定プロバイダーを追加します。

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

ではYour/Module/Model/ConfigProvider.php、私たちのCMSブロックのHTMLをフェッチコードを持っています:

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

次に、テーマのshipping.html KOテンプレートを上書きして、cmsブロックを次のように表示する必要があります。

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

注:静的ブロックで二重引用符を含むhtmlタグ(html aタグなど)を使用する場合は、二重引用符をバックスラッシュでエスケープする必要があります。例えば:

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

CMSブロックをminicart content.htmlに追加するのと同じことはできますか?
ロナックチャウハン

ミニカートの場合、のgetConfigメソッドのプラグインを作成する必要があります\Magento\Checkout\Block\Cart\Sidebar。このメソッドは、window.checkoutオブジェクトとしてjavascriptに渡される配列を返します(これはで発生します Magento/Checkout/view/frontend/templates/cart/minicart.phtml)。
アーロンアレン

@AaronAllen、この投稿をありがとうございます。
Sarfaraj Sipai

cmsの静的ブロックコンテンツが表示されないので、これは2.3.3で機能するだろうか?@Sarfaraj Sipai
Haerriz

-4

.htmlファイルで静的ブロックを呼び出すことはできないと思います。その静的ブロックコードをphtmlファイルに追加する必要があります

以下のパスを試してください

Magento_Checkout/view/frontend/templates/onepage.phtml 

以下のコードを追加して、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>

これは一時的な解決策です。他の良い回答が得られるかもしれません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.