【问题标题】:Can not activate discussions on Plone Dexterity types (folderish)无法激活关于 Plone Dexterity 类型的讨论(文件夹)
【发布时间】:2026-01-25 01:30:01
【问题描述】:

我一直在开发基于灵巧性的克隆应用程序。 我创建了几个新类型。这是我在名为“activity_report”的特定敏捷内容类型上激活 cmets 所做的:

在 Plone 控制面板中

讨论部分我启用了以下功能:

  • 全局启用 cmets
  • 启用匿名 cmets

类型部分 我从下拉列表中选择了“活动报告”类型并启用了“允许 cmets”选项。

在文件系统上

在 FTI 文件 activityreport.xml 中:

<property name="allow_discussion">True</property>

我已经重启了实例,甚至重新安装了产品,但是我无法激活敏捷类型中的 cmets 部分。

值得一提的是,标准类型(例如页面)可以激活讨论模块。

我有什么遗漏吗?

【问题讨论】:

  • 我认为我的问题也与我的内容类型是文件夹有关。如何允许讨论文件夹类型?

标签: plone dexterity


【解决方案1】:

plone.app.discussion 目前禁止对所有容器进行评论(请参阅https://dev.plone.org/ticket/11245 进行讨论)。

我在一个项目中使用了类似以下的猴子补丁来缩短正常检查并确保为我的文件夹内容类型启用了评论:

from Acquisition import aq_inner
from Products.highcountrynews.content.interfaces import IHCNNewsArticle
from plone.app.discussion.conversation import Conversation
old_enabled = Conversation.enabled
def enabled(self):
    parent = aq_inner(self.__parent__)
    if parent.portal_type == 'my_portal_type':
        return True
    return old_enabled(self)
Conversation.enabled = enabled

“my_portal_type”当然是您希望启用评论的portal_type。

【讨论】:

  • 谢谢大卫!这看起来像我将采用的解决方案。我也在考虑将类型转换为简单的文档。就我而言,使用文件夹类型的唯一优势是将相关文档保存在容器中。
【解决方案2】:

大卫的回答不准确。要进行猴子补丁的类是 plone.app.discussion.browser.conversation.ConversationView

from Acquisition import aq_inner
from plone.app.discussion.browser.conversation import ConversationView
old_enabled = ConversationView.enabled

def enabled(self):
    parent = aq_inner(self.__parent__)
    if parent.portal_type == 'My_type':
        return True
    return old_enabled(self)

它至少适用于 Plone 4.2。不过,感谢 David 的提示。

【讨论】:

    【解决方案3】:

    正如 David 和 Victor 已经指出的那样,您可以重写会话类的 enable 方法。我建议使用以下方法,它比猴子修补会话类更干净:

    https://github.com/plone/plone.app.discussion/blob/master/docs/source/howtos/howto_override_enable_conversation.txt

    我最近还在 plone.app.discussion 中添加了对敏捷类型的支持,因此一旦有新版本发布,您就不再需要自定义对话类:

    https://github.com/plone/plone.app.discussion/commit/0e587a7d8536125acdd3bd385e880b60d6aec28e

    请注意,此方法支持对文件夹对象进行注释。尚不支持启用/禁用对文件夹对象内部的对象的评论。

    如果您希望能够使用行为字段/小部件打开/关闭评论:

    https://github.com/plone/plone.app.dexterity/commit/0573df4f265a39da9efae44e605e3815729457d7

    这也有望成为下一个 plone.app.dexterity 版本。

    【讨论】:

    • 很好的解决方案,因为所有更改都在任何克隆包鸡蛋之外。 “howto_override_enable_conversation.txt”主要为我工作。在“如果 context.allow_discussion 不是 None”之前,我必须检查该属性是否存在于上下文中(或添加了 try、catch 块)。
    • @RyanAnderson 您介意更改操作方法并提出拉取请求,以便我可以更新文档吗?
    【解决方案4】:

    我在configure.zcml中解决了:

    <interface interface="Products.CMFPlone.interfaces.INonStructuralFolder" />
    
    <class class="Products.PloneHelpCenter.types.Definition.HelpCenterDefinition">
      <implements interface="Products.CMFPlone.interfaces.INonStructuralFolder" />
    </class>
    

    更新:这不是一个好主意。对于具有此修复程序的每种内容类型,我都缺少添加菜单的问题。

    【讨论】:

      最近更新 更多