Доступ к странице OctoberCMS в коде?

У меня есть статическая страница в 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;
            }
        });
    }
}

person Steve M    schedule 26.02.2018    source источник


Ответы (1)


да, вы можете это сделать, вам нужно использовать этот код в методе жизненного цикла страницы

В блоке кода страницы вы можете использовать что-то вроде этого ИЛИ в любом другом месте

use RainLab\Pages\Classes\Page as StaticPage;

function onStart() {    
    $pageName = 'static-test';
    $staticPage = StaticPage::load($this->controller->getTheme(), $pageName);
    dd($staticPage->viewBag);    
}

дайте мне знать, если вы обнаружите какие-либо проблемы

person Hardik Satasiya    schedule 26.02.2018