Magento 2: Додавання довільного HTML до <head> кожної сторінки?


23

Чи можливо в Magento 2 додати довільний біт HTML до кожної сторінки фронту / кошика <head/>?

Я знаю, що можу додати блок до вмісту / <body>області з таким кодом

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

Однак не ясно, чи є подібний блок для додавання вмісту до <head/>елемента сторінки. Я переглянув сайт розробників і вихідний код, і є багато посилань на нові теги, які ви можете використовувати з <head/>тегом

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

але я не можу знайти жодних посилань на те, як додати довільний html / текст до <head/>розділу сторінки в Magento 2.

Відповіді:


27

не на 100% впевнений у цьому, але я думаю, що ви можете додати код до голови, використовуючи це:

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

Я знаю, дивно додавати код у <body> але робити його в, <head>але ось чому я так думаю:

"Скелет" сторінки визначається за допомогою цього шаблону: https://github.com/magento/magento2/blob/develop/app/code/Magento/Theme/view/base/templates/root.phtml
Цей шаблон лунає $headAdditional( та інші змінні)
Ці змінні ініціалізуються у \ Magento \ Framework \ View \ Result :: render (), а var $headAdditionalвиглядає так:

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

де $addBlockє

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

Потім я шукаю посилання head.additionalта знайшов це вapp/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>

Я не перевіряв фактичний код (я лінуся), але це єдиний потенційний потенціал.


3
Через рік-два ви будете ліниві, щоб просто задати питання на стек-біржі, коли у вас є :) Наведене вище спрацювало чудово (котиться оком, а голова трясеться не витримуючи)
Алан Шторм

4
Якщо представник: це клапоть метелика, який передує цунамі того, наскільки мені не подобається, як M2 називає речі.
Брендан Фальковський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.