跳转到主要内容

Plone的内容菜单实现

项目描述

简介

plone.app.contentmenu 包含了驱动 Plone 内容菜单的逻辑,该菜单是工具栏的一部分。

它提供了以下菜单项(及其子菜单):

  • 工厂菜单(顺序=10)

  • 工作流菜单(顺序=20)

  • 操作菜单(顺序=30)

  • 显示菜单(顺序=40)

  • 管理组件菜单(顺序=50)

注意,菜单项按“ordered”属性排序。为了允许第三方产品在其默认菜单项之间插入自己的子菜单,这些项注册了空隙。

自定义菜单

自定义菜单在 configure.zcml 中注册,如下所示

<!-- the main menu item -->
<adapter for="* *"
    name="plone.contentmenu.my_menu_item"
    factory=".menu.MyMainMenuItem"
    provides="plone.app.contentmenu.interfaces.IContentMenuItem" />

<!-- the sub menu items - name must match submenuId of MyMainMenuItem class -->
<browser:menu
    id="my_fancy_menu"
    title="The 'My' menu - allows to do new exciting stuff"
    class=".menu.MyMenu"
/>

menu.py 中,类看起来如下

from zope.browsermenu.interfaces import IBrowserMenu
from zope.browsermenu.menu import BrowserMenu
from zope.browsermenu.menu import BrowserSubMenuItem
from zope.component import getMultiAdapter
from zope.i18nmessageid import MessageFactory
from zope.interface import implementer

_ = MessageFactory('my.fancy')


class IMyMainMenuItem(IBrowserMenu):
    """The main my menu item.

    You may want to place this in interfaces.py
    """


class IMyMenu(IBrowserMenu):
    """The my menu.

    You may want to place this in interfaces.py
    """


@implementer(IMyMainMenuItem)
class MyMainMenuItem(BrowserSubMenuItem):
    # This is in fact a submenu item of the parent menu, thus the name
    # of the inherited class tells it, don't be confused.

    title = _(u'label_my_menu', default=u'My')
    description = _(u'title_my_menu', default=u'My for the current content item')
    submenuId = 'my_fancy_menu'

    order = 70  # after the default menus
    extra = {
        'id': 'my-fancy-menu',
        'li_class': 'plonetoolbar-content-my-fancy'
    }

    @property
    def action(self):
        # return the url to be loaded if clicked on the link.
        # even if a submenu exists it will be active if javascript is disabled
        return self.context.absolute_url()

    def available(self):
        # check if the menu is available and shown or not
        return True

    def selected(self):
        # check if the menu should be shown as selected
        return False


@implementer(IMyMenu)
class MyMenu(BrowserMenu):

    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        results = []

        # here a single item is added. do what needed to add several entries
        results.append({
            'title': 'My item 1',
            'description': 'An my item',
            'action': '/url/to/action',
            'selected': False,
            'icon': 'some_icon_class',
            'extra': {
                'id': 'plone-contentmenu-my-fancy-one',
                'separator': None,
                'class': 'my-class pat-plone-modal',
                'modal': 'width: 400'
            },
            'submenu': None,
        })

        return results

源代码

贡献者请阅读文档 Plone 核心开发流程

源代码在 GitHub 上的 Plone 代码仓库

变更日志

3.0.6 (2024-08-21)

