代码之家  ›  专栏  ›  技术社区  ›  Steve M

在代码中访问十月CMS页面?

  •  0
  • Steve M  · 技术社区  · 7 年前

    我在10月CMS中有一个名为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\u用户名 表单字段已使用单独的插件添加到后端的常规页面:

    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;
                }
            });
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Hardik Satasiya    7 年前

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

    在里面 页面代码块 你可以用这样的东西 其他任何地方

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

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