Magento 2: aggiungere l'arbitrario HTML al <head> di ogni pagina?


23

In Magento 2, è possibile aggiungere un bit arbitrario di HTML a tutte le pagine frontend / cart <head/>?

So di poter aggiungere un blocco al contenuto / <body>area con un codice simile a questo

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

Tuttavia, non è chiaro se esiste un blocco simile per l'aggiunta di contenuto <head/>all'elemento di una pagina. Ho consultato il sito dei documenti di sviluppo e il codice sorgente e ci sono molti riferimenti a nuovi tag che è possibile utilizzare con un <head/>tag

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

ma non riesco a trovare alcun riferimento a un modo per aggiungere HTML / testo arbitrari alla <head/>sezione di una pagina in Magento 2.

Risposte:


27

non sono sicuro al 100% su questo, ma penso che puoi aggiungere codice alla testa usando questo:

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

Lo so, sembra strano aggiungere codice in <body>ma renderlo in <head>ma ecco il motivo per cui penso di sì:

Lo "scheletro" della pagina è determinato da questo modello: https://github.com/magento/magento2/blob/develop/app/code/Magento/Theme/view/base/templates/root.phtml
Questo modello echos $headAdditional( e altre variabili)
Queste variabili sono inizializzate in \ Magento \ Framework \ View \ Result :: render () e la var si $headAdditionalpresenta così:

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

dove $addBlockè

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

Quindi cerco riferimenti a head.additionale ho trovato questo inapp/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>

Non ho testato il codice reale (sto diventando pigro) ma è l'unico vantaggio che ho.


3
In uno o due anni sarai abbastanza pigro da fare una domanda su Stack Exchange quando ne hai uno :) Quanto sopra ha funzionato perfettamente (occhi rotondi e scosse di testa nonostante)
Alan Storm

4
Se rappresentativo: questo è il lembo a farfalla che precede lo tsunami di quanto non mi piacerà il modo in cui M2 nomina le cose.
Brendan Falkowski il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.