形成主题日期时间小部件Symfony 2

时间:2012-03-14 19:04:29

标签: symfony twig

我喜欢在表单中使用'form-theme'我的日期时间小部件。 我在其中创建了一个fields.html.twig文件:

{% 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元素中。这打破了两行中的小部件。我想显示彼此相邻的日期和时间部分。

1 个答案:

答案 0 :(得分:10)

要实现这一目标,您必须重新定义datetime_widget,而不使用内置的date_widget&amp; time_widget(因为它们都包含div)或者你可以重新定义date_widget&amp; 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 %}

然后是日期&amp;时间将在同一个div中。显然,您可以通过添加所需的html

在日期和时间之间添加一些空格

希望有所帮助!

相关问题