Теги Twig⚓︎
Grav также предоставляет множество пользовательских тегов Twig, которые расширяют уже очень способные возможности шаблона Twig с помощью некоторых новых тегов, которые мы нашли полезными.
markdown
⚓︎
Тэг markdown
предоставляет новый мощный способ для встраивания Markdown в шаблон Twig. Можно использовать переменную и выводить её с помощью фильтра |markdown
, но синтаксис {% markdown %}
делает создание блоков текста ещё более простым.
{% markdown %}
This is **bold** and this _underlined_
1. This is a bullet list
2. This is another item in that same list
{% endmarkdown %}
script
⚓︎
Тег script
- это действительно удобный тег, который делает ваш Twig более читабельным по сравнению с обычным подходом {% do assets...%}
. Это чисто альтернативный способ написания вещей.
Файл JS⚓︎
В Grav 1.7.28 также добавлена поддержка модулей:
Внутренний JS⚓︎
style
⚓︎
Файл CSS⚓︎
Внутренний CSS⚓︎
link
⚓︎
{% link icon 'theme://images/favicon.png' priority: 20 with { type: 'image/png' } %}
{% link modulepreload 'plugin://grav-plugin/build/js/vendor.js' %}
switch
⚓︎
В большинстве языков программирования использование switch
утверждений является обычным способом сделать кучу if else
утверждений более чистыми и читабельными. Также они могут оказаться немного быстрее. Мы просто предоставляем простой способ их создания, так как они отсутствовали в базовой функциональности Twig.
{% switch type %}
{% case 'foo' %}
{{ my_data.foo }}
{% case 'bar' %}
{{ my_data.bar }}
{% default %}
{{ my_data.default }}
{% endswitch %}
deferred
⚓︎
Большой новой особенностью Grav 1.6 является мощность отложенных блоков. С традиционными блоками, после того, как блок отрисован, им нельзя манипулировать. Возьмем пример {% block scripts %}
, который может содержать некоторые записи для JavaScript включает в себя. Если у вас есть дочерний шаблон Twig, и вы расширяете базовый шаблон, где определяется этот блок, вы можете расширить блок, и добавить свои собственные записи JavaScript. Тем не менее, шаблоны частичных веток, которые включены в эту страницу, не могут достигать блока или взаимодействовать с ним.
Атрибут отложенного на блоке, который питается от расширения Deferred, означает, что вы можете определить этот блок в любом шаблоне Twig, но его отрисовка отложена, так что он отрисовывает после всего остального. Это означает, что вы можете добавить ссылки на JavaScript с помощью вызова {% do assets.addJs() %}
из любой точки вашей страницы, и поскольку рендеринг отложен, вывод будет содержать все активы, о которых Grav знает, независимо от того, когда вы их добавили.
Также можно объединить содержимое родительского блока с отложенным блоком с помощью {{ parent() }}
. Это может быть особенно полезно для тем, если добавлены дополнительные файлы CSS или JavaScript.
{% block stylesheets %}
<!-- Additional css library -->
{% do assets.addCss('theme://libraries/leaflet/dist/leaflet.css') %}
{{ parent() }}
{% endblock %}
throw
⚓︎
Есть определённые ситуации, когда нужно вручную бросить исключение, поэтому у нас тоже есть тэг для этого.
try
& catch
⚓︎
Также полезно иметь более мощную обработку ошибок в PHP-стиле в ваших Twig-шаблонах, так что у нас есть новый тег try/catch
.
render
⚓︎
Гибкие объекты медленно проникают во все новые и новые элементы Grav. Это самонаблюдающие объекты, которые имеют соответствующую структуру шаблонов Twig, так что они знают, как рендерить себя. Для того, чтобы использовать их, мы реализовали новый тег render
, который принимает опциональный макет, который в свою очередь управляет тем, с каким из макетов шаблонов должен быть визуализирован объект.
{% render collection layout: 'list' %}
{% render object layout: 'default' with { variable: 'value' } %}
cache
⚓︎
Иногда вам может понадобиться кэшировать части страницы, которые требуют много времени для рендеринга. Это можно сделать с помощью тега cache
.
В примере 600
- это необязательное время жизни в секундах. Если параметр не передан, будет использоваться время жизни кэша по умолчанию.