Magento 2: Ajouter du HTML arbitraire à la <head> de chaque page?


23

Dans Magento 2, est-il possible d'ajouter un bit arbitraire de HTML à chaque page frontend / panier <head/>?

Je sais que je peux ajouter un bloc au contenu / à la <body>zone avec du code quelque chose comme ça

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

Cependant, il n'est pas clair s'il existe un bloc similaire pour ajouter du contenu à l' <head/>élément d'une page. J'ai parcouru le site de documentation et le code source, et il y a beaucoup de références à de nouvelles balises que vous pouvez utiliser avec une <head/>balise

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

mais je ne trouve aucune référence sur un moyen d'ajouter du html / texte arbitraire à la <head/>section d'une page dans Magento 2.

Réponses:


27

pas sûr à 100%, mais je pense que vous pouvez ajouter du code à la tête en utilisant ceci:

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

Je sais, cela semble étrange d'ajouter du code dans le <body>mais de le rendre dans le <head>mais voici pourquoi je pense que oui:

Le "squelette" de la page est déterminé par ce modèle: https://github.com/magento/magento2/blob/develop/app/code/Magento/Theme/view/base/templates/root.phtml
Ce modèle fait écho $headAdditional( et d'autres variables)
Ces variables sont initialisées dans \ Magento \ Framework \ View \ Result :: render () et la var $headAdditionalressemble à ceci:

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

$addBlockest

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

Ensuite, je recherche des références à head.additionalet l' ai trouvé dansapp/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>

Je n'ai pas testé le code réel (je deviens paresseux) mais c'est la seule piste que j'ai.


3
Dans un an ou deux, vous serez assez paresseux pour simplement poser une question sur Stack Exchange lorsque vous en aurez un :) Les éléments ci-dessus ont parfaitement fonctionné (les yeux roulent et les secousses de tête nonobstant)
Alan Storm

4
Si représentatif: c'est le volet papillon précédant le tsunami de combien je vais détester la façon dont M2 nomme les choses.
Brendan Falkowski
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.