Расширения Twig
Введение
Расширения Twig представляют собой функции, фильтры и другие элементы, которые предлагают специальный функционал для улучшения удобства использования скриптов представлений.
Обзор некоторых расширений Twig:
renderrender_esicontrollerassetcsrf_tokenpathabsolute_urltranslatortransurlrelative_path
Помимо стандартных расширений Twig, Pimcore добавляет дополнительные эффективные расширения.
Расширения Twig Pimcore
Все функции расширений Twig описаны ниже подробно, в таблицах приведен краткий обзор всех доступных расширений.
| Extension | Description |
|---|---|
pimcorecache | Простая функциональность кэширования в шаблоне |
pimcore_cache() (устарело) | Простое функциональность кэширования в шаблоне (устаревшая версия) |
pimcore_device() | Помогает реализовать адаптивный дизайн |
pimcore_glossary | Фильтр Twig: применяет фильтр к содержимому для передачи его в движок глоссария |
pimcore_placeholder() | Добавление и внедрение пользовательских заполнителей, например, для специальных тегов заголовков и т. д. |
pimcore_head_link() | Внедрение и управление связанными таблицами стилей (альтернатива assets()) |
pimcore_head_meta() | Управление элементами <meta> в вашем HTML-документе |
pimcore_head_script() | Управление элементами <script> |
pimcore_head_style() | Управление встроенными стилями (аналогично headLink() для встроенных стилей) |
pimcore_head_title() | Создание и хранение <title> HTML-документа для последующего извлечения и вывода |
pimcore_inc() | Используйте эту функцию для непосредственного включения (include) документа Pimcore |
pimcore_inline_script | Управление встроенными скриптами (аналогично headScript() для встроенных скриптов) |
pimcore_build_nav(), pimcore_render_nav(), pimcore_nav_renderer() | Встраивание и создание навигаций на основе структуры документа |
pimcore_url() | Альтернатива url() и path() |
pimcore_website_config() | Получение настроек сайта или конкретной настройки (первый параметр: ключ) для текущего сайта |
pimcore_image_thumbnail() | Возвращает путь к данной миниатюре изображения |
pimcore_image_thumbnail_html() | Возвращает HTML-код для отображения миниатюры изображения |
pimcore_supported_locales() | Используйте эту функцию для получения списка поддерживаемых локалей |
Pimcore также добавляет несколько тестов Twig для оценки булевых условий, например:
{# использование 'instanceof' для проверки, является ли объект экземпляром предоставленного класса #}
{% if product is instanceof('App\\Model\\Product\\Car') %}
...
{% endif %}
{# использование 'pimcore_data_object' для проверки, является ли объект экземпляром \Pimcore\Model\DataObject\Concrete #}
{% if product is pimcore_data_object %}
...
{% endif %}
Следующая таблица дает обзор всех доступных тестов:
| Тест | Описание |
|---|---|
instanceof(classname) | Проверяет, является ли объект экземпляром данного класса |
pimcore_asset | Проверяет, является ли объект экземпляром Asset |
pimcore_asset_archive | Проверяет, является ли объект экземпляром Asset\Archive |
pimcore_asset_audio | Проверяет, является ли объект экземпляром Asset\Audio |
pimcore_asset_document | Проверяет, является ли объект экземпляром Asset\Document |
pimcore_asset_folder | Проверяет, является ли объект экземпляром Asset\Folder |
pimcore_asset_image | Проверяет, является ли объект экземпляром Asset\Image |
pimcore_asset_text | Проверяет, является ли объект экземпляром Asset\Text |
pimcore_asset_unknown | Проверяет, является ли объект экземпляром Asset\Unknown |
pimcore_asset_video | Проверяет, является ли объект экземпляром Asset\Video |
pimcore_data_object | Проверяет, является ли объект экземпляром DataObject\Concrete |
pimcore_data_object_folder | Проверяет, является ли объект экземпляром DataObject\Folder |
pimcore_data_object_class(classname) | Проверяет, является ли объект экземпляром Pimcore\Model\DataObject{Classname} |
pimcore_data_object_gallery | Проверяет, является ли объект экземпляром DataObject\Data\ImageGallery |
pimcore_data_object_hotspot_image | Проверяет, является ли объект экземпляром DataObject\Data\Hotspotimage |
pimcore_document | Проверяет, является ли объект экземпляром Document |
pimcore_document_email | Проверяет, является ли объект экземпляром Document\Email |
pimcore_document_folder | Проверяет, является ли объект экземпляром Document\Folder |
pimcore_document_hardlink | Проверяет, является ли объект экземпляром Document\Hardlink |
pimcore_document_page | Проверяет, является ли объект экземпляром Document\Page |
pimcore_document_link | Проверяет, является ли объект экземпляром Document\Link |
pimcore_document_page_snippet | Проверяет, является ли объект экземпляром Document\PageSnippet |
pimcore_document_snippet | Проверяет, является ли объект экземпляром Document\Snippet |
Следующие тесты доступны только в том случае, если PimcoreWebToPrintBundle включен и установлен:
| Тест | Описание |
|---|---|
pimcore_document_print | Проверяет, является ли объект экземпляром PrintAbstract |
pimcore_document_print_container | Проверяет, является ли объект экземпляром Printcontainer |
pimcore_document_print_page | Проверяет, является ли объект экземпляром Printpage |
Следующие тесты доступны только в том случае, если PimcoreNewsletterBundle включен и установлен:
| Тест | Описание |
|---|---|
pimcore_document_newsletter | Проверяет, является ли объект экземпляром Newsletter |
Вы также можете создать свое собственное расширение Twig, чтобы сделать определенные функции доступными для ваших представлений.
Здесь вы можете найти пример того, как создать
свое собственное расширение Twig.
pimcorecache
Pimcorecache – это реализация кэша внутри шаблона. Это позволяет кэшировать часть содержимого непосредственно в шаблоне, что полезно, если нужно производить множество вычислений или управлять большим количеством объектов (например, для навигации).
{% pimcorecache "cache_key" tags([...]) ttl(int) force(bool) %}
| Название | Тип | Описание |
|---|---|---|
cache_key | string | Ключ/имя элемента кэша |
tags | string, string[] | Одна или несколько дополнительных меток кэша. Метка кэша in_template автоматически добавляется ко всем элементам. Если не задан ttl, дополнительно добавляется метка кэша output. |
ttl | int | Время жизни - продолжительность в секундах. Если ttl не задан, поведение будет как у кэша вывода, поэтому при любых изменениях в Pimcore кэш будет очищен. При указании времени жизни это не зависит от изменений в CMS. |
force | bool | Принудительное кэширование, даже если запрос выполнен в административном интерфейсе Pimcore |
Примеры
{% pimcorecache "test_cache_key" ttl(60) %}
<h1>Это кэшированная метка времени</h1>
{{ 'now'|date('U') }}
{% endpimcorecache %}
{# пример со всеми параметрами #}
{% pimcorecache "test_cache_key" ttl(60) tags(['custom_tag']) force(true) %}
<h1>Это кэшированная метка времени</h1>
{{ 'now'|date('U') }}
{% endpimcorecache %}
pimcore_cache (deprecated)
Это устаревший альтернативный подход к расширению pimcorecache. Вместо этого используйте pimcorecache.
pimcore_cache( name, lifetime, force)
| Название | Тип | Описание |
|---|---|---|
name | string | Имя элемента кэша |
lifetime | int | Время жизни - продолжительность в секундах. Если ttl не задан, поведение будет как у кэша вывода, поэтому при любых изменениях в Pimcore кэш будет очищен. При указании времени жизни это не зависит от изменений в CMS. |
force | bool | Принудительное кэширование, даже если запрос выполнен в административном интерфейсе Pimcore |
Example
{% set cache = pimcore_cache("test_cache_key", 60) %}
{% if not cache.start() %}
<h1>Это кэшированная метка времени</h1>
{{ 'now'|date('U') }}
{% do cache.end() %}
{% endif %}
pimcore_device
Расширение pimcore_device упрощает реализацию адаптивного дизайна в Pimcore.
Аргументы
| Название | Тип | Описание |
|---|---|---|
default | string | необязательно По умолчанию, если устройство не может быть определено |
Пример
{% set device = pimcore_device('desktop') %}
{% if device.isPhone() %}
Это содержимое для телефонов
{% elseif device.isTablet() %}
Этот текст отображается на планшете
{% elseif device.isDesktop() %}
Для браузера компьютера
{% endif %}
Более подробная информацию об [Адаптивном дизайне].(../../../../Pimcore/Development_Tools_and_Details/Adaptive_Design_Helper).
pimcore_glossary
Фильтр pimcore_glossary заменяет термины из глоссария. Подробности: Глоссарий.
{% apply pimcore_glossary %}
Мой контент
{% endapply %}
pimcore_placeholder
См. Placeholder Template Extension
pimcore_head_link
См. HeadLink Template Extension
pimcore_head_meta
См. HeadMeta Template Extension
pimcore_head_script
См. HeadScript Template Extension
pimcore_head_style
См. HeadStyle Template Extension
pimcore_head_title
См. HeadTitle Template Extension
pimcore_inc
Используйте pimcore_inc() чтобы включать документы (например, сниппеты) в представления. Это особенно полезно для футеров, заголовков, навигации, боковых панелей, тизеров и т.д.
pimcore_inc(document, params, cacheEnabled)
| Название | Тип | Описание |
|---|---|---|
document | PageSnippet | int |
params | array | Опционально, массив с парами ключ-значение. |
enabledCache | bool | По умолчанию истинно, установите в ложное значение, чтобы отключить кеширование. Хеширование производится по источнику и параметрам для обеспечения согласованного результата. |
Пример
{# включить путь #}
{{ pimcore_inc("/shared/boxes/buttons") }}
{# включить ID #}
{{ pimcore_inc(256) }}
{# включить объект #}
{% set doc = pimcore_doc(477) %}
{{ pimcore_inc(doc, {param: 'value'}) }}
{# отключить кеширование #}
{{ pimcore_inc(123, null, false) }}
При передаче параметров во что-то, включенное с помощью pimcore_inc(), эти параметры автоматически не передаются в Twig. Параметры передаются как атрибуты включенного документа и должны передаваться в Twig через действие контроллера документа.
Пример:
index.html.twig
{{ pimcore_inc('/some/other/document', { 'parameterToPass': parameterToPass }) }}
IndexController.php (любой контроллер / метод, назначенный для /some/other/document в дереве документов)
public function otherDocumentAction(Request $request): array
{
return ['parameterToPass' => $request->query->get('parameterToPass')];
}
Более удобный способ
public function otherDocumentAction(Request $request): Response
{
return $this->render(":Default:someOtherDocument.html.twig", ['parameterToPass' => $request->query->get('parameterToPass')]);
}
someOtherDocument.html.twig (любой шаблон Twig, соответствующий /some/other/document в дереве документов)
...
{{ parameterToPass }}
...
pimcore_inline_script
Навигация
pimcore_build_navpimcore_render_navpimcore_nav_renderer
Используются для взаимодействия с навигацией. См. Навигация для получения подробностей. Простой пример:
{% set navigation = pimcore_build_nav({
active: document,
root: navRootDocument
}) %}
{{ pimcore_render_nav(navigation) }}
{# вы также можете получить экземпляр рендерера и вызвать пользовательские методы рендеринга #}
{% set renderer = pimcore_nav_renderer('menu') %}
{{ renderer.render(navigation) }}
pimcore_url
Альтернатива url() и path(), которая использует URL.
{{ pimcore_url(params, name, reset, encode, relative) }}
Все параметры здесь опциональны:
| Название | Тип | Описание |
|---|---|---|
params | array | Параметры маршрута. Если в параметрах передан объект, будет использован генератор ссылок для создания URL |
name | string | Имя маршрута |
reset | bool | По умолчанию ложное, установите в ложное, чтобы избежать слияния параметров из запроса |
encode | bool | По умолчанию истинно, установите в ложное, чтобы отключить кодирование |
relative | bool | По умолчанию ложное, установите в истинное, чтобы сгенерировать относительный путь на основе текущего запроса |
Пример
{% set object = pimcore_object(769) %}
{{ pimcore_url({'object': object}) }}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.