Puedo usar Symfony 2 con la Ramita y mi pregunta es bastante sencilla:

En una vista quiero extender uno de los diseños basados en una variable. Si la variable es false quiero extender UdoWebsiteBundle::layout.html.twig y si es true quiero extender UdoWebsiteBundle::layout_true.html.twig.

Aquí está el código que he probado:

{% block layout_extender %}

    {% if intro == 'false' %}
        {% extends 'UdoWebsiteBundle::layout.html.twig' %}
    {% else %}
        {% extends 'UdoWebsiteBundle::layout_true.html.twig' %}
    {% endif %}

{% endblock %}

Me sale este error:

Múltiples extiende etiquetas están prohibidas en «UdoWebsiteBundle:hogar:el hogar.html.rama» en la línea 7

¿Hay alguna otra manera de lograr esto?

InformationsquelleAutor Dan Cearnau | 2011-10-22

5 Comentarios

  1. 16

    Para mantenerlo limpio debe utilizar la Ramita de la dinámica de la herencia de apoyo mediante el uso de una variable, definido en el controlador, como la base de la plantilla:

    {% extends parent_template_var %}

    Si la variable se evalúa a un Twig_Template objeto, la Ramita va a utilizar como el padre de la plantilla.

    Definir parent_template_var en el controlador:

    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

  2. 6

    Respuesta de la la documentación oficial:

    Condicional Herencia

    Como el nombre de la plantilla para que el padre pueda ser válida la Ramita de la expresión, es posible hacer que el mecanismo de herencia condicional:

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

    En este ejemplo, la plantilla se extenderá la «minimum.html» plantilla de diseño si la variable independiente evalúa a true, y «base.html» de lo contrario.

    • Tienes razón también funciona, de esta manera usted también puede ampliar la plantilla diferente en función de si es una petición ajax o no, por ejemplo. {% extends app.request.isXmlHttpRequest ? '::/ajax.html.twig' : '::/base-3col.html.twig' %} . Yo prefiero mantener este tipo de prueba en el Controlador en un SuperController Clase extendida por cada Controlador.
  3. 2

    No se extiende a múltiples plantilla, por eso tienes el error, si lo desea así, usted necesita para empujar en una matriz como la siguiente.

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

    Pero usted tendrá que utilizar la Ramita de la versión 1.2 a hacerlo.
    la ramita de la documentación

  4. 2

    Todo esto tiene sentido hacer esta plantilla o plantilla.

    Pero permítanme describir de otra situación. Tiene un perfil y un formulario donde los usuarios pueden cargar perfil personal de documentos relacionados. Desde el formulario de perfil ya es muy largo los documentos se trasladó a una nueva forma.

    Todo funciona de maravilla. Ahora queremos usar el bootstrap fichas de perfiles | Documentos para la facilidad de uso.

    Ahora sé porque estamos usando dos formas separadas si usted presentar los documentos que los cambios en el perfil no va a salvar y viceversa.

    He añadido el documento de formulario en la pestaña de uso de

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

    El ‘viewOnly’: true es un parámetro de consulta, y no está obligado por la acción.

    Mi pregunta ahora es si la ficha de perfil hace que la plantilla de documento sólo debe mostrar al cargar widget y enviar en donde como cuando usted va directamente a la página del documento debe mostrar el título y la barra lateral, y todo. Entonces traté de

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

    Que dio problemas porque no se puede usar se extiende dentro de un si. Como se sugirió en otras respuestas trate de usar

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

    Este reolved la Ramita de la cuestión hasta la ejecución del código cuando viewOnly es falso.

    Cuando viewOnly es falso debe ampliar la base de la plantilla utilizada por el resto de las plantillas, pero si es verdad, solo quiero mostrar esto:

    {{ 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) }}

    Pero ahora con la parte superior

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

    si viewOnly se convierte en falso se produce un error con la Plantilla «» no se puede encontrar.

    Hay una manera de decir que se extiende de este plantilla específica que será el resultado mismo de la no ampliación de la plantilla?

    O, alternativamente, hay una manera de decir extender este cuando viewOnly cierto, pero no ocurre nada en el fracaso?

Dejar respuesta

Please enter your comment!
Please enter your name here