在 Grav admin 中获取页面的后代

问题描述

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

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

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

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()。根据{{​​3}}:

public enablePages() : 无效

admin 中用于稍后加载前端页面的方法。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...