是否可以从 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 中检索徽标,然后填充新页面中的下拉列表。如果以与文件选择器相同的方式支持它,那就太好了,但这有效。
我正在创建一个带有自定义页面创建表单的模板。在 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 中检索徽标,然后填充新页面中的下拉列表。如果以与文件选择器相同的方式支持它,那就太好了,但这有效。