在folder_contents中反转Plone默认排序顺序

时间:2015-09-23 06:04:46

标签: sorting directory plone dexterity archetypes

如何让我的文件夹自定义类型在folder_contents视图中以反向时间顺序显示它的对象列表?

默认是列表顶部最旧的对象,我希望新添加的对象位于列表的顶部。

如果Plone开箱即用这个功能会很好......如果确实如此,我无法找到它。

5 个答案:

答案 0 :(得分:9)

要实际更改其父级中的obj位置,您可以使用Zope2的OFS.IOrderedContainer - 接口来访问相关方法并将其连接到zope.lifecycleevent.interfaces.IObjectAddedEvent,就像在此Plone-addon中一样“{{3 “(免责声明:作者= meh):

在你configure.zcml注册eventlistener:

<subscriber for="Products.CMFCore.interfaces.IContentish
                 zope.lifecycleevent.interfaces.IObjectAddedEvent"
            handler=".subscriber.revertOrder" />

在处理程序(此处:subscriber.py)中,定义被调用的方法:

from Acquisition import aq_inner
from Acquisition import aq_parent

from OFS.interfaces import IOrderedContainer

def revertOrder(obj, eve):
    """
    Use IOrderedContainer interface to move an object to top of folder on creation.
    """
    parent = obj.aq_inner.aq_parent
    ordered = IOrderedContainer(parent, None)
    if ordered is not None:
        ordered.moveObjectToPosition(obj.getId(), 0)

适用于Dexterity- 基于原型的内容类型。

另请参阅文档:adi.revertorder

答案 1 :(得分:3)

folder_contents View按文件夹本身存储的位置显示项目(子项)。您可能知道,您可以通过拖动来降低位置。

如果您向该文件夹添加新项目,则plone会执行append。恕我直言这种行为非常适合大多数用例。

我不确定你的目标是什么,但是如果你需要一个按时间顺序显示项目的folder_contents,你可以根据需要自定义folder_contents,这意味着按创建日期排序(最新的)不再显示manual sort column

有关自定义folder_contents的提示

一个很好的切入点是plone.app.content的tableview.py - &gt; https://github.com/plone/plone.app.content/blob/2.1.5/plone/app/content/browser/tableview.py#L30

答案 2 :(得分:2)

使用规则也是一种选择。

以下内容将创建对象移动到文件夹中的顶部位置。

添加工作流脚本(键入&#39; Python脚本&#39;),moveToFirstPosition'到您的工作流程:

contentObject = review_state.object
obj_id = contentObject.getId()
parent = contentObject.aq_parent
parent.moveObjectToPosition(obj_id, 0)

添加转换&#39; moveToTop'并选择脚本,moveToFirstPosition&#39;

在创建文件夹中的对象时触发的新规则中使用此转换。 全局或在选定文件夹上激活规则。

答案 3 :(得分:1)

collective.sortmyfolder有一些选项可以反转顺序,或者在不同的字段上排序,但它只能运行一次。添加其他项目后,您需要重新排序该文件夹。不完全是你想要的,但在某些情况下它可能会有所帮助。

答案 4 :(得分:1)

全部谢谢。来自Ida的指针让我在那里......我只需要导入IObjectAddedEvent:

在myobject.py中

paint

在configure.zcml中注册监听器:

from zope.lifecycleevent.interfaces import IObjectAddedEvent

...

class IMyObject(model.Schema):

...

# Listener for adding myObject: move myObject to the top of the parent folder
def addItemToTop(myObject, event):
    event.newParent.moveObjectToPosition(myObject.getId(),0)

Doco在这里:http://docs.plone.org/external/plone.app.dexterity/docs/advanced/event-handlers.html