Magento 2: Thêm HTML tùy ý vào <head> của mỗi trang?


23

Trong Magento 2, có thể thêm một chút HTML tùy ý vào mỗi trang frontend / cart <head/>không?

Tôi biết tôi có thể thêm một khối vào nội dung / <body>khu vực với mã như thế này

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="content">
            <block type="Pulsestorm\Test\Block\Head" name="pulsestorm.head" as="pulsestorm.head" template="pulsestorm/head.phtml"/>
        </referenceBlock>
    </body>
</page>

Tuy nhiên, không rõ liệu có một khối tương tự để thêm nội dung vào thành <head/>phần của trang hay không. Tôi đã xem qua trang web dev docs và mã nguồn, và có rất nhiều tài liệu tham khảo về các thẻ mới mà bạn có thể sử dụng với một <head/>thẻ

<head>
    <css.../>
    <js.../>
</head>

nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào về cách thêm html / văn bản tùy ý vào <head/>phần của trang trong Magento 2.

Câu trả lời:


27

không chắc chắn 100% về điều này, nhưng tôi nghĩ bạn có thể thêm mã vào đầu bằng cách này:

<body>
    <referenceBlock name="head.additional">
        <block class="Pulsestorm\Test\Block\Head" name="pulsestorm.head" as="pulsestorm.head" template="pulsestorm/head.phtml"/>
    </referenceBlock>
</body>

Tôi biết, nghe có vẻ lạ khi thêm mã vào <body>nhưng hiển thị nó trong <head>nhưng đây là lý do tại sao tôi nghĩ vậy:

"Bộ xương" của trang được xác định bởi mẫu này: https://github.com/magento/magento2/blob/develop/app/code/Magento/Theme/view/base/temsheet/root.phtml
Mẫu này echos $headAdditional( và các biến khác)
Các biến này được khởi tạo trong \ Magento \ Framework \ View \ result :: render () và var $headAdditionaltrông như thế này:

'headAdditional' => $addBlock ? $addBlock->toHtml() : null,

nơi $addBlock

$addBlock = $this->getLayout()->getBlock('head.additional');

Sau đó, tôi tìm kiếm các tài liệu tham khảo head.additionalvà tìm thấy điều này trongapp/code/Magento/Catalog/view/frontend/layout/catalog_product_opengraph.xml

<body>
    <referenceBlock name="head.additional">
        <block class="Magento\Catalog\Block\Product\View" name="opengraph.general" template="Magento_Catalog::product/view/opengraph/general.phtml">
            <block class="Magento\Directory\Block\Currency" name="opengraph.currency" as="meta.currency" template="Magento_Catalog::product/view/opengraph/currency.phtml"/>
        </block>
    </referenceBlock>
</body>

Tôi đã không kiểm tra mã thực tế (tôi đang trở nên lười biếng) nhưng đó là khách hàng tiềm năng duy nhất tôi có.


3
Trong một hoặc hai năm, bạn sẽ đủ lười biếng để chỉ hỏi một câu hỏi trên Stack Exchange khi bạn có một cái :) Ở trên hoạt động hoàn hảo (đảo mắt và lắc đầu không chịu được)
Alan Storm

4
Nếu đại diện: đây là vạt bướm trước sóng thần về việc tôi sẽ không thích cách M2 đặt tên cho mọi thứ.
Brendan Falkowski 7/12/2015
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.