如何让我的文件夹自定义类型在folder_contents视图中以反向时间顺序显示它的对象列表?
默认是列表顶部最旧的对象,我希望新添加的对象位于列表的顶部。
如果Plone开箱即用这个功能会很好......如果确实如此,我无法找到它。
答案 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