在代码中访问 OctoberCMS 页面?
Access to OctoberCMS page in code?
我在 OctoberCMS 中有一个名为 General 的静态页面,其中包含一系列站点范围的设置,包括 phone 号码和地址。是否可以通过代码访问此页面以从其 ViewBag 中读取这些设置?
更新: 使用以下内容创建了一个插件,现在可以使用 {{ general('twitter_username') }}
在模板中访问 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;
}
});
}
}
是的,您可以做到,实际上您需要在页面 life-cycle 方法中使用此代码
In page code block you can use something like this OR anywhere else
use RainLab\Pages\Classes\Page as StaticPage;
function onStart() {
$pageName = 'static-test';
$staticPage = StaticPage::load($this->controller->getTheme(), $pageName);
dd($staticPage->viewBag);
}
如果您发现任何问题,请告诉我
我在 OctoberCMS 中有一个名为 General 的静态页面,其中包含一系列站点范围的设置,包括 phone 号码和地址。是否可以通过代码访问此页面以从其 ViewBag 中读取这些设置?
更新: 使用以下内容创建了一个插件,现在可以使用 {{ general('twitter_username') }}
在模板中访问 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;
}
});
}
}
是的,您可以做到,实际上您需要在页面 life-cycle 方法中使用此代码
In page code block you can use something like this OR anywhere else
use RainLab\Pages\Classes\Page as StaticPage;
function onStart() {
$pageName = 'static-test';
$staticPage = StaticPage::load($this->controller->getTheme(), $pageName);
dd($staticPage->viewBag);
}
如果您发现任何问题,请告诉我