Форма тематического виджета даты и времени Symfony 2 - PullRequest
13 голосов
/ 14 марта 2012

Мне нравится '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.Который разбивает виджет в 2 строки.Я хотел бы отобразить дату и время рядом друг с другом.

1 Ответ

10 голосов
/ 15 марта 2012

Чтобы достичь этого, вы должны переопределить либо 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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...