2014-11-24 53 views
4

我使用灵巧创建了一些自定义内容类型。我想“定制”RichText字段的方面,只允许在该字段上使用TinyMce的基本按钮。为灵巧RichWidget自定义TinyMCE

在原型,我可以用

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 CONTENTTYPES?

+0

我想这将有可能只是隐藏/禁用不需要的按钮与一些JavaScript客户方,因为按钮标有包含字段名称的ID。但我不太确定什么是实现这个目标的好方法,在哪里做,等等。 - 任何人对这种方法有任何想法? – sunew 2015-05-03 23:54:21

回答

1

现在似乎没有一种“好”的方法来做到这一点。即使是Plone文档目前也处于亏损状态。 http://docs.plone.org/develop/plone/forms/wysiwyg.html#id9

问题出在Products.TinyMCE试图从字段的widget属性中获取所见即所得配置。

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) 

不过,据我所知,有敏捷我们,而不是映射到表单对象部件领域。

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") 

因此,我们的身体领域没有Products.TinyMCE可以提取配置的小部件属性。

无论如何,如果你需要它现在的工作,我能够做破解了下列文件:

在你的ZMI,定制portal_skins中/ TinyMCE的/ tinymce_wysiwyg_support到行field field|nothing改为field field|view/field|nothing

定义在一个模式驱动的方式您的内容类型,并为您的所见即所得现场执行以下操作:

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() 
+0

看起来很有希望。好奇维托的反馈。如果它有效,肯定会得到满意的结果。 – 2014-11-27 06:34:59

+0

这是个好主意。我会在明天或下周一测试它。感谢了很多 – Vito 2014-11-28 21:34:16

+0

我今天注意到,我对wysiwyg_support的更改在原型上打破了TinyMCE。我将更改移至tinymce_wysiwyg_support宏,并且事情似乎按预期工作。 – Travv15 2014-12-04 17:05:14