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

Расширение HeadStyle

Компонент HeadStyle расширяет Placeholder

HTML-элемент <style> используется для встраивания CSS-стилей в HTML-элемент <head>.

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

  • appendStyle($content, $attributes = [])
  • offsetSetStyle($index, $content, $attributes = [])
  • prependStyle($content, $attributes = [])
  • setStyle($content, $attributes = [])

Во всех случаях $content — это фактические CSS-декларации. $attributes - это любые дополнительные атрибуты, которые вы хотите указать для тега <style>: lang, title, media или dir — все это допустимо.

Примечание: Настройка условных комментариев HeadStyle позволяет оборачивать тег стиля в условные комментарии, что позволяет скрывать его от конкретных браузеров. Чтобы добавить условные теги, передайте условное значение как часть параметра $attributes в вызовах методов.

HeadStyle с условными комментариями

{# добавление стилей #}  
{% do pimcore_head_style().appendStyle(styles, {'conditional': 'lt IE 11'}) %}

HeadStyle также позволяет захватывать декларации стилей, что может быть полезно, если вы хотите создать декларации программно, а затем разместить их в другом месте. Пример использования этого будет представлен ниже.

Наконец, вы также можете использовать метод headStyle() для быстрого добавления деклараций элементов; его сигнатура такова: headStyle($content, $placement = 'APPEND', $attributes = []). Параметр $placement должен быть либо APPEND, либо PREPEND, или SET.

HeadStyle переопределяет каждый из методов append(), offsetSet(), prepend() и set(), чтобы обеспечить использование специальных методов, перечисленных выше. Внутренне он хранит каждый элемент как токен stdClass, который впоследствии сериализуется с помощью метода itemToString(). Это позволяет выполнять проверки на элементах в стеке и при необходимости изменять их, просто изменяя возвращаемый объект.

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

Вы можете указать новый тег стиля в любое время:

{# добавление стилей #}  
{% do pimcore_head_style().appendStyle(styles) %}

Порядок очень важен для CSS; вам может потребоваться убедиться, что декларации загружаются в определённом порядке из-за каскадности; используйте различные директивы append, prepend и offsetSet для облегчения этой задачи:

{# Установка стилей в порядке #}  
{# размещение на определённом смещении: #}
{% do pimcore_head_style().offsetSetStyle(100, customStyles) %}

{# размещение в конце: #}
{% do pimcore_head_style().appendStyle(finalStyles) %}

{# размещение в начале #}
{% do pimcore_head_style().prependStyle(firstStyles) %}

Когда вы, наконец, будете готовы вывести все декларации стилей в своем скрипте верстки, просто используйте помощник:

{{ pimcore_head_style() }}  

Захват деклараций стилей

Иногда вам необходимо сгенерировать декларации стилей CSS программно. Хотя вы можете использовать конкатенацию строк, heredocs и подобное, часто легче сделать это, создавая стили и добавляя теги Twig. HeadStyle позволяет делать именно это, захватывая его в стек:

{% do pimcore_head_style().captureStart() %}  
body {
background-color: red
}
{% do pimcore_head_style().captureEnd() %}

Допускаются следующие предположения:

Декларации стилей будут добавлены в стек. Если вы хотите, чтобы они заменили стек или были добавлены в верхнюю часть, вам нужно будет передать SET или PREPEND соответственно в качестве первого аргумента в captureStart().

Если вы хотите указать дополнительные атрибуты для тега <style>, передайте их в массиве в качестве второго аргумента к captureStart().

Примечание: Методы captureStart() и captureEnd() устарели с версии Pimcore 11.4.0. Используйте комбинацию set и pimcore_head_script для достижения аналогичного результата.

{% set inlineStyle %}  
body {
background-color: red
}
{% endset %}
{% do pimcore_head_style().appendStyle(inlineStyle) %}

{# Пример, если вы хотите указать дополнительные атрибуты для тега <style> #}
{% do pimcore_head_style().appendStyle(inlineStyle, {"media": "screen"}) %}


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