是否可以从 Grav CMS 蓝图形式的另一个页面访问 headers

Is it possible to access headers from another page in Grav CMS blueprint form

我正在创建一个带有自定义页面创建表单的模板。在 B 页 我目前有一个文本框,用户可以在其中键入他们机构的名称,然后在下拉列表中他们可以 select 该机构的徽标。

B 页:

.logo:
   type: filepicker
   folder: 'user/pages/01.home/04._affiliates/'
   label: Select a logo for the institution
   preview_images: true
   accept:
     - .svg

这些徽标在 header.media_order

中上传的另一个页面上

但是,在页面 A 上,我有以下格式的自定义字段:

A 页:

理想情况下,我希望在 页面 B 上有一个下拉菜单,用户可以从 user/pages/01.home/04._affiliates/ 页面的 header.associations 中选择一个机构(页面 A) 并从那里能够访问 页面 B 的树枝模板中的名称和 SVG 徽标。

SelectUnique 提供了一个下拉框,但是几乎没有关于它的文档,所以我不知道是否可以访问这些数据。这甚至可能吗?

我不知道这是否是 'correct' 做事的方式。然而,这是我想出的解决方案:

我使用创建了一个名为 ListInstitutes 的自定义插件,它具有 list() 功能。这是代码:

编辑:更新代码以反映 @passerby

的评论
<?php
namespace Grav\Plugin;
use Grav\Common\Grav;
use Grav\Common\Plugin;
use RocketTheme\Toolbox\Event\Event;


class ListInstitutes extends Plugin
{
    
    public static function list()
    {
        $out_array = array();

        //get static access to Grav page instance 
        $page = Grav::instance()['page'];
    
        //get the affiliates page
        $affiliates = $page->find("/home/_affiliates");

        //get the uri prefix for associated media 
        $media_uri = "/" . str_replace("://", "/", $affiliates->getMediaUri()) . "/";
    
        //get the headers for the affiliates page
        $header = $affiliates->header();
    
        //get the associations from the headers 
        $associations = $header->associations;
    
        foreach($associations as $association){
            $out_array[$media_uri . $association["logo"]."||".$association["institution"]] = $association["institution"];
        }  
        return $out_array;
    }
}

然后我在我的蓝图中创建了这个字段:

header.affil:
    type: select
    label: Institute
    size: medium
    classes: fancy
    data-options@: '\Grav\Plugin\ListInstitutes::list'
    default: ''
    options:
       '': 'Select'

通过这样做,我能够从另一页的 headers 中检索徽标,然后填充新页面中的下拉列表。如果以与文件选择器相同的方式支持它,那就太好了,但这有效。