在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\Pages::getCollection()方法中,可以找到并实例化“视频”对象,params数组的格式似乎也是正确的。但是结果集合是空的。我的方法有什么问题?
发布于 2021-06-15 07:43:04
尝试以下几点:
public static function videoRoutes()
{
$grav = Grav::instance();
$grav['admin']->enablePages();
$pages = $grav['pages'];
$collection = $pages->getCollection(['items' => ['@page.descendants' => '/videos']]);
[...]
}Admin->enablePages()打电话给Pages->enablePages()。根据文档
公共enablePages():无效 方法用于管理,以便稍后加载前端页。
请注意,如果您在Grav主题回购中安装的主题内部使用上述代码,那么您将在下一次更新主题时丢失所有更改。在这种情况下,您应该创建一个继承主题,或者创建一个插件。
https://stackoverflow.com/questions/67977526
复制相似问题