2014-11-24 49 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