Magento 2: Beliebiges HTML zum <head> jeder Seite hinzufügen?

23

Ist es in Magento 2 möglich, jedem Frontend / jeder Cart-Seite ein beliebiges HTML-Element hinzuzufügen <head/>?

Ich weiß, dass ich dem Inhalt / <body>Bereich mit Code wie diesem einen Block hinzufügen kann

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

Es ist jedoch nicht klar, ob es einen ähnlichen Block zum Hinzufügen von Inhalten zum <head/>Element einer Seite gibt. Ich habe die dev docs-Site und den Quellcode durchgesehen und es gibt viele Verweise auf neue Tags, die Sie mit einem <head/>Tag verwenden können

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

Ich kann jedoch keine Referenz für eine Möglichkeit zum Hinzufügen von beliebigem HTML / Text zum <head/>Abschnitt einer Seite in Magento 2 finden.

Alan Storm
quelle

Antworten:

27

Ich bin mir nicht 100% sicher, aber ich denke, Sie können dem Kopf Code hinzufügen, indem Sie Folgendes verwenden:

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

Ich weiß, es klingt seltsam, Code in das zu <body>schreiben, aber es in das zu rendern, <head>aber hier ist, warum ich das denke:

Das "Skelett" der Seite wird durch diese Vorlage bestimmt: https://github.com/magento/magento2/blob/develop/app/code/Magento/Theme/view/base/templates/root.phtml
Diese Vorlage echos $headAdditional( und andere Variablen)
diese Variablen werden initialisiert in \ Magento \ Framework \ View \ Ergebnis :: render () und die var $headAdditionalsieht wie folgt aus :

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

wo $addBlockist

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

Dann habe ich nach Hinweisen gesucht head.additionalund diese in gefundenapp/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>

Ich habe den eigentlichen Code nicht getestet (ich werde faul), aber es ist der einzige Hinweis, den ich habe.

Marius
quelle
3
In ein oder zwei Jahren werden Sie faul genug sein, um nur eine Frage über Stack Exchange zu stellen, wenn Sie eine haben :) Die oben funktioniert perfekt (Augenrollen und Kopfschütteln nicht standhalten)
Alan Storm
4
Wenn repräsentativ: Dies ist die Schmetterlingsklappe vor dem Tsunami, wie sehr ich die Art und Weise, wie M2 Dinge benennt, ablehnen werde.
Brendan Falkowski