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

Расширения Twig

Введение

Расширения Twig представляют собой функции, фильтры и другие элементы, которые предлагают специальный функционал для улучшения удобства использования скриптов представлений.

Обзор некоторых расширений Twig:

  • render
  • render_esi
  • controller
  • asset
  • csrf_token
  • path
  • absolute_url
  • translator
  • trans
  • url
  • relative_path

Помимо стандартных расширений Twig, Pimcore добавляет дополнительные эффективные расширения.

Расширения Twig Pimcore

Все функции расширений Twig описаны ниже подробно, в таблицах приведен краткий обзор всех доступных расширений.

ExtensionDescription
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_keystringКлюч/имя элемента кэша
tagsstring, string[]Одна или несколько дополнительных меток кэша. Метка кэша in_template автоматически добавляется ко всем элементам. Если не задан ttl, дополнительно добавляется метка кэша output.
ttlintВремя жизни - продолжительность в секундах. Если ttl не задан, поведение будет как у кэша вывода, поэтому при любых изменениях в Pimcore кэш будет очищен. При указании времени жизни это не зависит от изменений в CMS.
forceboolПринудительное кэширование, даже если запрос выполнен в административном интерфейсе 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)

НазваниеТипОписание
namestringИмя элемента кэша
lifetimeintВремя жизни - продолжительность в секундах. Если ttl не задан, поведение будет как у кэша вывода, поэтому при любых изменениях в Pimcore кэш будет очищен. При указании времени жизни это не зависит от изменений в CMS.
forceboolПринудительное кэширование, даже если запрос выполнен в административном интерфейсе 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.

Аргументы
НазваниеТипОписание
defaultstringнеобязательно По умолчанию, если устройство не может быть определено
Пример
{% 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

См. 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)

НазваниеТипОписание
documentPageSnippetint
paramsarrayОпционально, массив с парами ключ-значение.
enabledCacheboolПо умолчанию истинно, установите в ложное значение, чтобы отключить кеширование. Хеширование производится по источнику и параметрам для обеспечения согласованного результата.
Пример
{# включить путь #}  
{{ 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

См. Расширение InlineScript

Навигация

  • pimcore_build_nav
  • pimcore_render_nav
  • pimcore_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) }}  

Все параметры здесь опциональны:

НазваниеТипОписание
paramsarrayПараметры маршрута. Если в параметрах передан объект, будет использован генератор ссылок для создания URL
namestringИмя маршрута
resetboolПо умолчанию ложное, установите в ложное, чтобы избежать слияния параметров из запроса
encodeboolПо умолчанию истинно, установите в ложное, чтобы отключить кодирование
relativeboolПо умолчанию ложное, установите в истинное, чтобы сгенерировать относительный путь на основе текущего запроса
Пример
{% set object = pimcore_object(769) %}  
{{ pimcore_url({'object': object}) }}


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