0

是否可以设置一系列全局属性(例如社交媒体用户名),这些属性可用于 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.

4

2 回答 2

1

嗯,是的,更好的是你需要在life-cycle方法中添加代码layouts,所以现在page正在使用的that layout将已经加载了这个信息。

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

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>

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

于 2018-02-26T12:49:20.577 回答
1

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

于 2018-02-26T15:10:33.980 回答