Перейти к основному содержимому

Расширение HeadLink

Расширение шаблонизации HeadLink расширяет Placeholder

HTML-элемент <link> все чаще используется для связывания различных ресурсов для вашего сайта: таблицы стилей, фиды, фавиконы, обратные ссылки и многое другое. Хелпер HeadLink предоставляет простой интерфейс для создания и агрегации этих элементов для последующего извлечения и вывода в вашем скрипте макета.

Хелпер HeadLink имеет специальные методы для добавления ссылок на таблицы стилей в свой стек:

  • appendStylesheet($href, $media, $conditionalStylesheet, $extras)
  • offsetSetStylesheet($index, $href, $media, $conditionalStylesheet, $extras)
  • prependStylesheet($href, $media, $conditionalStylesheet, $extras)
  • setStylesheet($href, $media, $conditionalStylesheet, $extras)

Значение $media по умолчанию равно screen, но может быть любом допустимом значении медиа. $conditionalStylesheet представляет собой строку или логическое значение FALSE, и будет использоваться во время рендеринга для определения, следует ли включать специальные комментарии, чтобы предотвратить загрузку таблицы стилей на определенных платформах. $extras — это массив любых дополнительных значений, которые вы хотите добавить в тег.

Кроме того, хелпер HeadLink имеет специальные методы для добавления 'альтернативных' ссылок в свой стек:

  • appendAlternate($href, $type, $title, $extras)
  • offsetSetAlternate($index, $href, $type, $title, $extras)
  • prependAlternate($href, $type, $title, $extras)
  • setAlternate($href, $type, $title, $extras)

Метод-помощник headLink() позволяет указывать все атрибуты, необходимые для элемента <link>, и также позволяет указывать размещение — заменяет ли новый элемент все остальные, добавляется ли в начало (в верхнюю часть стека) или в конец стека.

Основное использование

Вы можете указать ссылку в любое время. Обычно вы будете указывать глобальные ссылки в вашем скрипте макета, а специфические для приложения ссылки — в ваших скриптах представлений приложения. В вашем скрипте макета, в секции <head>, вы затем выведете хелпер для его отображения.

{# установка ссылок в скрипте представления: #}  
{% do pimcore_head_link().appendStylesheet('/styles/basic.css') %}
{% do pimcore_head_link({rel: 'icon', href: '/img/favicon.ico'}, 'PREPEND').prependStylesheet('/styles/moz.css', 'screen', true, {id: 'my_stylesheet'}) %}

{# rendering the links: #}
{{ pimcore_head_link() }}

Поддержка HTTP/2 Push

Хелперы HeadLink и HeadScript имеют внутреннюю поддержку для компонента WebLink. Хотя вы можете напрямую вызывать $this->webLink()->preload('/path/to/file.css', ['as' => 'style']) в ваших шаблонах, хелперы HeadLink и HeadScript заботятся о добавлении ссылки с учётом кэша вместо не префиксированного пути файла. Поддержка Push в настоящее время является опциональной — чтобы сделать так, чтобы хелперы автоматически включали ссылки на предлагаемые ресурсы, либо активируйте это на глобальном уровне для хелпера, либо индивидуально для каждого элемента.

  
{# включить веб-ссылки для каждого элемента #}
{% do pimcore_head_link().enableWebLinks() %}

{# установить атрибуты веб-ссылки, передаваемые каждому элементу #}
{% do pimcore_head_link().setWebLinkAttributes({as: 'style'}) %}

{# включить веб-ссылки на уровне элемента #}
{# элемент будет добавлен, даже если enableWebLinks() не был вызван #}
{% do pimcore_head_link().setWebLinkAttributes({as: 'style'}) %}

{# отключить веб-ссылки на уровне элемента #}
{# элемент не будет добавлен, даже если enableWebLinks() был вызван #}
{% do pimcore_head_link().appendStylesheet('/static/css/styles.css', 'screen', false, {webLink: {as: 'style'}}) %}

{# переопределить используемый метод (по умолчанию preload()) #}
{% do pimcore_head_link().appendStylesheet('/static/css/styles.css', 'screen', false, {'webLink': {method: 'prefetch'}}) %}

Добавленные ссылки будут обрабатываться компонентом веб-ссылок и внедряться в ответ. Убедитесь, что Symfony правильно настроен (эта настройка включена по умолчанию из конфигурации ядра Pimcore):

# config.yaml  

framework:
web_links:
enabled: true


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.