跳转到主要内容

Plone的AJAX选择小部件

项目描述

简介

plone.formwidget.contenttree 是一个用于 Plone 的 z3c.form 小部件。它使用 jQuery 自动完成小部件,并为不支持 JavaScript 的浏览器提供了优雅的回退。

对于单选字段有一个单选版本(AutocompleteSelectionFieldWidget),对于具有值为 Choice 的集合字段(例如列表、元组)有一个多选版本(AutocompleteMultiSelectionFieldWidget)。

使用此小部件时,词汇/源必须从 z3c.formwidget.query 提供的 IQuerySource 接口,并具有一个 search() 方法。最简单的方法是使用以下之一生成一个:

  • plone.formwidget.contenttree.PathSourceBinder(navigation_tree_query=None, **kw)

  • plone.formwidget.contenttree.ObjPathSourceBinder(navigation_tree_query=None, **kw)

  • plone.formwidget.contenttree.UUIDSourceBinder(navigation_tree_query=None, **kw)

其中 navigation_tree_query 是应用于任何目录查询的限制。其余参数用于形成过滤器(参见 source.py)。

PathSourceBinderObjPathSourceBinder 将所选对象的路径存储在字段值中。这意味着如果对象被移动,链接将损坏。UUIDSourceBinder 存储UUID引用,因此可以处理页面移动。

如果您根本不想过滤内容树,也有一些预制的实例

  • plone.formwidget.contenttree.path_src_binder

  • plone.formwidget.contenttree.obj_path_src_binder

  • plone.formwidget.contenttree.uuid_src_binder

示例用法

from zope.component import adapter
from zope.interface import Interface
from zope.interface import implementer
from zope import schema
from plone.z3cform import layout
from z3c.form import form
from z3c.form import button
from z3c.form import field
from plone.formwidget.contenttree import ContentTreeFieldWidget
from plone.formwidget.contenttree import MultiContentTreeFieldWidget
from plone.formwidget.contenttree import PathSourceBinder


class ITestForm(Interface):

    buddy = schema.Choice(
        title=u"Buddy object",
        description=u"Select one, please",
        source=PathSourceBinder(portal_type='Document')
    )

    friends = schema.List(
        title=u"Friend objects",
        description=u"Select as many as you want",
        value_type=schema.Choice(
            title=u"Selection",
            source=PathSourceBinder(portal_type='Document')
        )
    )


@implementer(ITestForm)
@adapter(Interface)
class TestAdapter(object):

    def __init__(self, context):
        self.context = context

    def _get_buddy(self):
        return None

    def _set_buddy(self, value):
        print "setting", value

    buddy = property(_get_buddy, _set_buddy)

    def _get_friends(self):
        return []

    def _set_friends(self, value):
        print "setting", value

    friends = property(_get_friends, _set_friends)


class TestForm(form.Form):
    fields = field.Fields(ITestForm)
    fields['buddy'].widgetFactory = ContentTreeFieldWidget
    fields['friends'].widgetFactory = MultiContentTreeFieldWidget
    # To check display mode still works, uncomment this and hit refresh.
    #mode = 'display'

    @button.buttonAndHandler(u'Ok')
    def handle_ok(self, action):
        data, errors = self.extractData()
        print data, errors


TestView = layout.wrap_form(TestForm)

变更日志

1.2.0 (2020-01-27)

新功能

  • 添加了 Python 3 兼容性。[cekk]

1.1.0 (2018-03-07)

新功能

  • 添加了卸载配置文件。[thet]

1.0.16 (2018-01-17)

修复

  • 如果没有内容过滤器来限制内容列表,则在小部件加载时跳过从目录检索 brain 的所有索引数据。这在 isBrainSelectable 中显著加快了具有大型(SearchableText)索引的文件夹的列表速度。[fredvd, mauritsvanrees]

1.0.15 (2016-08-08)

