在 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,或创建一个插件。
在 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,或创建一个插件。