静态页面插件 - 列出所有页面url作为自定义页面字段

时间:2018-01-13 19:28:46

标签: octobercms

我正在使用静态页面插件。我需要一种从自定义字段获取octobercms的所有页面的方法。我不在乎这将如何完成(官方页面网址选择器 - 下拉列表...),我只想要用户友好,所以可以从客户端使用。

There is a workaround但它仅适用于转发器。如果我将其与另一个字段{variable name="page" label="Page" type="dropdown"}{/variable}一起使用,则会出现错误:

get_class() expects parameter 1 to be object, array given

1 个答案:

答案 0 :(得分:2)

哇!这个问题确实收紧了我大脑的螺母和螺栓,

  

感谢您提出问题,我真的非常乐意解决这个问题。

好像我们在转发器之外使用正常变量10月字段解析会将其视为名称viewBag[page],并且不能使用fieldParserfieldOptions getter方法。 (它的技术性很小,所以我想跳过这个并跳到真正的解决方案)

  

最后我发现了一些黑客/类型的扩展/功能(10月Cms的广泛性)并使用它

您需要任何插件,以便在boot方法中编写扩展代码。

public function boot() {
    $alias = \Illuminate\Foundation\AliasLoader::getInstance()
              ->alias('MyPluginOptionAlias','October\\Demo\\plugin');
}

在这里,您可以更正alis-namenamespace我们使用此alias (MyPluginOptionAlias)

使我们的插件对象全局可用

plugin.php内部我们添加了两个static方法,以便我们稍后可以访问它们,这只是获取logic的{​​{1}}并将其作为数组返回。< / p>

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将被列为此下拉列表的选项。

如果它产生任何问题,请发表评论,我们会更正。