在页面上,您可以使用getIDList() 获取所有孩子(即孙子的父母)的 ID:
$ids = Page::get()->filter(array('ParentID' => $this->ID))->getIDList();
现在您可以通过 ParentID 获取所有页面(或您想要的任何页面类型):
$grandChildren = Page::get()->filter(array('ParentID' => $ids));
孙辈也一样……
$grandGrandChildren = Page::get()->filter(array('ParentID' => $grandChildren->getIDList()));
您可以根据需要对这个 DataList 进行排序,例如
$sortedgrandGrandChildren = $grandGrandChildren->sort('Title', 'ASC');
编辑:
$this->Children() 确实返回一个 ArrayList,而不是 DataList,因此我们必须手动获取所有子项。请注意,这不尊重canView(),所以如果当前用户是否有权限,我们会得到所有 个页面。对于一个简单的网站,这应该没问题。
使用$this->Children()->column('ID') 可以得到过滤后的结果。
现成的方法可以是:
public function getGrandGrandChildren() {
$ids = Page::get()->filter(array('ParentID' => $this->ID))->getIDList();
$grandChildren = Page::get()->filter(array('ParentID' => $ids));
$grandGrandChildren = Page::get()->filter(array('ParentID' => $grandChildren->getIDList()));
return $grandGrandChildren->sort('Title', 'ASC');
}
在你的模板中:
<% loop $GrandGrandChildren %>
<a href="$Link">$Title</a>
//do whatever you want
<% end_loop %>