Làm thế nào để gọi khối tĩnh trong tệp mẫu loại trực tiếp?


12

Tôi đang sử dụng Magento 2.1.

Muốn hiển thị một số thông báo vận chuyển tùy chỉnh cho phương thức giao hàng trên trang thanh toán, tôi đã thực hiện bằng cách chỉnh sửa trực tiếp vào tệp mẫu loại trực tiếp.

Magento_Checkout / web / template / Shipping.html

nhưng tôi muốn cài đặt này vào phụ trợ. Vì vậy, có thể gọi một khối tĩnh trong tệp mẫu loại trực tiếp, nếu có, làm thế nào tôi có thể làm điều đó.

Tôi muốn contant trong hộp màu đỏ hình thành khối tĩnh.

nhập mô tả hình ảnh ở đây

Câu trả lời:


22

Bạn có thể tạo một mô-đun sẽ làm cho thông báo chặn cms của bạn có sẵn cho mẫu KO bằng cách thêm vào cấu hình thanh toán.

Trong Your/Module/etc/frontend/di.xmlchúng tôi thêm một nhà cung cấp cấu hình mới vào cấu hình thanh toán:

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

Trong Your/Module/Model/ConfigProvider.phpchúng tôi có mã tìm nạp html của khối 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()
        ];
    }
}

Bây giờ, bạn nên ghi đè lên mẫu Shipping.html KO trong chủ đề của mình, nơi bạn có thể hiển thị khối cms như vậy:

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

Lưu ý: nếu bạn muốn sử dụng các thẻ html có chứa trích dẫn kép (ví dụ: thẻ html a) trong khối tĩnh, bạn nên thoát các trích dẫn kép bằng dấu gạch chéo ngược. Ví dụ:

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

Tôi có thể làm tương tự để nối khối CMS vào nội dung minicart.html không?
Ronak Chauhan

Đối với minicart, bạn sẽ cần tạo một plugin cho getConfigphương thức \Magento\Checkout\Block\Cart\Sidebar. Phương thức này trả về một mảng sau đó được chuyển đến javascript làm window.checkoutđối tượng (điều này xảy ra trong Magento/Checkout/view/frontend/templates/cart/minicart.phtml).
Aaron Allen

@Aaron ALLen, nó hoạt động cảm ơn bạn cho bài viết này.
Sarfaraj Sipai

Bất cứ ai cũng có thể nói điều này sẽ hoạt động trong phần 3 vì tôi không thấy nội dung khối tĩnh cms được hiển thị? @Sarfaraj Sipai
Haerriz

-4

Tôi nghĩ bạn không thể gọi khối tĩnh trong tệp .html, bạn phải thêm mã khối tĩnh đó vào tệp phtml

Hãy thử con đường dưới đây

Magento_Checkout/view/frontend/templates/onepage.phtml 

cố gắng thêm mã dưới đây duy trì bằng cách đến css hack

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>

Đây là giải pháp tạm thời có thể bạn sẽ nhận được một số câu trả lời hay khác

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.