Magento 2: Dodawanie arbitralnego kodu HTML do <head> każdej strony?

23

Czy w Magento 2 można dodać dowolny fragment HTML do każdej strony frontend / cart <head/>?

Wiem, że mogę dodać blok do zawartości / <body>obszaru z kodem podobnym do tego

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

Nie jest jednak jasne, czy istnieje podobny blok do dodawania treści do <head/>elementu strony. Przejrzałem witrynę deweloperów i kod źródłowy, i jest wiele odniesień do nowych tagów, których można używać z <head/>tagiem

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

ale nie mogę znaleźć żadnego odniesienia do sposobu dodania dowolnego html / text do <head/>sekcji strony w Magento 2.

Alan Storm
źródło

Odpowiedzi:

27

nie jestem tego w 100% pewien, ale myślę, że możesz dodać kod do nagłówka, używając tego:

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

Wiem, dziwne jest dodawanie kodu do, <body>ale renderowanie go w, <head>ale oto dlaczego tak myślę:

„Szkielet” strony jest określony przez ten szablon: https://github.com/magento/magento2/blob/develop/app/code/Magento/Theme/view/base/templates/root.phtml
Ten szablon echa $headAdditional( i inne zmienne)
Te zmienne są inicjowane w \ Magento \ Framework \ View \ Result :: render () i var $headAdditionalwygląda następująco:

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

gdzie $addBlockjest

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

Następnie szukam odniesień head.additionali znalazłem to wapp/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>

Nie testowałem rzeczywistego kodu (robię się leniwy), ale to jedyny trop, jaki mam.

Marius
źródło
3
Za rok lub dwa będziesz wystarczająco leniwy, by zadać pytanie na Stack Exchange, kiedy je masz :) Powyższe zadziałało doskonale (przewracanie oczami i potrząsanie głową nie wytrzymało)
Alan Storm,
4
Jeśli reprezentatywny: to jest motylkowa klapa poprzedzająca tsunami, jak bardzo nie lubię sposobu, w jaki M2 nazywa rzeczy.
Brendan Falkowski