【问题标题】:OctoberCMS global page properties?OctoberCMS 全局页面属性?
【发布时间】:2018-08-05 06:25:41
【问题描述】:

是否可以设置一系列全局属性(例如社交媒体用户名),供 OctoberCMS 中的所有页面查看使用,而不是一次将它们关联到一个 CMS 页面或静态页面?

例如,可以在任何模板中使用{{ twitter_username }},但它不会在后端的任何页面表单中显示为字段。

更新:这可以通过在插件中使用 registerMarkupTags 注册 Twig 函数来实现:

use System\Classes\PluginBase;

class Plugin extends PluginBase
{
    public function registerMarkupTags()
    {
        return [
            'functions' => [
                'globals' => function($var) {
                    switch ($var) {
                        case 'twitter_username':
                            return 'mytwitterusername';
                    }
                    return null;
                },
            ],
        ];
    }
}

在这种情况下,从任何模板调用{{ globals('twitter_username') }} 都会打印mytwitterusername

【问题讨论】:

    标签: php laravel-5 octobercms octobercms-plugins octobercms-backend


    【解决方案1】:

    嗯,是的,你需要在layouts 中为life-cycle 方法添加代码,所以现在使用that layoutpage 将已经加载此信息。

    布局代码块你可以使用类似这样的东西

    use RainLab\Pages\Classes\Page as StaticPage;
    
    function onStart() {    
        $pageName = 'static-test'; // this will be static page name/filename/title
        $staticPage = StaticPage::load($this->controller->getTheme(), $pageName);
        $this['my_title'] = $staticPage->viewBag['title'];
        $this['twitter_username'] = $staticPage->viewBag['twitter_username'];
    
    }
    

    现在在您的cms page 中,您可以使用此变量

    <h1>{{ my_title }} </h1>
    <h3>{{ twitter_username }} </h3>
    

    如果您发现任何问题,请告诉我

    【讨论】:

    • 该站点使用多种布局,因此必须与此稍有不同,但您的代码帮助很大,谢谢。
    【解决方案2】:

    您还可以使用主题配置文件,它为您提供更大的灵活性,而不是将值硬编码到代码块中。 https://octobercms.com/docs/themes/development#customization

    【讨论】:

    • 其他管理员有权编辑主题属性的特定站点并不理想,但谢谢您。
    • 但您仍然可以调整每个管理员的权限
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2010-11-20
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多