在 SilverStripe 中获取 Page DataObject 的父页面

Getting the parent pages of Page DataObject in SilverStripe

我正在开发一个 SilverStripe 项目。现在我正在尝试通过控制器中的 ID 获取页面对象,就像这样。

$currentPage = Page::get()->byID($this->ID);

此外,我也想要 $currentPage 的所有 parents/parent。但是我无法在数据库 table 中找到与 parent_page_id 之类的页面相关的列。如何获取页面数据对象的所有父页面?

页面广义上就是 SiteTree object。 ParentID 列存在于 SiteTree 数据库 table 上。您可以像这样访问页面的 parent:

$parent = $currentPage->Parent();

您也可以使用 SiteTree::getParent() 获得相同的结果:

$parent = $currentPage->getParent();

如果您需要递归地获取所有 parent,您可以循环执行直到 ->Parent() returns falsy。

此外,由于 SiteTree 使用 Hierarchy 作为 Parent/Children 逻辑,您还可以使用 getAncestors() 获取所有 parent 和 grandparent秒。参见 the API documentation