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

Block

Общее описание

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

Конфигурация

НазваниеТипОписание
limitintegerМаксимальное количество итераций.
reloadboolПерезагрузить режим редактирования при добавлении, перемещении или удалении (по умолчанию = false).
defaultintegerЕсли блок пустой, это указывает количество итераций при запуске.
manualboolПринудительно устанавливает ручной режим, что позволяет реализовать полностью настраиваемую HTML-разметку для блоков, например, с использованием элементов <table> (устарело, будет удалено в Pimcore 12, вместо этого используйте pimcoremanualblock).
classstringCSS-класс, который добавляется к окружающему контейнеру этого элемента в режиме редактирования.

Методы

НазваниеВозвращаетОписание
isEmpty()boolУказывает, пуст редактируемый элемент или нет.
getCount()intВозвращает общее количество итераций.
getCurrent()intВозвращает текущий индекс в процессе итерации.
getElements()arrayВозвращает массив для каждой итерации для доступа к определенным дочерним элементам.

Управляющие элементы блока

ЭлементОперация
+Добавление нового блока в текущую позицию.
-Удаление текущего блока.
вверх и внизПеремещение блока вверх и вниз.

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

{% pimcoreblock "contentblock" %}  
<h2>{{ pimcore_input("subline") }}</h2>
{{ pimcore_wysiwyg("content") }}
{% endpimcoreblock %}

<!-- Устарело! будет удалено в Pimcore 12 -->  
{% for i in pimcore_block("contentblock").iterator %}
<h2>{{ pimcore_input("subline") }}</h2>
{{ pimcore_wysiwyg("content") }}
{% endfor %}

Результат в режиме редактирования должен выглядеть следующим образом: Block in editmode

И во frontend: Block in the frontend

Расширенное использование

Пример для getCurrent()

{% pimcoreblock "contentblock" reload(true) %}  
{% if _block.current > 0 %}
Вставить эту строку только после первой итерации<br />
<br />
{% endif %}

<h2>{{ pimcore_input("subline") }}</h2>
{% endpimcoreblock %}

<!-- Устарело! будет удалено в Pimcore 12 -->  
{% set myBlock = pimcore_block("contentblock", {"reload": true}) %}
{% for i in myBlock.iterator %}
{% if myBlock.current > 0 %}
Вставить эту строку только после первой итерации<br />
<br />
{% endif %}

<h2>{{ pimcore_input("subline") }}</h2>
{% endfor %}

Внимание Если вам нужен индекс блока, пожалуйста, используйте _block.getCurrentIndex(), вместо _block.current, который является автоинкрементальным индексом (ключом) итератора массива.

Важно Если вы хотите динамически изменить структуру контента для каждого индекса в режиме редактирования, необходимо использовать конфигурацию reload=true.

Использование ручного режима

Ручной блок предлагает вам возможность взаимодействовать с Block так, как вам нравится, что полезно, например, при работе с таблицами:

{% pimcoremanualblock "contentblock" limit(6) %}  
<table>
<tr>
{% blockiterate %}
<td customAttribute="{{ pimcore_input("myInput").getData() }}">
{% do _block.blockStart() %}
<div style="width:200px; height:200px;border:1px solid black;">
{{ pimcore_input("myInput") }}
</div>
{% do _block.blockEnd() %}
</td>
{% endblockiterate %}
</tr>
</table>
{% endpimcoremanualblock %}

<!-- Устарело! будет удалено в Pimcore 12 -->  
{% set block = pimcore_block("gridblock", {"manual": true, "limit": 6}).start() %}
<table>
<tr>
{% for b in block.iterator %}
{% do block.blockConstruct() %}
<td customAttribute="{{ pimcore_input("myInput").getData() }}">
{% do block.blockStart() %}
<div style="width:200px; height:200px;border:1px solid black;">
{{ pimcore_input("myInput") }}
</div>
{% do block.blockEnd() %}
</td>
{% do block.blockDestruct() %}
{% endfor %}
</tr>
</table>
{% do block.end() %}

Использование ручного режима с кастомным расположением кнопок

Если вы хотите обернуть кнопки в div или изменить расположение:

{% pimcoremanualblock "gridblock" %}  
<table>
<tr>
{% blockiterate %}
<td customAttribute="{{ pimcore_input("myInput").data }}">
{% do _block.blockStart(false) %}
<div style="background-color: #fc0; margin-bottom: 10px; padding: 5px; border: 1px solid black;">
{% do _block.blockControls() %}
</div>
<div style="width:200px; height:200px;border:1px solid black;">
{{ pimcore_input("myInput") }}
</div>
{% do _block.blockEnd() %}
</td>
{% endblockiterate %}
</tr>
</table>
{% endpimcoremanualblock %}

<!-- Устарело! будет удалено в Pimcore 12 -->  
{% set block = pimcore_block("gridblock", {"manual": true}).start() %}
<table>
<tr>
{% for b in block.iterator %}
{% do block.blockConstruct() %}
<td customAttribute="{{ pimcore_input("myInput").data }}">
{% do block.blockStart(false) %}
<div style="background-color: #fc0; margin-bottom: 10px; padding: 5px; border: 1px solid black;">
{% do block.blockControls() %}
</div>
<div style="width:200px; height:200px;border:1px solid black;">
{{ pimcore_input("myInput") }}
</div>
{% do block.blockEnd() %}
</td>
{% do block.blockDestruct() %}
{% endfor %}
</tr>
</table>
{% do block.end() %}

Использование ручного режима с дополнительным CSS классом для элемента в режиме редактирования

{% pimcoremanualblock "gridblock" %}  
<div>
{% blockiterate %}
{% do _block.blockStart(true, false, "my-additional-class") %}
Добавляет дополнительный класс 'my-additional-class' к div в режиме редактирования
{% do _block.blockEnd() %}
{% endblockiterate %}
</div>
{% endpimcoremanualblock %}

<!-- Устарело! будет удалено в Pimcore 12 -->  
{% set block = pimcore_block("gridblock", {"manual": true}).start() %}
<div>
{% for b in block.iterator %}
{% do block.blockConstruct() %}
{% do block.blockStart(true, false, "my-additional-class") %}
Добавляет дополнительный класс 'my-additional-class' к div в режиме редактирования
{% do block.blockEnd() %}
{% do block.blockDestruct() %}
{% endfor %}
</div>
{% do block.end() %}

Доступ к данным внутри элемента Block

Элементы и структура приведены в демонстрационной версии CMS (контент/шаблон по умолчанию).

{# загрузка документа #}  
{% set document = pimcore_document_by_path('/en/More-Stuff/Developers-Corner/Galleries') %}

{# получить первое изображение из первого "gallery-carousel" элемента Brick #}
{% set image = document.getEditable('content').getElement('gallery-single-images')[5].getBlock('gallery').getElements()[0].getImage('image') %}

{{ dump(document.getEditable('content').getElement('gallery-single-images')) }}
{{ dump(image.getSrc()) }}


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