【问题标题】:Access to OctoberCMS page in code?在代码中访问 OctoberCMS 页面?
【发布时间】:2018-08-05 17:59:22
【问题描述】:

我在 OctoberCMS 中有一个名为 General 的静态页面,其中包含一系列站点范围的设置,包括电话号码和地址。是否可以在代码中访问此页面以从其 ViewBag 中读取这些设置?

更新:使用以下内容创建了一个插件,其中 twitter_username 之类的属性现在可以在带有 {{ general('twitter_username') }} 的模板中访问:

use System\Classes\PluginBase;
use RainLab\Pages\Classes\Page;
use Cms\Classes\Theme;

class Plugin extends PluginBase
{
    private static $generalViewBag = null;

    public function registerMarkupTags()
    {
        return [
            'functions' => [
                'general' => function($var) {
                    if (self::$generalViewBag === null) {
                        self::$generalViewBag = Page::load(Theme::getActiveTheme(), 'general')
                            ->getViewBag();
                    }

                    return self::$generalViewBag->$var;
                },
            ],
        ];
    }
}

twitter_username 表单字段已使用单独的插件添加到后端的常规页面:

use System\Classes\PluginBase;
use Event;

class Plugin extends PluginBase
{
    public function boot()
    {
        Event::listen('backend.form.extendFields', function($widget) {
            if (! $widget->getController() instanceof \RainLab\Pages\Controllers\Index) {
                return;
            }
            if (! $widget->model instanceof \RainLab\Pages\Classes\Page) {
                return;
            }

            switch ($widget->model->fileName) {
                case 'general.htm':
                    $widget->addFields([
                        'viewBag[twitter_username]' => [
                            'label' => 'Twitter username',
                            'type' => 'text',
                            'tab' => 'Social Media',
                        ],
                    ], 'primary');
                    break;
            }
        });
    }
}

【问题讨论】:

    标签: php octobercms octobercms-plugins octobercms-backend octobercms-viewbag


    【解决方案1】:

    是的,你可以做到,实际上你需要在页面生命周期方法中使用这段代码

    页面代码块中,您可以在其他任何地方使用类似的东西

    use RainLab\Pages\Classes\Page as StaticPage;
    
    function onStart() {    
        $pageName = 'static-test';
        $staticPage = StaticPage::load($this->controller->getTheme(), $pageName);
        dd($staticPage->viewBag);    
    }
    

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

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2017-09-05
      • 2018-02-09
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 2013-05-05
      相关资源
      最近更新 更多