用于在Plone中搜索/选择门户对象的查找器
项目描述
Ajax弹出窗口用于浏览和选择Plone内容,适用于任何plone.formilb表单(部件、控制面板等)
此代码是从用于参考代理的PloneArticle浏览器中提取并进行了重构的。
目的是使其在各种情况下都可用
在基于plone.formlib的Plone表单(例如部件或控制面板表单)中存储所选内容
对于collective.ckeditor或任何可能的wysiwyg编辑器,用于在富文本字段中引用图片或内容,使用此产品也可以上传文件/图片并创建文件夹(依赖于collective.quickupload)
用于AT编辑表单中的可引用字段(未来)
用于链接字段(如ATLink中的remoteUrl)以引用内部链接(未来)
这项工作始于2007年Ingeniweb,由Christophe Bosse(jQuery代码)和Jean-Mat Grimaldi(其他所有内容)为PloneArticle产品启动。
要求
Plone(已测试与Plone 3.3.5和Plone 4兼容)
collective.quickupload
安装
如果您已安装collective.ckeditor(仅限Plone 4),则无需操作
否则,使用buildout将Zope包安装为常规Zope包
在您的eggs部分添加collective.plonefinder
如果您的Plone版本为3.0或3.1,请在plone.recipe.zope2instance部分定义的zcml部分添加collective.plonefinder
运行bin/buildout
无需其他操作。
如何在formlib表单中将它用作参考小部件
基本用法
此产品提供了一个用于zope3表单(zope.app.form)的参考小部件。
可以使用这个小部件在序列字段中存储对象引用。
在名为target_contents的元组字段中用作部件的示例
from collective.plonefinder.widgets.referencewidget import FinderSelectWidget target_contents = schema.Tuple(title=u"Browse for contents", description=(u"Choose contents to display " u"with a plone finder window."), default=() ) form_fields['target_contents'].custom_widget = FinderSelectWidget
调整一些属性
您可以使用FinderSelectWidget,并在您的AddForm或EditForm中使用update方法设置一些属性。以下是一个用于部件AddForm的示例
class AddForm(base.AddForm): """Portlet add form. """ form_fields = form.Fields(IReferencesPortlet) form_fields['targets'].custom_widget = FinderSelectWidget label = u"Add References Portlet" def update(self): super(AddForm, self).update() self.widgets['targets'].typeview = 'image' self.widgets['targets'].forcecloseoninsert = 1 def create(self, data): return Assignment(**data)
如果您愿意,您还可以传递一个上下文作为小部件的基,以便在查找器中打开当前或父文件夹。以下是一个使用update方法的示例
assignment = aq_parent(aq_inner(self.context)) self.widgets['targets'].base = aq_parent(aq_inner(assignment))
还有两个针对文件和图片的定制小部件。查看代码以创建您自己的特定小部件。
支持文件上传的文件引用示例代码
from collective.plonefinder.widgets.referencewidget import FinderSelectFileWidget target_files = schema.Tuple(title=u"Browse for images", description=(u"Choose files to display " u"with a plone finder window. " u"You can upload new files."), default=() ) form_fields['target_files'].custom_widget = FinderSelectFileWidget
支持图片上传的图片引用示例代码
from collective.plonefinder.widgets.referencewidget import FinderSelectImageWidget target_images = schema.Tuple (title=u"Browse for images", description=(u"Choose images to display " u"with a plone finder window. " u"You can select different image sizes. " u"You can upload new images."), default= () ) form_fields['target_images'].custom_widget = FinderSelectImageWidget
注意,在最后一种情况下,数据存储图像uid和图像缩略图大小如下
'%s/%s' % (image.UID(), thumb_size_extension)
thumb_size_extension可以是'image_thumb'或'image_preview'…
因此,使用以下内容显示引用的图片
uid, variant = data.split('/') '<img src="%s/resolveuid/%s/%s" />' % (portal_url, uid, variant)
自定义属性完整列表
属性 |
默认值 |
描述 |
---|---|---|
finderlabel |
_(u'Browse for contents') |
自定义浏览器窗口的标题。例如,“查找图片” |
moveuplabel |
_(u'Move up') |
与向上箭头小部件关联的标签,用于提高引用的顺序。例如,“提高优先级”。 |
movedownlabel |
_(u'Move down') |
与向下箭头小部件关联的标签,用于降低引用的顺序。例如,“降低优先级”。 |
deleteentrylabel |
_(u'Remove item') |
与“从列表中移除”小部件关联的标签。例如:"移除此视频"。 |
类型 |
() # 所有类型 |
要在选择面板中显示的可选门户类型列表。例如:['文档'] |
typeview |
'file' |
可能的值有 'file'、'image' 和 'selection'。调整选择面板布局。 |
imagetypes |
('图片', '新闻条目') |
可以处理图片的门户类型序列(见 待办事项) |
selectiontype |
'uid' |
选定的项目作为 UIDs 返回到应用程序(表单)。其他可能的值是 'url'。 |
showsearchbox |
True |
是否显示搜索框? |
allowupload |
False |
如果用户有适当的权限,我们是否通过我们的小部件启用上传文件?见 在自定义文件夹类型中上传 |
openuploadwidgetdefault |
False |
我们是否默认显示上传小部件? |
allowaddfolder |
False |
如果用户有适当的权限,我们是否通过我们的小部件启用添加新文件夹? |
allowimagesizeselection |
False |
如果图片有多个大小,我们是否启用选择特定大小?(见上面注释) |
forcecloseoninsert |
False |
当我们选择一个元素时,我们是否关闭查找器? |
base |
None |
在打开查找器时用作查找器根的文件夹对象。None 表示 Plone 站点。注意由于本质原因,此属性不能静态设置,例如在 FinderSelectWidget 个人子类中,其他可以设置。请参阅简单自定义示例中的示例,了解如何从表单类代码动态更改小部件 base 属性。 |
开发者指南
如何在 WYSIWYG 编辑器中使用它
更简单的方法是创建一个特定的视图,因为您通常需要覆盖选择对象的 JavaScript 方法,因为每个编辑器都与浏览器有特定的协商。
请参阅 collective.ckeditor 包作为示例。
在自定义文件夹类型中上传
如果您希望让 plone 查找器用户在您的自定义或第三方文件夹类型中上传文件,您需要使用 IFinderUploadCapable 标记接口标记这些类型。如下面的自述 ZCML 示例所示
<class class="my.content.folderish.MyFolderish"> <implements interface="collective.plonefinder.browser.interfaces.IFinderUploadCapable" /> </class>
默认情况下,collective.plonefinder 允许在 Plone 站点本身以及 ATFolder 和 ATBTreeFolder 中上传。
待办事项
功能文档测试
i18n 支持
查找器改进
Ajax 打开/移动/调整大小以及同一浏览器窗口内的所有窗口效果(进行中,需要一些 JavaScript 重构)
改进上下文操作菜单(更改工作流状态、重命名、删除、复制、粘贴…)
在查找器菜单中添加一个动作来显示/隐藏右侧面板中的当前选择列表
从查找器窗口中删除项目
改进 zope3 引用小部件属性
添加选项以隐藏/显示或仅标记查找器浏览结果中的选定项(只需将查找器黑名单存储在会话中即可)
添加选项以设置存储在会话中的特定编目查询
添加选项以更改查找器编目。
新的 zope3 小部件用于存储 URL(用于字符串字段)
Archetypes 支持
ATPloneFinderWidget 用于引用字段(不是很大的挑战,只需使用 ATReferenceBrowserWidget 作为基础开始工作即可)
ATLinkWidget 用于存储内部链接
Dexterity 支持(z3c.form)
补充 types 和 imagetypes 属性,以提供其他未使用接口的更好灵活性。
作为参数提供工厂,该工厂提供所需格式的结果。例如,您需要目标或某些计算值的具体属性。
将代码组件化以提高灵活性。
欢迎任何贡献,请联系 support@ingeniweb.com。
代码仓库
支持
有关问题和评论请联系 support@ingeniweb.com
变更日志
1.3.1 (2018-03-26)
修复缩略图大小选择:现在正确设置了完整大小图像。[bsuttor]
1.3.0 (2017-10-02)
使用 plone.api 而不是 IDirectoryFactory 创建文件夹,这防止了 dexterity 创建文件夹错误。新增依赖:plone.api。[bsuttor]
1.2.3 (2017-01-10)
FinderImageWidget:启用快速上传。[gotcha]
1.2.2 (2016-08-15)
FinderImageWidget:存储选择器而不是绝对 URL。[gotcha]
1.2.1 (2016-07-25)
添加缺失的分号以避免在 prod 模式下 portal_javascript 时出现 JS 问题。[gotcha]
添加检查值是否为 None(当添加图像后删除图像时)。[spereverde]
对 FinderImageWidget 中的 HTML 进行了一些重构以使其更清晰。[gotcha]
1.2.0 (2016-07-08)
添加 formlib FinderImageWidget;使用
# in interface class picture = schema.TextLine(title=_(u'Picture'), description=_(u'Optional picture'), required=False) # in form class form_fields['picture'].custom_widget = FinderImageWidget
[gotcha]
1.1.4 (2016-03-30)
修复在 finder 的查询表单序列化中带有特殊字符的 bug。[pgrunewald]
1.1.3 (2016-03-24)
添加 openuploadwidgetdefault 选项,以便能够指定是否希望在默认情况下打开上传小部件,而无需单击“文件快速上传”按钮。[gbastien]
1.1.2 (2016-03-15)
添加 showsearchbox 选项,以便能够轻松显示/隐藏搜索框。[gbastien]
1.1.1 (2016-02-23)
重新应用 1.0.2 中的修复,这些修复可能在迁移到 github 中丢失。[gotcha]
1.1.0 (2016-02-16)
使用获取图像的新方法。调用 /@@images/image/preview 而不是 /image_preview。[bsuttor]
通过 IFinderUploadCapable 添加 plone.app.contenttypes.content.Folder 的实现。[bsuttor]
为 plone.app.contenttypes 图像提供基本支持。[kiorky]
1.0.7 (2014-09-15)
修复:使用 ckeditor 时,新闻条目的链接不再链接到其图像。1.0.4 中的修复在 1.0.5 中丢失。[gotcha]
1.0.6 (2014-03-05)
修复错误的引号测试。[bsuttor]
1.0.5 (2014-03-05)
修复创建对象时的作用域容器。容器是第一个非 portal_factory 对象。[bsuttor]
大量代码简化(尚未完成,grep for “FIXME:”)。[glenfant]
在 README 中添加更多文档(解释所有相关用法)。[glenfant]
所有可能的文件中的 SVN 标记。[glenfant]
大量优化(尚未完成,grep for “FIXME:”)。[glenfant]
在代码中注释了晦涩的功能。[glenfant]
修复 image 字段为 reference 类型的场景。[toutpt]
1.0.4 (2013-09-09)
修复:使用 ckeditor 时,新闻条目的链接不再链接到其图像。[gotcha]
1.0.3 (2013-06-12)
与 Plone 4.3 的兼容性。[toutpt]
1.0.2 (2011-08-19)
始终在导航列中显示完整站点结构。[spereverde, yulka, gotcha]
在面包屑导航中,避免链接到用户没有查看权限的文件夹。[spereverde, yulka, gotcha]
1.0.1
CSS IE7 修复 macadames - 2010/09/22
finder.pt:模板修复缺少 doctype macadames - 2010/09/22
finder.pt:从 html 标签中删除 lang 属性 - 我们不需要它,并且在 Plone3 / Plone4 之间难以维护 macadames - 2010/09/26
1.0.0
使用 Plone 快速上传作为上传工具 - 新增依赖 collective.quickupload macadames - 2010/09
1.0.0-b2
修复在使用 FinderSelectWidget 编辑表单时发生的未授权错误,当用户没有权限访问某些引用内容时。在这种情况下,对象不会被从列表中删除,而是显示对象标题的消息:“%s : %s” % (_(u“您没有权限访问此对象”)),uid)
添加:当 self.multiselect = False 或 self.forcecloseonsinsert = False 时关闭窗口
修复当标题中有引号时的 selectItem
添加了用于打开文件夹的引用小部件的 base 属性。
在参考小部件中使用Unicode字符表示上下箭头。
允许通过请求和参考小部件更改图像类型。
为Plone3内容类型图标添加了生成的CSS。
在浏览器中添加了新属性self.filestypes。
在查找器中为文件类型添加了MIME类型图标。
FinderSelectWidget:当找不到对象时不再引发错误,而是用消息替换标题(UID不存在的对象)。
修复了allowupload的回归问题(从未允许)macadames - 2010/07/21
修复了使用请求或self.browse = False启用/禁用浏览的问题 macadames - 2010/07/22
当浏览被禁用时,不要在另一个路径上搜索 macadames - 2010/07/22
使用jQuery.uploadify添加了多个上传的标题字段 macadames - 2010/07/24
当可能时,使用cookie进行闪存上传的认证(与collective.uploadify相同的方法),否则使用票据(PloneFlashUpload方法)macadames - 2010/07/28
使用标准archetypes方法“invokeFactory”,通过上传的文件创建新对象,以遵守完整的Plone createObject过程。macadames - 2010/07/28
在请求中添加了新的mediaupload键,用于设置上传的内容类型(与jQuery.uploadify非常实用)macadames - 2010/07/28
改进了jQuery.uploadify的过程,增加了错误处理macadames - 2010/07/29
添加了新的CSS类required,用于在Plone4上显示图标(icons-on)macadames - 2010/07/31
修复了Plone4上的上传按钮样式 macadames - 2010/07/31
修复了Plone3或Plone4 +经典主题的一些CSS样式 macadames - 2010/07/31
设计改进 macadames - 2010/07/31
法语翻译正在进行中 macadames - 2010/07/31
使用InavigationRoot作为查找器根,不再使用IPloneSiteRot macadames - 2010/08/01
设计改进,蓝色是新的颜色 macadames - 2010/08/01
添加了新的视图属性root和rootpath,用于更改浏览器根 macadames - 2010/08/02
添加了真正的左侧导航树 macadames - 2010/08/02
将属性视图中的持久化对象替换为数据字典,即self.data['root']而不是self.root macadames - 2010/08/04
当作用域是主题时,使用topic queryCatalog macadames - 2010/08/04
添加了对z3c.autoinclude的支持 macadames - 2010/08/20
1.0.0-b
在查找器中显示的图像大小来自门户属性图像属性,如果存在的话
选择图像大小:添加了上下文菜单
许多IE修复和外观更改
Plone4图标样式也在Plone3下使用
为zope3表单添加了参考对象小部件(可用于部件中)
1.0.0-a
初始发布