错误修复

  • 修复 pat-plone-modal 在从内容菜单更改状态后重定向问题 [rohnsha0] (#3989)

3.0.5 (2024-07-30)

错误修复

  • 更宽的 content_status_history 模态。 [petschki] (#67)

3.0.4 (2024-04-23)

错误修复

  • 检查是否需要“下拉”菜单项。 [szakitibi] (#61)

内部

  • 更新配置文件。 [plone 开发者] (6e36bcc4)

3.0.3 (2023-09-14)

错误修复

  • 修复“将项目添加到默认页面”模态表单。 [sverbois] (#54)

内部

  • 更新配置文件。 [plone 开发者] (7723aeaf)

3.0.2 (2023-05-25)

错误修复

  • 为操作菜单项添加描述 [kshitiz305] (#24)

  • 当工具栏在顶部时,也显示工作流状态标题。 [maurits] (#49)

3.0.1 (2023-04-06)

内部

  • 更新配置文件。 [plone 开发者] (#47959565)

3.0.0 (2022-11-30)

错误修复

  • 最终发布。 [gforcada] (#600)

3.0.0b3 (2022-10-11)

错误修复

3.0.0b2 (2022-07-21)

错误修复

  • 修复缺失的 menuItem/extra/li_class。 [petschki] (#43)

3.0.0b1 (2022-06-23)

错误修复

  • 调整工具栏宽度和换行。 [agitator] (#40)

  • 调整工作流策略链接目标 [1letter] (#41)

3.0.0a4 (2022-06-07)

错误修复

  • 修复选择项目作为默认视图时的重定向问题。 [petschki] (#3548)

3.0.0a3 (2022-05-24)

新特性

  • 重新实现 dropout 工具栏子菜单和折叠图标 [petschki] (#35)

错误修复

  • 从链接中的图标移除 alt 标签。 [agitator] (#38)

3.0.0a2 (2022-05-15)

破坏性更改

  • 使用 plone.base。删除 six 和 Archetypes 专用代码。 [jensens] (#34)

错误修复

  • 修复浏览器:menuItem 上的权限处理问题 [iham] (#26) (#26)

  • 修复没有子菜单的内容视图操作 [petschki] (#36)

3.0.0a1 (2022-04-04)

破坏性更改

  • 为新的 Plone 6 工具栏进行更改。 [petschki] (#30)

  • 使用 Plone 6 图标解析器和 SVG 图标。 [agitator] (#30)

2.3.4 (2021-09-15)

错误修复

  • 移除与 Products.CMFPlone 的循环依赖关系 [ericof] (#31)

2.3.3 (2021-06-30)

错误修复

  • 更新 README.rst。 [ksuess, jensens] (#1)

2.3.2 (2020-07-17)

错误修复

2.3.1 (2020-03-21)

错误修复

  • 进行了一些小的打包更新。[各种] (#1)

2.3.0 (2019-06-27)

新特性

  • 添加了对Python 3.8的支持。[pbauer] (#25)

2.2.4 (2018-09-23)

错误修复

  • 修复了py3中portletmanager-menuitems的排序。[pbauer]

2.2.3 (2018-02-05)

错误修复

  • 在测试中使用get_installer。[maurits]

2.2.2 (2017-02-12)

错误修复

  • 修复了portlet ZCML标题注册。[gforcada]

2.2.1 (2016-11-10)

错误修复

  • 不要使用i18ndude提取动态消息。[vincentfretin]

2.2 (2016-11-01)

新特性

  • 使portlet管理器名称可翻译。为portlet管理器管理添加“全部”选项。[alecm]

  • 显示菜单重组。选定的视图/项目应在部分顶部,标题应显示为标题。[alecm]

  • 允许通过设置extras['shortTitle']来指定折叠侧边栏的短标题,方式与stateTitle相同。[MatthewWilkes]

错误修复

  • 为顶级工具栏条目添加默认图标。[alecm]

  • 代码清理。[gforcad]

2.1.9 (2016-10-03)

新特性

  • 在README中添加了文档。[jensens]

错误修复

  • 进行了一些小的代码清理和一些微优化。[jensens]

2.1.8 (2016-05-26)

修复

  • 优化了显示菜单对index_html的检查。[davisagli]

2.1.7 (2016-02-19)

修复

  • 修复了测试(不要从pac-tests中期望角色)。[pbauer]

2.1.6 (2015-08-20)

  • 修复:权限检查ManageWorkflowPolicies始终回退到ManagerPortal。现在在使用pkg_resources.get_distribution api检查权限后进行正确检查(永远不要捕获ImportError)。[jensens]

  • pep8,zca装饰器,plone代码约定。[jensens]

  • 不要以模态方式打开管理端点。[vangheem]

2.1.5 (2015-07-18)

  • 隐藏子菜单,这样屏幕阅读器就不会每次都读取全部内容。[vangheem]

  • 去掉“更多选项”,重新排序菜单,在文件夹内容中显示操作,提高可访问性。[vangheem]

2.1.4 (2015-05-05)

  • 由于双倍分发导致最终出现在PyPI上,重新发布。[maurits]

2.1.3 (2015-05-04)

  • 更改测试设置以允许测试AT和DX。[pbauer]

  • 修复Dexterity测试以使用plone.app.contenttypes的browser层。修复测试以与新plone.app.contenttypes统一视图名称兼容。[thet]

  • 如果无法添加内容,则不要显示将内容添加到文件夹型default_page的菜单项。[pbauer]

  • 将pat-modal模式重命名为pat-plone-modal。[jcbrand]

2.1.2 (2014-10-23)

  • 修复“管理端点”菜单对“网站管理员”不显示的问题。[@rpatterson]

  • 将新的标记更新和CSS集成到Plone和Barceloneta主题中。这是GSOC Barceloneta主题项目完成的工作。[albertcasado, sneridagh]

  • 基于ul li标签为内容操作菜单创建新的工具栏标记。[albertcasado, sneridagh]

2.1.1 (2014-04-13)

  • 为需要它的菜单URL添加csrf令牌。

  • 允许为更多链接自定义模态属性。[do3cc]

2.1.0 (2014-02-26)

  • 添加与新的Barceloneta主题相关的标记更改。[bloodbare]

2.0.9 (2014-01-27)

  • 如果没有portal_actionicons工具,则不会中断。[davisagli]

  • 将测试迁移到plone.app.testing [tomgross]

2.0.8 (2013-03-05)

2.0.7 (2012-12-09)

  • 为显示菜单下拉项添加id标签的前缀,修复#11927和#10894 [maartenkling]

2.0.6 (2012-07-02)

  • 使用zope.browsermenu并删除Zope 2.12 BBB代码。[hannosch]

2.0.5 (2012-02-07)

  • 在文件夹内容页面恢复工作流菜单,因为这是更改具有默认页面的文件夹状态的唯一方法。改进了对http://dev.plone.org/plone/ticket/8908的修复。[rossp]

2.0.4 - 2011-07-04

  • 通过浏览器菜单代码设置内容菜单图标的宽度和高度。[thomasdesvenain]

2.0.3 - 2011-05-12

  • 我们需要权限才能在流程菜单中查看Placeful策略。[thomasdesvenain]

2.0.2 - 2011-01-03

  • 依赖于Products.CMFPlone而不是Plone。[elro]

  • 添加当使用用于文件夹的前页对象时的factory expression上下文的测试覆盖率。在plone.app.content中修复。[rossp]

  • 修复FactoriesSubMenuItem中的addContext,使其能够向设置为父文件夹默认视图的文件夹对象添加内容。这解决了http://dev.plone.org/plone/ticket/10953。 [WouterVH]

2.0.1 - 2010-07-18

  • 更新许可证为仅适用于GPL版本2。 [hannosch]

2.0 - 2010-07-01

2.0b3 - 2010-06-13

  • 添加了与zope.browsermenu的兼容性(可选)。 [hannosch]

2.0b2 - 2010-02-17

  • 当存在一个或多个可添加的类型时,显示“添加新”菜单。当只有一个类型可添加时显示链接会导致与下拉JavaScript冲突。关闭http://dev.plone.org/plone/ticket/10193。 [esteele, davisagli]

  • 在FactoriesSubMenuItem中通过类型工具而不是操作工具来查找添加动作。这解决了动作URL的不一致问题。 http://dev.plone.org/plone/ticket/10207 [wichert]

2.0b1 - 2010-01-24

  • 删除了当单个项目存在时检查hideChildren的功能,这使得样式再次一致。菜单实际上是一个单项菜单,我们将其放入标题中以供直接点击的快捷方式。这解决了http://dev.plone.org/plone/ticket/9735 [limi]

2.0a2 - 2009-12-27

  • 调整工厂菜单以使用新的getIconExprObject方法。 [hannosch]

  • 删除了不再需要的zope.site依赖。 [hannosch]

  • 在文件夹内容页面隐藏操作、显示和流程菜单。这解决了http://dev.plone.org/plone/ticket/8908。 [hannosch]

  • 避免通过getSite()进行虚假的getToolByName间接操作。 [hannosch]

  • 注意缺少zope.publisher依赖并优先使用绝对导入。 [hannosch]

  • 始终使用“actionMenuSelected”类标记所选显示,并停止使用项目符号。参考http://dev.plone.org/plone/ticket/9894 [dukebody]

2.0a1 - 2009-11-14

  • 指定包依赖关系并进行各种清理。 [hannosch]

  • 避免在没有传递动作类别的情况下从context_state状态视图调用< span class="docutils literal">actions方法的弃用警告。 [hannosch]

  • 更新操作和图标处理,在操作菜单中利用动作本身存储的图标。 [hannosch]

  • 添加了对FTI上新的add_view_expr属性的支持。这可以用于构造添加视图的URL。 [optilude]

1.1.7 - 2009-03-07

1.1.6 - 2008-10-07

1.1.5 - 2008-08-18

  • 在禁用菜单周围添加一个带有“noMenuAction”类的span,以便可以对它们进行样式设计。 [wichert]

1.1.3 - 2008-07-07

  • 调整测试以反映最后更改引入的新行为。 [hannosch]

  • 如果禁用显示菜单(即文件夹中存在index_html项),则不显示显示菜单。以前的行为使用户感到困惑:带有提示删除index_html对象的描述从未显示,并且用户只能获得一个不可用的菜单项。新的行为使显示菜单与Plone UI的其他部分保持一致。 [wichert]

  • 将actionMenuSelected类添加到所选菜单项,以便可以进行样式设计(与Plone 2.5中使用的类相同)。不要删除围绕所选项目的&bull;标签,以便在使用适当的CSS样式时可以删除。 [wichert]

1.0.7 - 2008-03-09

  • 修正内容菜单HTML:菜单中的图标应具有空的alt属性,因为如果无法看到图像,替代文本就是菜单项本身的标签。将描述移动到title属性,使其仍然显示为工具提示。[wichert]

  • 修复了非ISelectableBrowserDefault感知内容的错误。这关闭了http://dev.plone.org/plone/ticket/7226。[deo]

1.0.6 - 2008-01-06

  • 修复了显示菜单,在默认页面不是包含DC元数据字段的包含内容项时,能正确显示默认页面标题。感谢George Lee发现这个问题。[optilude]

1.0.5 - 2008-01-02

  • 修复了显示菜单,在当前未查看时也能显示默认页面标题以及翻译中的标记。这修复了http://dev.plone.org/plone/ticket/7281。[witsch]

  • 在plone.app.contentmenu.menu的WorkflowMenu.getMenuItems()中移除了一个什么也不做的循环。[dreamcatcher]

1.0.3 - 2007-11-09

1.0b1 - 2007-03-05

  • 初始包结构。[zopeskel]

项目详情


发行历史 发行通知 | RSS源

下载文件

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

源代码分发

plone_app_contentmenu-3.0.6.tar.gz (42.5 kB 查看哈希值)

上传时间 源代码

构建分发

plone.app.contentmenu-3.0.6-py3-none-any.whl (27.3 kB 查看哈希值)

上传时间 Python 3

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面