在 Grav 管理中获取页面的后代

Get descendants of page in Grav admin

在 grav 主题插件中,我想提供一种方法来用其他页面的路由填充页面蓝图中的 select 输入字段:

video_route:
  type: select
  data-options@: '\Grav\Theme\MyTheme::videoRoutes'

这些页面必须是此处称为 'videos' 的另一个特定页面的后代。我的主题插件方法如下所示:

public static function videoRoutes() : array
{
    $pages = new Pages(Grav::instance());
    $pages->init();
    $collection = $pages->getCollection(['items' => ['@page.descendants' => '/videos']]);
    [...]
}

Grav\Common\Page\Pages::getCollection()方法里面,找到并实例化了'videos'对象,params数组的格式好像也是正确的。但是生成的集合是空的。我的方法有什么问题?

尝试以下操作:

public static function videoRoutes()
{
    $grav = Grav::instance();
    $grav['admin']->enablePages();   
    $pages = $grav['pages'];

    $collection = $pages->getCollection(['items' => ['@page.descendants' => '/videos']]);
    [...]
}

Admin->enablePages() 呼叫 Pages->enablePages()。根据 docs:

public enablePages() : void

Method used in admin to later load frontend pages.

请注意,如果您在从 Grav 的主题库安装的主题中使用上述代码,您将在下次更新主题时丢失所有更改。在这种情况下,您应该创建一个 inherited theme,或创建一个插件。