2012-03-14 19 views
13

我喜歡'form-theme'我的日期時間部件在我的窗體中。 我已創建了這個fields.html.twig文件吧:形式主題日期時間部件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 %} 

我進入這一行我的表單視圖模板

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

日期時間控件被渲染。但日期和時間部分位於單獨的div元素中。它打破了2行中的小部件。我想顯示彼此相鄰的日期和時間部分。

回答

10

要做到這一點,你必須重新定義要麼datetime_widget不使用內置的date_widget & time_widget(因爲他們每個包裹的div),也可以重新定義date_widget & time_widget刪除其包裝中的div。

這裏是如何執行的第一個選項:

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

下面是如何實現第二個選項:

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

然後日期&時間將是在同一個DIV。顯然你可以在日期和時間之間添加一些空格,只需添加你想要的html

希望有幫助!

+0

Thx回覆!它告訴我「變量'date_pattern'不存在」 – mattyh88 2012-03-14 21:12:22

+0

aha,是的,它通常會從symfony的DateType類中獲得。它只是指定日期的格式,所以你可以用'{{year}} - {{month}} - {{day}}'替換變量,或者按照你的意願重新排列 – user1207727 2012-03-14 21:21:27

+0

現在我得到這個錯誤:散列鍵後面必須跟冒號(:)。意外的標記「標點符號」的值「(」(「(標點符號」預計值爲「:」)(我編輯了我的第一篇文章) – mattyh88 2012-03-14 21:40:55