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.

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.