Brindille d'étendre le modèle à la condition
J'utilise Symfony 2 avec Twig et ma question est assez simple:
En vue, je veux étendre l'une des mises en page basées sur une variable. Si la variable est false
je veux prolonger UdoWebsiteBundle::layout.html.twig
et si c'est true
je veux prolonger UdoWebsiteBundle::layout_true.html.twig
.
Voici le code que j'ai essayé:
{% block layout_extender %}
{% if intro == 'false' %}
{% extends 'UdoWebsiteBundle::layout.html.twig' %}
{% else %}
{% extends 'UdoWebsiteBundle::layout_true.html.twig' %}
{% endif %}
{% endblock %}
J'obtiens cette erreur:
Plusieurs étend balises sont interdits dans "UdoWebsiteBundle:à la maison:la maison.html.brindille" à la ligne 7
Est-il un autre moyen pour y parvenir?
Vous devez vous connecter pour publier un commentaire.
Essayez celui-ci:
Idée prises à partir d'ici: http://jorisdewit.ca/2011/08/27/extending-different-layouts-for-ajax-requests-in-twig-symfony2/
De garder soigné vous devez utiliser Twig héritage dynamique par le biais d'une variable, défini dans votre contrôleur, comme le modèle de base:
Si la variable prend la valeur d'un Twig_Template objet, Twig va l'utiliser comme modèle parent.
Définir parent_template_var dans votre contrôleur:
http://twig.sensiolabs.org/doc/tags/extends.html
Réponse de la la documentation officielle:
{% extends app.request.isXmlHttpRequest ? '::/ajax.html.twig' : '::/base-3col.html.twig' %}
. Je préfère juste de garder ce genre de test dans le Contrôleur de même dans un SuperController Classe prolongée par chaque Contrôleur.Vous ne pouvez pas s'étend à de multiples modèle, qui est pourquoi vous avez l'erreur, si vous voulez tellement, vous avez besoin de les pousser dans un tableau comme ci-dessous.
{% extends ['MyAppCustomBundle::Layout/layout.html.twig', 'FOSUserBundle::layout.html.twig'] %}
Mais vous aurez besoin d'utiliser Twig la version 1.2 de le faire.
la documentation de twig
Tout cela fait sens pour faire de ce modèle ou le modèle.
Mais permettez-moi de décrire une autre situation. Vous avez un formulaire de profil et une forme où les utilisateurs peuvent télécharger de profil personnel et les documents connexes. Depuis le formulaire de profil est déjà très long, les documents déplacé à une nouvelle forme.
Tout fonctionne très bien. Maintenant, nous voulons utiliser le bootstrap onglets de faire Profil | Documents pour la convivialité.
Maintenant je le sais parce que nous sommes à l'aide de séparer les deux formes si vous envoyez les documents les modifications sur le profil ne sauvera pas et vice versa.
J'ai ajouté le formulaire de document dans l'onglet à l'aide de
Le "viewOnly': true est un paramètre de requête et n'est pas tenu par l'action.
Ma question devient maintenant si le profil de l'onglet rend le modèle de document, il suffit de montrer le téléchargement du widget et le soumettre, où, comme lorsque vous allez directement à la page du document, il doit afficher le titre et la barre latérale et tout et tout. J'ai donc essayé
Qui a donné des problèmes parce que vous ne pouvez pas utiliser s'étend à l'intérieur d'un si. Comme vous l'avez suggéré dans d'autres réponses, essayez d'utiliser
Ce reolved Brindille à la question jusqu'à l'exécution du code lors de la viewOnly est faux.
Quand viewOnly est faux il doit s'étendre le modèle de base utilisé par tous les autres modèles, mais si c'est vrai je ne veux montrer:
Mais maintenant, avec haut
si viewOnly devient faux, il échoue avec le "Modèle" ne peut pas être trouvé.
Est-il un moyen de dire que s'étend ce modèle spécifique qui sera le même résultat de ne pas étendre n'importe quel modèle?
Ou sinon est-il une manière de dire étendre cette quand viewOnly vrai, mais rien ne se passe à l'échec?