错误修复

  • 使用 zope.interface 装饰器。[gforcada]

1.0.14 (2016-05-15)

修复

1.0.13 (2016-02-09)

新功能

  • 翻译已移动到 plone.app.locales 中的 plone 域。[staeff]

1.0.12 (2015-12-01)

  • 删除不必要的测试设置。[timo]

  • 修复浏览按钮标题中的 HTML 实体。[gaudenz]

  • 实现 PathSource 的 __len__。[gaudenz]

  • 添加缺少的测试依赖声明。[MatthewWilkes]

1.0.11 (2015-02-09)

  • 添加了对为内容树提供默认值的支持。之前这并不可靠,因为只有通过初始查询找到的默认值才会被渲染。现在 SourceBinders 可以接受可选的默认值或 defaultFactory 参数,其格式与 schema.Choice 相同。[MatthewWilkes]

1.0.10 (2015-01-16)

  • 将 CSS 作为链接渲染,而不是 css-import。这允许与其他链接渲染的 CSS 一起烹饪,并提供了更好的异步下载行为。[thet]

  • 添加了对在对象 ID 中包含空格的对象进行导航的支持。[MatthewWilkes]

1.0.9 (2014-10-25)

  • ContentTreeBase 上实现 renderForValue,以便使单值关系字段正常工作。[rnixx]

1.0.8 (2014-10-21)

  • 解决奇特的 Diazo 编码错误。[gyst]

1.0.7 (2013-06-30)

  • 添加了一些默认绑定实例,主要用于与 supermodel XML 架构一起使用。[lentinj]

  • 切换到 plone.app.testing。[saily]

  • 添加了 js 和 css 注册测试。[saily]

  • 在树生成中添加检查,如果已存在则不重复添加(重新打开contenttree窗口)。[phgross]

  • 不要排除导航中不允许的内容类型。[ebrehault]

  • 忽略缺失的值,内容对象可能会消失或源内容可能发生变化。[gaudenz]

1.0.6 (2012-09-28)

  • 调整CSS以使用轮廓而不是边框。[elro]

  • 避免使用主题化的ajax响应。[elro]

  • 确保上下文是某种类型的内容项。[elro]

  • 从zope.component导入getSite以避免对zope.app.component的依赖。[hvelarde]

  • 从zope.browserpage导入ViewPageTemplateFile以避免对zope.app.pagetemplate的依赖。[hvelarde]

  • 添加了法语翻译。[phgross]

  • 当与datagrid一起使用时触发更改处理程序。[kingel]

  • 使用ajax获取初始调用。[kingel]

  • 修复显示模板中的URL,使其使用绝对URL。[phgross]

  • pep8。[joka]

  • 修复术语标题生成,如果没有大脑标题则使用大脑ID。[joka]

  • 添加了意大利语翻译。[gborelli]

  • 添加了芬兰语(fi)翻译。[dokai]

  • 默认情况下过滤掉不可选择且非文件夹的节点。可以在小部件中通过设置show_all_nodes为True来覆盖此行为。[maurits]

  • 添加了荷兰语翻译。[maurits]

1.0.5 (2012-02-20)

  • 添加了西班牙语翻译。[hvelarde]

1.0.4 (2011-10-04)

  • 修复了fix _getBrainByValue,首先检查值是否可遍历,以便我们可以提供正确的令牌。[vangheem]

1.0.3 (2011-09-24)

  • 添加zh_CN翻译。[jianaijun]

1.0.2 (2011-07-02)

  • 修复了破坏了使用JQuery < 1.4进行浏览的回归。[davisagli]

