ftw.meeting 是一個 Archetypes 模組,功能跟 Event 類似,不過設計成 folderish 因此可以包含 Meeting Item,搭配 ftw.pdfgenerator 還可以匯出 PDF 檔案。
安裝時的相依模組,主要包括 Products.DataGridField、ftw.calendarwidget。
它使用 ftw.calendarwidget 作為月曆輸入介面,特色是整合了 jQuery UI calendar widget。
在 Event type 欄位選擇 Meeting 項目的話,會在下方即時展開 Meeting form 等四個欄位,它們都指定為 schemata='meeting'。
DataGridField 用於動態新增與會名單,不過實際用到的程式碼有新增 select all 功能,細節可參考 content/widget.py 檔案的 DataGridWidgetExtended 類別內容。
網站新增會員帳號後,就可以成為與會人員的選項。
程式碼範例片段如下:
atapi.StringField( name='meeting_type', searchable=False, schemata='default', required=True, default='event', vocabulary_factory='ftw.meeting.types', widget=atapi.SelectionWidget( label=_(u"meeting_label_type", default=u"Event type"), description=_(u"meeting_help_type", default=u"Choose your event type."), helper_js=['meeting_toggle_date.js', ], format='radio')), DataGridField( name='responsibility', searchable=False, schemata='default', columns=('contact', ), allow_empty_rows=False, widget=DataGridWidgetExtended( label=_(u"meeting_label_responsibility", default=u"Responsibility"), description=_( u"meeting_help_responsibility", default=u"Enter the responsible of the meeting."), auto_insert=True, select_all_column='contact', columns={ 'contact': SelectColumn( title=_( u"meeting_label_responsibility", default="Responsibility"), vocabulary='getAttendeesVocabulary' ), })), DataGridField( name='attendees', searchable=True, schemata='meeting', columns=('contact', 'present'), allow_empty_rows=False, widget=DataGridWidgetExtended( label=_(u"meeting_label_attendees", default=u"Attendees"), description=_(u"meeting_help_attendees", default=u"Enter the attendees of the meeting."), auto_insert=True, select_all_column='contact', columns={ 'contact': SelectColumn( title=_( u"meeting_label_attendees_attendee", default=u"Attendee"), vocabulary='getAttendeesVocabulary' ), 'present': SelectColumn( title=_( u"meeting_label_attendees_present", default=u"Present"), vocabulary='getPresentOptions', ), })),
ZODB 裡的儲存範例如下:
>>> app.mysite['my-meeting'].responsibility ({'contact': 'ababy'}, {'contact': 'jsmith'}) >>> app.mysite['my-meeting'].attendees ({'contact': 'ababy', 'present': 'present'}, {'contact': 'jsmith', 'present': 'excused'})
在顯示上,實作了 Drag and Drop Order 功能,可以即時拖拉來決定 Meeting Item 的順序,它會更新 getObjPositionInParent 的索引值。
點選各別的 Meeting Item 則會展開更多欄位資訊。
No comments:
Post a Comment