哇!这个问题真是把我的大脑拧紧了,
谢谢你的问题,我真的很乐意解决这个问题。
如果我们在中继器十月字段解析之外使用普通变量,会将其视为名称viewBag[page],并且它不适用于fieldParser 和fieldOptions getter 方法。 (它的技术含量很低,所以我想跳过这个并跳转到真正的解决方案)
最后我发现了一些小技巧/扩展/功能(October Cms 的广泛性质)并使用它
你需要任何插件,这样你就可以在 boot 方法中编写扩展代码。
public function boot() {
$alias = \Illuminate\Foundation\AliasLoader::getInstance()
->alias('MyPluginOptionAlias','October\\Demo\\plugin');
}
您可以在此处更正 alias-name 和 namespace 我们正在使用此 alias 使我们的插件对象在全球范围内可用 (MyPluginOptionAlias)
在plugin.php 内部,我们添加了两个static 方法,以便我们以后可以访问它们,这将只是logic 获取page-list 并将其作为数组返回。
public static function getPageOptions() {
// different lists // or even you can merge them
$result = self::getTypeInfo('cms-page');
// $result = self::getTypeInfo('static-page');
// $result = self::getTypeInfo('blog-post');
return $result['references'];
}
public static function getTypeInfo($type)
{
$result = [];
$apiResult = \Event::fire('pages.menuitem.getTypeInfo', [$type]);
if (is_array($apiResult)) {
foreach ($apiResult as $typeInfo) {
if (!is_array($typeInfo)) {
continue;
}
foreach ($typeInfo as $name => $value) {
if ($name == 'cmsPages') {
$cmsPages = [];
foreach ($value as $page) {
$baseName = $page->getBaseFileName();
$pos = strrpos($baseName, '/');
$dir = $pos !== false ? substr($baseName, 0, $pos).' / ' : null;
$cmsPages[$baseName] = strlen($page->title)
? $dir.$page->title
: $baseName;
}
$value = $cmsPages;
}
$result[$name] = $value;
}
}
}
return $result;
}
现在是主要的
{variable name="page" label="Page" type="dropdown" options="MyPluginOptionAlias|getPageOptions" tab="link"}{/variable}
你定义选项 exactly这样MyPluginOptionAlias|getPageOptions
这里的逻辑是现在它将从我们的MyPluginOptionAlias 实例的method: getPageOptions
中获取选项列表
您从其中返回的任何array 都将被列为此下拉列表的选项。
如有任何问题请发表评论,我们将予以纠正。