Magento 2: การเพิ่ม HTML Arbitrary ไปที่ <head> ของทุกหน้า?


23

ใน Magento 2 เป็นไปได้หรือไม่ที่จะเพิ่ม HTML ให้กับส่วนหน้า / รถเข็น<head/>?

ฉันรู้ว่าฉันสามารถเพิ่มบล็อกลงในเนื้อหา / <body>พื้นที่ด้วยรหัสบางอย่างเช่นนี้

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

อย่างไรก็ตามยังไม่ชัดเจนหากมีบล็อกที่คล้ายกันสำหรับการเพิ่มเนื้อหาใน<head/>องค์ประกอบของหน้า ฉันได้ดูไซต์ dev docs และซอร์สโค้ดแล้วและมีการอ้างอิงมากมายเกี่ยวกับแท็กใหม่ที่คุณสามารถใช้กับ<head/>แท็กได้

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

แต่ฉันไม่พบการอ้างอิงถึงวิธีการเพิ่ม html / text ใด ๆ ลงใน<head/>ส่วนของหน้าใน Magento 2

คำตอบ:


27

ไม่แน่ใจ 100% เกี่ยวกับสิ่งนี้ แต่ฉันคิดว่าคุณสามารถเพิ่มรหัสไปยังส่วนหัวโดยใช้สิ่งนี้:

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

ฉันรู้ว่ามันฟังดูแปลกที่จะเพิ่มโค้ดใน<body>แต่สร้างมันใน<head>แต่นี่คือเหตุผลที่ฉันคิดอย่างนั้น:

"โครงกระดูก" ของหน้าถูกกำหนดโดยเทมเพลตนี้: https://github.com/magento/magento2/blob/develop/app/code/Magento/Theme/view/base/templates/root.phtml
แม่แบบนี้ echos $headAdditional( และตัวแปรอื่น ๆ ) ตัวแปร
เหล่านี้เริ่มต้นได้ใน\ Magento \ Framework \ View \ Result :: render () และ var $headAdditionalมีลักษณะดังนี้:

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

ที่$addBlockเป็น

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

จากนั้นฉันค้นหาการอ้างอิงถึงhead.additionalและพบสิ่งนี้ในapp/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>

ฉันไม่ได้ทดสอบรหัสจริง (ฉันขี้เกียจ) แต่มันเป็นเพียงโอกาสในการขายที่ฉันมี


3
ในหนึ่งหรือสองปีคุณจะขี้เกียจพอที่จะถามคำถามเกี่ยวกับ Stack Exchange เมื่อคุณมีหนึ่ง :) ข้างต้นทำงานได้อย่างสมบูรณ์แบบ (ม้วนตาและหัวสั่นไม่ทนต่อ)
Alan Storm

4
หากตัวแทน: นี่คือพนังผีเสื้อที่อยู่ตรงหน้าสึนามิว่าฉันจะไม่ชอบวิธีที่ M2 บอกชื่อสิ่งต่าง ๆ
Brendan Falkowski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.