Twig 2 шаблон цепочки на дисплее () [дубликат]

вы можете попробовать следующее:

setTimeout(function(){printer(name)}, 1000)
38
задан j0k 4 February 2013 в 10:11
поделиться

5 ответов

Попробуйте следующее:

{% extends intro == 'false' 
    ? 'UdoWebsiteBundle::layout.html.twig' 
    : 'UdoWebsiteBundle::layout_true.html.twig' %}

Идея взята здесь: http://jorisdewit.ca/2011/08/27/extending-different-layouts-for-ajax-requests -в-прут-Symfony2 /

47
ответ дан Maerlyn 22 August 2018 в 17:27
поделиться

Вы не можете расширять несколько шаблонов, поэтому у вас есть ошибка, если вы этого хотите, вам нужно нажать их в массиве, как показано ниже.

{% extends ['MyAppCustomBundle::Layout/layout.html.twig', 'FOSUserBundle::layout.html.twig'] %}

Но для этого вам понадобится версия Twig версии 1.2. документация о твигах

2
ответ дан bazingabazinga 22 August 2018 в 17:27
поделиться

Все это имеет смысл делать либо этот шаблон, либо этот шаблон.

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

Все отлично работает. Теперь мы хотим использовать вкладки bootstrap для создания профиля | Документы для удобства использования.

Теперь я знаю, потому что мы используем две отдельные формы, если вы отправляете документы, изменения в профиле не сохраняются и наоборот.

Я добавил форму документа в tab с помощью

<div role="tabpanel" class="tab-pane" id="documents">
    {{ render(controller('ManyAppBundle:Document:createDocument', {'viewOnly': true})) }}
</div>

«viewOnly»: true - это параметр запроса и не требуется действием.

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

{% if not viewOnly %}
    {% extends ... %}
{% endif %}

. Это дало проблемы, потому что вы не можете использовать extends внутри if. Как и в других ответах, попробуйте использовать

{% extends viewOnly == true ? ... %}

. Это перевернуло проблему Twig до выполнения кода, когда viewOnly является ложным.

Когда viewOnly является ложным, он должен расширить базовый шаблон, используемый всеми другими шаблонами, но если это правда, я хочу только показать это:

{{ form_start(form, { 'style': 'horizontal', 'col_size': 'sm' }) }}
    {% if form.documents is defined %}
        {{ form_row(form.documents) }}
    {% endif %}

    {{ form_row(form.submit, { 'attr': { 'class': 'btn btn-success' } }) }}
{{ form_end(form) }}

Но теперь с верхним

{% extends viewOnly == true ? ... %}

, если viewOnly становится ложным, он не работает с шаблоном "" невозможно найти.

Есть ли способ сказать, расширяет этот конкретный шаблон, который будет тем же результатом, что не расширяет какой-либо шаблон?

Или, альтернативно, есть способ высказывания расширяется, когда viewOnly true, но ничего не происходит при сбое?

1
ответ дан dTHQb 22 August 2018 в 17:27
поделиться
  • 1
    Пожалуйста, см. Мой полный вопрос об этом. [Д0] stackoverflow.com/questions/30121145/… – dTHQb 8 May 2015 в 10:13

Ответ из официальной документации :

Условное наследование

Поскольку имя шаблона для родителя может быть любым допустимым выражением Twig, это возможно сделать механизм наследования условным:

{% extends standalone ? "minimum.html" : "base.html" %}

В этом примере шаблон расширит шаблон макета «minimum.html», если отдельная переменная будет равна true, а в противном случае - «base.html».

5
ответ дан rink.attendant.6 22 August 2018 в 17:27
поделиться
  • 1
    Вы правы, он также работает, таким образом, вы также можете расширять другой шаблон в зависимости от его запроса ajax или нет, например. {% extends app.request.isXmlHttpRequest ? '::/ajax.html.twig' : '::/base-3col.html.twig' %}. Я просто предпочитаю проводить этот тест в контроллере даже в классе SuperController, который расширяется каждым контроллером. – svassr 30 August 2013 в 15:32

Чтобы поддерживать его аккуратно, вы должны использовать поддержку динамического наследования Twig, используя переменную, определенную в вашем контроллере, в качестве базового шаблона:

{% extends parent_template_var %}

Если переменная оценивается объектом Twig_Template, Twig будет используйте его как родительский шаблон.

Определите parent_template_var в вашем контроллере:

if($intro == 'false')
    $parent_template_var = 'UdoWebsiteBundle::layout.html.twig';
}else{
    $parent_template_var = 'UdoWebsiteBundle::layout_true.html.twig';
}
return $this->render('::/action.html.twig', array('parent_template_var' => $parent_template_var ));

http://twig.sensiolabs.org/doc/tags/extends.html

16
ответ дан svassr 22 August 2018 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: