当我无法使上述代码正常工作时,我一直在寻找一种在SS4中实现此目标的方法。这就是我想出的。
ArrayList
我正在寻找一个工作示例,该示例默认情况下如何按标题对站点树中的页面进行排序。理想情况下,我只想对某种类型的子页面进行排序。就我而言,我希望我的父投资组合下的所有图库页面均按其标题按字母顺序排序。这是为了在后端CMS中轻松搜索,因为我知道如何在模板中对其进行排序。
我已经找到了这些示例,但不足以解决SS3.1 +问题
http://www.ssbits.com/tutorials/2011/custom-sorting-in-the-cms-sitetree/https://github.com/silverstripe/silverstripe-cms/issues/848
查看您提供的示例和当前的Silverstripe来源,有几种方法可以解决此问题。我的解决方案涉及使用Silverstripe的扩展系统来操纵如何生成层次结构。
SiteTree
CMS加载站点树的方式有点冗长,因此我将快速简化:
SiteTree
(用于页面部分)具有用于延迟加载链接树视图的标记CMSPagesController_Content.ss
中指定的功能)调用一些内部方法来基本上加载CMSMain
模板此模板在CMSMain
中回调CMSMain_TreeView
函数>
注意:
SiteTreeAsUL
允许我们在返回之前使用Silverstripe中的扩展系统进行挂接,尽管我们不想操纵HTML。
[SiteTreeAsUL
,CMSMain
的功能部分,在SiteTreeAsUL
内部被调用。
getSiteTreeFor
调用getSiteTreeFor
,它是LeftAndMain
的功能部分,实际上是在进行HTML的构建,但最重要的是,它调用了正确的“ children”方法。]]我说的是正确的子方法,因为有几个:
LeftAndMain
SiteTreeAsUL
getSiteTreeFor
getChildrenAsUL
因为未指定子方法getChildrenAsUL
时调用了Hierarchy
。>
调用函数Hierarchy
会进行几次调用,但是我们想知道的是它在内部调用了扩展方法AllChildren。
因此,要执行您想做的事情,您可能想使用扩展功能AllChildrenIncludingDeleted为AllHistoricalChildren编写扩展名。第一个参数是存储为Children的所有子级的列表。
技术说明:它实际上可以是
getSiteTreeFor
或it uses a hardcoded default ofAllChildrenIncludingDeleted
因为如果没有活孩子,它将返回原始结果AllChildrenIncludingDeleted
是AllChildrenIncludingDeleted
。虽然两者都有排序功能,但它们的行为可能有所不同。
augmentAllChildrenIncludingDeleted
将允许您做您打算做的事。类似这样的方法应该起作用:
augmentAllChildrenIncludingDeleted
并且只需将扩展名设置为SiteTree
(如果需要,也可以设置为augmentAllChildrenIncludingDeleted
,仍然可以使用。]
免责声明:我没有亲自尝试过,但是它遵循Silverstripe如何与扩展一起使用的标准模式,因此您应该没有问题。
当我无法使上述代码正常工作时,我一直在寻找一种在SS4中实现此目标的方法。这就是我想出的。
ArrayList
这不是完全的“银线方式”,但可以。
当我无法使上述代码正常工作时,我一直在寻找一种在SS4中实现此目标的方法。这就是我想出的。
ArrayList