2012-03-14 9 views
13

Me gusta 'form-theme' mi widget de fecha y hora en mi formulario. He creado un archivo fields.html.twig con esto en él:Formulario de tematización widget de fecha y hora Symfony 2

{% block datetime_widget %} 
{% spaceless %} 
    <div {{ block('widget_container_attributes') }}> 
     {{ '{{ day }}-{{ month }}-{{ year }}'|replace({ 
      '{{ day }}': form_widget(form.day), 
      '{{ month }}': form_widget(form.month), 
      '{{ year }}': form_widget(form.year), 
     })|raw }} 
     {{ form_widget(form.hour, { 'attr': { 'size': '1' } }) }} : {{ form_widget(form.minute, { 'attr': { 'size': '1' } }) }} : {{ form_widget(form.second, { 'attr': { 'size': '1' } }) }} 
    </div> 
{% endspaceless %} 
{% endblock datetime_widget %} 

He entrado en esta línea en mi forma de plantilla de vista

{% form_theme form 'AcmeDashboardBundle:Form:fields.html.twig' %} 

El widget de fecha y hora se rindió. Pero las partes de fecha y hora están en un elemento div separado. Que rompe el widget en 2 líneas. Me gustaría mostrar la parte de fecha y hora junto a la otra.

Respuesta

10

Para lograr esto debe volver a definir bien el datetime_widget sin necesidad de utilizar el construido en date_widget & time_widget (porque están envueltos cada uno con divs) o se puede redefinir el time_widget date_widget & para eliminar sus divs de envoltura.

continuación se explica cómo implementar la primera opción:

{% extends 'form_div_layout.html.twig' %} 

{% block datetime_widget %} 
{% spaceless %} 
    {% if widget == 'single_text' %}1 
     {{ block('field_widget') }} 
    {% else %} 
     <div {{ block('widget_container_attributes') }}> 
      {{ form_errors(form.date.year) }} 
      {{ form_errors(form.date.month) }} 
      {{ form_errors(form.date.day) }} 
      {{ form_errors(form.time) }} 
      {{ form_widget(form.date.year) }} 
      {{ form_widget(form.date.month) }} 
      {{ form_widget(form.date.day) }} 
     {{ form_widget(form.time.hour, { 'attr': { 'size': '1' } }) }}:{{ form_widget(form.time.minute, { 'attr': { 'size': '1' } }) }} 
     </div> 
    {% endif %} 
{% endspaceless %} 
{% endblock datetime_widget %} 

Y aquí es cómo poner en práctica la segunda opción:

{% extends 'form_div_layout.html.twig' %} 

{% block date_widget %} 
{% spaceless %} 
    {% if widget == 'single_text' %} 
     {{ block('field_widget') }} 
    {% else %} 
     {{ date_pattern|replace({ 
      '{{ year }}': form_widget(form.year), 
      '{{ month }}': form_widget(form.month), 
      '{{ day }}': form_widget(form.day), 
     })|raw }} 
    {% endif %} 
{% endspaceless %} 
{% endblock date_widget %} 

{% block time_widget %} 
{% spaceless %} 
    {% if widget == 'single_text' %} 
     {{ block('field_widget') }} 
    {% else %} 
     {{ form_widget(form.hour, { 'attr': { 'size': '1' } }) }}:{{ form_widget(form.minute, { 'attr': { 'size': '1' } }) }}{% if with_seconds %}:{{ form_widget(form.second, { 'attr': { 'size': '1' } }) }}{% endif %} 
    {% endif %} 
{% endspaceless %} 
{% endblock time_widget %} 

A continuación, la fecha & tiempo estarán juntos en la misma div. Obviamente, podría agregar algo de espacio entre la fecha y la hora agregando su html deseado

Espero que ayude!

+0

¡Gracias por la respuesta! Me dice que "Variable 'date_pattern' no existe" – mattyh88

+0

aha, sí, normalmente lo obtendría de la clase DateType de Symfony. Simplemente especifica el formato de la fecha, por lo que puede reemplazar la variable con '{{year}} - {{month}} - {{day}}', o reorganizar a su gusto – user1207727

+0

Recibo este error ahora: A hash la clave debe ir seguida de dos puntos (:). Token inesperado "puntuación" de valor "(" ("puntuación" esperada con valor ":") (he editado mi primera publicación) – mattyh88