Изменить метод ввода в формах событий plone?

#plone #archetypes

#plone #архетипы

Вопрос:

Я пытаюсь выполнить одно из следующих действий в форме «Создать событие» в Plone 4 при создании событий, которые произошли в прошлом:

i. Установите даты начала / окончания по умолчанию в раскрывающихся списках «Дата начала» и «Дата окончания» на больший диапазон значений (я не могу создавать события до 2001 или после 2016).

или

ii. Разрешить пользователям вводить даты начала / окончания событий в виде текста (а не выбирать из выпадающего списка).

Кажется, я нигде не могу найти то, что управляет этой формой … после нескольких часов поиска в Google!

Ответ №1:

Поля start и end являются стандартными полями Archetypes DateTimeField, использующими виджеты CalendarWidget по умолчанию.

CalendarWidget повторно использует некоторые довольно старые и грубые календарные макросы из Plone, и они считывают диапазон выбираемых лет из свойств сайта. Вы можете изменить их в ZMI, найдите в нем portal_properties инструмент, а затем site_properties таблицу свойств. Два свойства, на которые следует обратить внимание, это:

calendar_starting_year

Начальный год для отображения в виджете календаря. По умолчанию используется значение 2001.

calendar_future_years_available

Количество будущих лет после текущего года, которое будет отображаться в виджете календаря. Значение по умолчанию пустое, и затем виджет возвращается к 5 годам.

Также смотрите документацию по свойствам сайта; вы также можете использовать профиль GenericSetup для их настройки.

Эти значения применимы ко всему использованию макросов календаря. Вы также можете установить это только для типа события, установив starting_year , ending_year и / или future_years свойства CalendarWidget для полей StartDate и EndDate. Если вы установите ending_year , future_years свойство игнорируется.

Изменение стиля Monkey-patch схемы событий:

 from Products.Archetypes.content import event

ATEventSchema['startDate'].widget.starting_year = 1999
ATEventSchema['startDate'].widget.ending_year = 2020
ATEventSchema['endDate'].widget.starting_year = 1999
ATEventSchema['endDate'].widget.ending_year = 2020
  

Комментарии:

1. Это было именно то, что было необходимо. Я отредактировал файл site_properties и получил требуемый результат. Большое спасибо!

Ответ №2:

Если starting_year и ending_year не определены на уровне определения calendarwidget (внутри определения реализации схемы ATEvent), то некоторые предположения о диапазоне лет сделаны внутри

Products/CMFPlone/skins/plone_scripts/date_components_support.py

Измените связанный код внутри date_components_support.py скрипт.