2012-03-14 11 views
13

Lubię "formularz-motyw" mój datetime widget w mojej formie. Stworzyłem plik fields.html.twig Mając to na niej:Formowanie widgetu datetime 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 %} 

mam wpisany ten wiersz w moim widoku Formularz szablonu

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

Widget datetime zostanie wygenerowana. Ale części daty i czasu są w oddzielnym elemencie div. Który rozkłada widżet w 2 liniach. Chciałbym wyświetlić część daty i czasu obok siebie.

Odpowiedz

10

Do tego trzeba przedefiniować albo na datetime_widget osiągnąć bez użycia wbudowanego w date_widget & time_widget (bo każdy owinięty div) lub można przedefiniować date_widget & time_widget usunąć swoje div owijania.

Oto jak zaimplementować pierwszą opcję:

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

A oto jak wdrożyć drugą opcję:

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

Następnie & czas data będzie razem w tym samym div. Oczywiście można dodać trochę miejsca między datą i godziną, dodając pożądany html

Nadzieję, że pomaga!

+0

Thx za odpowiedź! Mówi mi, że "Zmienna" data_pattern "nie istnieje" – mattyh88

+0

aha, tak, normalnie otrzymalibyśmy to z klasy DateType symfony. Określa format daty, więc możesz zamienić zmienną na "{{year}} - {{month}} - {{day}}" lub przestawić ją tak, jak lubisz – user1207727

+0

Otrzymuję ten błąd teraz: A hash po kluczu musi następować dwukropek (:). Nieoczekiwany token "interpunkcja" wartości "(" ("interpunkcja" oczekiwana wartością ":") (redagowałem mój pierwszy wpis) – mattyh88