녹아웃 템플릿 파일에서 정적 블록을 호출하는 방법은 무엇입니까?


12

Magento 2.1을 사용하고 있습니다.

결제 페이지에 배송 방법에 대한 사용자 지정 배송 메시지를 표시하려면 녹아웃 템플릿 파일을 직접 편집하여 완료했습니다.

Magento_Checkout / web / template / shipping.html

백엔드 에서이 설정을 원합니다. 따라서 녹아웃 템플릿 파일에서 정적 블록을 호출 할 수 있습니다. 그렇다면 어떻게 할 수 있습니까?

고정 된 빨간색 상자에 고정 된 블록이 나타나기를 원합니다.

여기에 이미지 설명을 입력하십시오

답변:


22

결제 구성에 추가하여 cms 차단 메시지를 KO 템플릿에 사용할 수 있도록하는 모듈을 만들 수 있습니다.

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

이제 cms 블록을 다음과 같이 표시 할 수있는 shipping.html KO 템플릿을 테마에 덮어 써야합니다.

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

참고 : 정적 블록에 큰 따옴표가 포함 된 html 태그 (예 : html 태그)를 사용하려면 큰 따옴표를 백 슬래시로 이스케이프 처리해야합니다. 예를 들면 다음과 같습니다.

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

minicart content.html에 CMS 블록을 추가 할 수 있습니까?
Ronak Chauhan

미니 카트의 경우의 getConfig메소드에 플러그인을 만들어야합니다 \Magento\Checkout\Block\Cart\Sidebar. 이 메소드는 배열을 리턴 한 다음 window.checkout객체 로 javascript에 전달됩니다 (이에 서 발생 함 Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen

@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.