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

Расширение Placeholder

Расширение Placeholder используется для сохранения контента между скриптами представления и экземплярами представления. Оно также предлагает некоторые полезные функции, такие как агрегация контента, захват содержимого скрипта представления для последующего использования и добавление пред- и пост-текста к контенту (а также пользовательских разделителей для агрегированного контента).

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

Основное использование плейсхолдеров заключается в сохранении данных представления. Каждое обращение к расширению Placeholder ожидает name плейсхолдера. Помощник затем возвращает объект контейнера для плейсхолдера, которым вы можете манипулировать, либо просто вывести.

{% do pimcore_placeholder('foo').set("Немного текста на потом") %}  

{# outputs "Немного текста на потом" #}
{{ pimcore_placeholder('foo') }}

Агрегация контента

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

Помощник представления Placeholder использует контейнеры, которые расширяют ArrayObject, предоставляя широкий набор функций для манипуляции массивами. Кроме того, он предлагает различные методы для форматирования содержимого, хранящегося в контейнере:

  • setPrefix($prefix) устанавливает текст, который будет добавлен в начале содержимого. Используйте getPrefix(), чтобы в любой момент узнать, какое текущее значение.
  • setPostfix($postfix) устанавливает текст, который будет добавлен в конце содержимого. Используйте getPostfix(), чтобы в любой момент узнать, какое текущее значение.
  • setSeparator($seperator) устанавливает текст, который будет использован для разделения агрегированного контента. Используйте getSeparator(), чтобы в любой момент узнать, какое текущее значение.
  • setIndent($indent) может быть использован для установки значения отступа для содержимого. Если передано целое число, будет использовано это количество пробелов. Если передана строка, будет использована эта строка. Используйте getIndent(), чтобы в любой момент узнать, какое текущее значение.
{% do pimcore_placeholder('foo').setPrefix("<ul>\n    <li>")  
.setSeparator("</li><li>\n")
.setIndent(4)
.setPostfix("</li></ul>\n")
%}

{# выводит в виде неупорядоченного списка с аккуратным отступом #}
{{ pimcore_placeholder('foo') }}


Захват контента (устарело)

Иногда вам может понадобиться использовать контент для плейсхолдера в скрипте представления, что является наиболее простым способом шаблонизации. Расширение Placeholder позволяет вам захватывать произвольный контент для последующего отображения с помощью следующего API.

  • captureStart($type, $key) начинает захват контента.

    • $type должен быть одним из констант Placeholder APPEND или SET. Если APPEND, захваченный контент добавляется к текущему содержимому плейсхолдера. Если SET, захваченный контент используется как единственное значение плейсхолдера (возможно, заменяя любое предыдущее содержимое). По умолчанию $type - APPEND.
    • $key может быть использован для указания конкретного ключа в контейнере плейсхолдера, в который вы хотите захватить контент.
    • captureStart() блокирует захват до тех пор, пока не будет вызван captureEnd(); вы не можете вложить захват с тем же контейнером плейсхолдера. Это вызовет исключение.
  • captureEnd() завершает захват контента и помещает его в объект контейнера в соответствии с тем, как был вызван captureStart().

{# Захват по умолчанию: добавление #}  
{% do pimcore_placeholder('foo').captureStart() %}

{% for datum in data %}
<div class="foo">
<h2>{{ datum.title }}</h2>
<p>{{ datum.content }}</p>
</div>
{% endfor %}

{% do pimcore_placeholder('foo').captureEnd() %}

{{ pimcore_placeholder('foo') }}

{# Захват по умолчанию: по ключу #}  
{% do pimcore_placeholder('foo').captureStart('SET', 'data') %}

{% for datum in data %}
<div class="foo">
<h2>{{ datum.title }}</h2>
<p>{{ datum.content }}</p>
</div>
{% endfor %}

{% do pimcore_placeholder('foo').captureEnd() %}

{{ pimcore_placeholder('foo').data | raw }}

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

{% set placeholderData %}  
{% for datum in data %}
<div class="foo">
<h2>{{ datum.title }}</h2>
<p>{{ datum.content }}</p>
</div>
{% endfor %}
{% endset %}

{% do pimcore_placeholder('foo').set(placeholderData) %}
{{ pimcore_placeholder('foo') }}

{% set placeholderData %}  
Тест добавления дополнительного контента
{% endset %}

{% do pimcore_placeholder('foo').append(placeholderData) %}
{{ pimcore_placeholder('foo') }}


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