1.0.1 (2011-05-16)

  • 为隐藏/缺失的项目添加占位符术语,以便您可以在编辑界面中看到一些内容,而不会意外删除它们。理想情况下,我们应该说明页面是否不可见或缺失,但今天不行。[lentinj]

  • 使用来自plone.formwidget.autocomplete的javascript函数添加新的输入框,尽可能使javascript在datagridfield创建新行时具有clone-safe功能。[lentinj]

  • 仅使用完整的widget名称在++widget++ URL中,不要尝试删除表单前缀。如果在子表单中,这是错误的做法,并且遍历器现在支持删除初始的‘form.widgets’。[lentinj]

  • 为未先绑定的源使用的工作区。[lentinj]

  • 在回退到getSite()之前检查请求上下文。[lentinj]

  • 添加一个UUIDSource,该Source存储指向内容的plone.uuid指针。[lentinj]

  • 使用令牌作为内容的完整URL,将所有token<->value操作移动到源中。重命名方法,以便实际上公共的方法具有公共名称。[lentinj]

  • 修改术语,使令牌是项的完整路径,值是存储在数据库中且不包含portal_url的路径。这意味着所有路径解析都可以在源内进行。[lentinj]

  • _filter现在在源外使用,因此不再是内部辅助函数。[lentinj]

1.0 (2011-04-30)

  • 通过加载来自Products.CMFCore的permissions.zcml(仅在plone.app.upgrade可用时,以保持与Plone 3的兼容性,如果目前有)来使它与Plone 4.1兼容。[maurits]

  • 改进了选定项的CSS,使其在Sunburst主题中更加明显。[davisagli]

  • 将内容类型CSS类添加到navtree中的项,以便在Plone 4中显示图标。[davisagli]

1.0b3 (2011-02-11)

  • 使用zope.i18n.translate而不是translation_service,因为translation_service在plone4中被移除。[jbaumann]

1.0b2 (2010-08-25)

  • 如果上下文未包裹在获取链中,则回退到站点执行与内容相关的操作。[dukebody]

  • 将视图名称计算为请求URL左边的content绝对URL。[dukebody]

  • 将字段限制为路径下的对象。ObjPathSource的构造函数接受一个具有PathIndex目录查询的path关键字参数。此参数过滤了此路径外的对象。如果navigation_tree_query没有path参数,则路径也会复制到此查询中。[gaudenzius]

  • 在内容树-fetch浏览器视图中更新小部件。widget.update()调用重新绑定到源,之前只在遍历时绑定。这避免了与只在安全应用后才工作的源相关的问题。[gaudenzius]

1.0b1 - 2010-04-19

  • 调整样式,使小部件与Plone 4的sunburst主题看起来合理。[davisagli]

  • 修复CMF 2.2中的图标。这解决了http://code.google.com/p/dexterity/issues/detail?id=111。[davisagli]

  • 使小部件在Zope 2.12上正常工作。[optilude]

  • 为HIDDEN_MODE添加模板。[csenger]

  • 使用站点编码将新导航树节点中的所有字符串转换为unicode,以在组件中渲染非ASCII字符。[csenger]

  • 为翻译添加消息ID,并添加了包含德语翻译的本地化目录。[jbaumann]

1.0a5 - 2009-08-02

  • 不要过滤不可查询父类型的子项(例如,大型Plone文件夹)。[optilude]

1.0a3 - 2009-07-12

  • 应用Gerhard Weis的补丁,使相册与CSS z-index更好地协同工作。[optilude]

1.0a3 - 2009-06-29

  • 修复安全验证器,使其在添加视图和其他使用命名空间遍历的视图中正常工作(++add++…)[optilude]

1.0a2 - 2009-06-28

  • 修复显示小部件。[optilude]

  • 有条件地导入SitemapNavtreeStrategy,以免在Plone trunk上中断。[davisagli]

1.0a1 - 2009-04-17

  • 首次发布

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

plone.formwidget.contenttree-1.2.0.tar.gz (31.6 kB 查看哈希值)

上传时间:

构建分布

plone.formwidget.contenttree-1.2.0-py2.py3-none-any.whl (31.2 kB 查看哈希值)

上传时间: Python 2 Python 3

由以下支持