如何在Plone控制面板中覆盖小部件

时间:2013-06-08 17:26:54

标签: plone zope linguaplone

LinguaPlone使用MultiSelect小部件选择多种语言。像InOut小部件甚至MultiCheckBox小部件之类的东西将是更好的用户界面,因为很难从长列表中看到所有选定的语言。

我试图使用:

覆盖FormFields
form_fields['available_languages'].custom_widget = MultiCheckBoxWidget

正如zope.formlib文档中所建议的那样,但我得到的回溯如下:

Traceback (innermost last):
  Module ZPublisher.Publish, line 128, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module zope.formlib.form, line 795, in __call__
  Module five.formlib.formbase, line 50, in update
  Module zope.formlib.form, line 758, in update
  Module plone.fieldsets.form, line 30, in setUpWidgets
  Module zope.formlib.form, line 402, in setUpEditWidgets
  Module zope.formlib.form, line 334, in _createWidget
TypeError: __init__() takes exactly 4 arguments (3 given)

如何覆盖默认小部件?

1 个答案:

答案 0 :(得分:0)

您需要的是:

from zope.formlib.widgets import OrderedMultiSelectWidget
from Products.LinguaPlone.browser.controlpanel import LanguageControlPanel

def MyMultiCheckBoxWidget(field, request):
    return OrderedMultiSelectWidget(field, field.value_type.vocabulary, request)


LanguageControlPanel.form_fields["available_languages"].custom_widget = MyMultiCheckBoxWidget