【问题标题】:Static page plugin - List with all pages url as a custom page field静态页面插件 - 列出所有页面 url 作为自定义页面字段
【发布时间】:2018-06-22 22:26:36
【问题描述】:

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

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

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

【问题讨论】:

  • 我已经检查并发生错误,周末忙于家人,明天一定会解决这个问题并发布解决方案。

标签: octobercms


【解决方案1】:

哇!这个问题真是把我的大脑拧紧了,

谢谢你的问题,我真的很乐意解决这个问题。

如果我们在中继器十月字段解析之外使用普通变量,会将其视为名称viewBag[page],并且它不适用于fieldParserfieldOptions getter 方法。 (它的技术含量很低,所以我想跳过这个并跳转到真正的解决方案)

最后我发现了一些小技巧/扩展/功能(October Cms 的广泛性质)并使用它

你需要任何插件,这样你就可以在 boot 方法中编写扩展代码。

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

您可以在此处更正 alias-namenamespace 我们正在使用此 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 都将被列为此下拉列表的选项。

如有任何问题请发表评论,我们将予以纠正。

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 2014-02-09
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    相关资源
    最近更新 更多