마 젠토 2 : 결제 페이지에 블록을 추가하는 방법?


11

위의 파일을 재정의하고에 내 사용자 지정 블록을 표시하고 싶습니다 li.

magento \ vendor \ magento \ module-checkout \ view \ frontend \ web \ template \ shipping.html

<li id="shipping" class="checkout-shipping-address" data-bind="fadeVisible: visible()">
    <div class="step-title" data-bind="i18n: 'Shipping Address'" data-role="title"></div>
</li>   

<!-- ko if:myBlock --> // Mine need to call block created from Admin
<li>
    <p data-bind="html: myBlock"></p>
</li> 
<!-- /ko -->

<!--Shipping method template-->
<li id="opc-shipping_method"
    class="checkout-shipping-method"
    data-bind="fadeVisible: visible(), blockLoader: isLoading"
    role="presentation">
    <div class="checkout-shipping-method">
        <div class="step-title" data-bind="i18n: 'Shipping Methods'" data-role="title"></div>
    </div>
</li>

관리자에서 블록이 활성화 된 li경우 블록 데이터와 함께 사용자 정의가 표시 되고 그렇지 않으면 아무것도 표시되지 않습니다.

.html블록이 활성화 되어 있는지 여부를 파일 에서 직접 확인할 수 있습니까 ?



안녕하세요 @AlexConstantinescu 위의 배송 방법을 표시하고 싶습니다
Ankit Shah

답변:


20

다음 은 결제 방법 위에 맞춤 블록표시하는 예 입니다.

1) di.xml 을 만듭니다 .

app / code / Vendor / 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">Vendor\Module\Model\ConfigProvider</item>
            </argument>
        </arguments>
    </type>
</config>

2) ConfigProvider.php 를 생성 하여 정적 블록을 windows.checkoutConfig에 정의하십시오.

app / code / Vendor / Module / Model / ConfigProvider.php

<?php

namespace Vendor\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()
    {
        $myBlockId = "my_static_block"; // CMS Block Identifier
        //$myBlockId = 20; // CMS Block ID

        return [
            'my_block_content' => $this->_layout->createBlock('Magento\Cms\Block\Block')->setBlockId($myBlockId)->toHtml()
        ];
    }
}

3) 모듈에서 checkout_index_index.xml을 재정의하고 자체 배송 구성 요소를 정의하십시오.

app / code / Vendor / Module / view / frontend / layout / checkout_index_index.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.root">
                <arguments>
                    <argument name="jsLayout" xsi:type="array">
                        <item name="components" xsi:type="array">
                            <item name="checkout" xsi:type="array">
                                <item name="children" xsi:type="array">
                                    <item name="steps" xsi:type="array">
                                        <item name="children" xsi:type="array">
                                            <item name="shipping-step" xsi:type="array">
                                                <item name="children" xsi:type="array">
                                                    <item name="shippingAddress" xsi:type="array">
                                                        <item name="component" xsi:type="string">Vendor_Module/js/view/shipping</item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </argument>
                </arguments>
        </referenceBlock>
    </body>
</page>

4) 이제 shipping.js를 작성 하고 고유 한 운송 템플리트 파일을 정의하십시오.

app / code / Vendor / Module / view / frontend / web / js / view / shipping.js

define(
    [
        'jquery',
        'ko',
        'Magento_Checkout/js/view/shipping'
    ],
    function(
        $,
        ko,
        Component
    ) {
        'use strict';
        return Component.extend({
            defaults: {
                template: 'Vendor_Module/shipping'
            },

            initialize: function () {
                var self = this;
                this._super();
            }

        });
    }
);

5) 에서 shipping.html 을 복사하십시오.

vendor / magento / module-checkout / view / frontend / web / template / shipping.html

으로 당신의 모듈

app / code / Vendor / Module / view / frontend / web / template / shipping.html

정적 블록을 표시하려는 shipping.htmlwindow.checkoutConfig.my_block_content 를 추가 하십시오.

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

여기 정적 블록에 새 제품 위젯을 추가합니다

산출:

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


나는 똑같이했지만 작동하지 않았습니다. 이 탭에서 정적 블록 내용을 볼 수 없습니다.
Sarfaraj Sipai

@Prince, "배송 방법"아래에 블록을 표시하려면 어떻게해야합니까?
Vinaya Maheshwari

1
@VinayaMaheshwari shipping.html배송 방법 후 블록을 보여주기 위해 마지막에 블록 div를 배치
Prince Patel

1
@VinayaMaheshwari 브라우저 캐시 여야합니다. 녹아웃 js 및 html 파일의 변경 사항을 확인하는 다른 방법은이 답변을 확인하십시오. magento.stackexchange.com/a/227290/35758
Prince Patel

1
네! 도움을 주셔서 감사합니다.
Vinaya Maheshwari

4

이것이 사이드 바 아래의 결제 페이지에 CMS 블록을 표시하기 위해 수행 한 작업입니다. 1. templates / onepage.phtml에서 다음과 같이 cms 블록 컨텐츠를 보유하기 위해 js 변수를 작성했습니다.

<?php $myCmsBlock = $block->getLayout()->createBlock('Magento\Cms\Block\Block')->setBlockId('my_cms_block')->toHtml() ?>

<script type="text/javascript">
    var my_cms_block = <?php echo json_encode($myCmsBlock)?>;
</script>

2. 녹아웃 템플릿 파일 (필자의 경우 web / js / template / sidebar.html)에서 위의 js 변수에서 cms 블록 내용을 다음과 같이 표시했습니다.

<div class="opc-help-cms" data-bind="html:my_cms_block">
    </div>

이것이 누군가를 돕기를 바랍니다! 감사!


간단한 해결책. 사용자 정의 onepage.phtml을 준비해야했습니다. 이 magento.stackexchange.com/questions/127150/…를
Gediminas

결제 단계에 추가하려면 어떻게해야하는지 알고 있습니까? 위에서 언급 한 내용을 vendor / magento / module-checkout / view / frontend / web / template / onepage.html 및 payment.html에 추가하려고 시도했지만 아무런 영향을 미치지 않습니다. magento.stackexchange.com/questions/296500/…
Kris Wen

payment.html은 onepage.phtml에서 js 변수에 액세스 할 수 있어야합니다. 결제 페이지의 콘솔에 인쇄하여 올바로 렌더링되었는지 확인
Siju Joseph

-1

phtml fie에 정적 블록 추가 :

<?php echo $block->getLayout()->createBlock('Magento\Cms\Block\Block')->setBlockId('block_identifier')->toHtml();?>

XML을 사용하여 블록 추가 :

<referenceContainer name="content">
    <block class="Magento\Cms\Block\Block" name="block_identifier">
       <arguments>
         <argument name="block_id" xsi:type="string">block_identifier</argument>
       </arguments>
    </block>
</referenceContainer>

cms 페이지에 블록 추가 :

{{block class="Magento\Cms\Block\Block" block_id="block_identifier"}}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.