为Dexterity RichWidget定制TinyMCE

时间:2014-11-24 17:13:49

标签: plone dexterity

我正在使用灵巧创建一些自定义内容类型。我想"定制" RichText字段的方面只允许在此字段上使用TinyMce的基本按钮。

在Archetypes中,我可以使用

TextField('text',
allowable_content_types=('text/html',),
default_output_type='text/x-html-safe',
required=1,
widget=RichWidget
(label='Content',
    allow_buttons=(
    'bold',
    'italic',
    'justifyleft',
    'justifyright',
    ),
),),

我如何使用基于Dexerity的内容类型进行此操作?

1 个答案:

答案 0 :(得分:1)

似乎没有"很好"现在就这样做的方法。即使是Plone文档目前也处于亏损状态。 http://docs.plone.org/develop/plone/forms/wysiwyg.html#id9

问题在于Products.TinyMCE试图从Field的widget属性中获取WYSIWYG配置。

https://github.com/plone/Products.TinyMCE/blob/1.3.6/Products/TinyMCE/utility.py#L711-L713

# Get widget attributes
widget = getattr(field, 'widget', None)
filter_buttons = getattr(widget, 'filter_buttons', None)
allow_buttons = getattr(widget, 'allow_buttons', None)

但是,据我所知,使用Dexterity,我们将字段映射到表单对象上的小部件。

from plone.autoform import directives as form
from plone.app.z3cform.wysiwyg import WysiwygFieldWidget

class IExample(model.schema):
    form.widget('body', WysiwygFieldWidget)
    body = schema.Text(title=u"Body")

因此,我们的body字段没有Products.TinyMCE可以从中提取配置的widget属性。

无论如何,如果你现在需要它,我可以通过以下方式破解它:

在ZMI中,自定义portal_skins / tinymce / tinymce_wysiwyg_support,将行field field|nothing更改为field field|view/field|nothing

以架构驱动的方式定义您的内容类型,并为您的WYSIWYG字段执行以下操作:

class mywidg(object):
    allow_buttons = ('bold',
                     'italic',
                     'justifyright',
                     'justifyleft',)

class IExample(model.schema):
    form.widget('body', WysiwygFieldWidget)
    body = schema.Text(title=u"Body")
    body.widget = mywidg()