【问题标题】:Get descendants of page in Grav admin在 Grav admin 中获取页面的后代
【发布时间】:2021-08-30 18:56:30
【问题描述】:

在 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 数组的格式似乎也正确。但结果集合是空的。我的方法有什么问题?

【问题讨论】:

  • 您介意提供更多信息吗?你想要达到的更高目标是什么?什么是“管理功能”。您的代码在何时何地运行?
  • @passerby - 我在我的问题中添加了一些上下文,希望这会有所帮助

标签: php grav


【解决方案1】:

尝试以下方法:

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:

公共 enablePages() : 无效

在管理员中用于稍后加载前端页面的方法。

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

【讨论】:

  • 完美,谢谢!我已经尝试直接在Pages 对象上调用enablePages(),但没有成功。重要的是您从Grav 容器中拉出Pages 对象。 $pages = new Pages($grav); 在这里不起作用。
猜你喜欢
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2015-12-03
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
相关资源
最近更新 更多