TL; DR
Есть ли способ программно переназначить, откуда частичка Twig считывает свои данные? У меня есть BLOB-объект JSON, который предоставляет структуру данных для элементов в библиотеке шаблонов, и мне нужно убедиться, что Twig предоставляет правильные данные в соответствующие .twig
частичные файлы.
Фон
У меня есть следующие данные JSON:
button.json (упрощенно)
{
"element": {
"button": {
"attr": {
"class": "btn"
},
"subelement": {
"span": {
"attr": {
"class": "btn__text"
},
"content": {
"text": "Button Text"
}
}
}
}
}
}
И следующие шаблоны Twig:
button.twig (упрощенно)
{% set base = 'button' %}
{% set el = element[base] %}
<button type="button"
{% include '_partial/_attr.class.twig' %}
>
{% set el = element[base].subelement.span %}
{% include 'span.twig' with { el: el } %}
</span> {# <span> closes here as it could have subsequent elements inside it #}
</button>
span.twig (упрощенно)
<span
{% include '_partial/_attr.class.twig' %}
>
{% if el.content.text %}
{{ el.content.text }}
{% endif %}
И веточка частичная:
_attr.class.twig
{% if el.attr.class %}
class="{{ el.attr.class }}"
{% endif %}
Приведенный выше выводит следующий HTML-код:
<button type="button" class="btn">
<span class="btn__text">Button Text</span>
</button>
Все эти файлы вносят свой вклад в библиотеку шаблонов, где я собираюсь перейти на СУХОЙ (отсюда и частичный файл (один из многих)). Я хотел бы сделать все как можно больше для повторного использования, чтобы <button>
или <span>
могли быть объявлены один раз, но использоваться в разных контекстах.
Проблема
В button.twig
я жестко кодирую {% set el = element[base].subelement.span %}
, чтобы изменить значение el
(чтобы <span>
получил правильные данные). Этот синтаксис работает только до тех пор, пока существует только уровень subelement
.
Рассмотрим эту структуру:
<form>
<div class="form-element>
<label>Label Example</label>
<input type="text">
</span>
</form>
Я озадачен тем, как получить доступ к данным для <label>
и <input>
, поскольку все перестановки, которые я пробовал (например, element[base].subelement.div.subelement.label
и element[base.subelement.div].subelement.label
), не работают.
Я пытаюсь добиться надежного способа обхода объекта данных, чтобы у меня были структуры разметки x элементов глубиной.
До сих пор мои мысли были:
- Создание ссылки на ключ объекта с помощью функции JS (возникли проблемы с возвращением возвращенной строки в ссылку на объект Twig)
- Создание своего рода «трекера», который отслеживает, насколько глубоко я в структуре данных (опять же, я думаю, функция JS, которая может сказать Twig, насколько глубоко элемент x находится в структуре данных)
- Переформатирование структуры данных, чтобы иерархия была выражена иначе)
- Правильно ли я даже переназначил
el
, чтобы он всегда представлял текущий элемент?
- Я также пытался использовать
attribute(base, xxx)
безрезультатно