如何在 OctoberCMS 中使用控制器的默认主题和变量呈现 cms 页面?
Posted
技术标签:
【中文标题】如何在 OctoberCMS 中使用控制器的默认主题和变量呈现 cms 页面?【英文标题】:How to render a cms page with default theme AND variables from controllers in OctoberCMS? 【发布时间】:2018-02-25 13:28:21 【问题描述】:我想知道如何通过在控制器中执行功能的路由在 OctoberCMS 中呈现视图或显示具有默认主题的页面。
如果我有以下路线:
Route::get('bransje', [
'uses' => 'Ekstremedia\Cityportal\CPController@bransje'
]);
在我的控制器 CPController 中,我尝试了几件事,就像我以前使用 Laravel 一样:
public function bransje()
$stuff = Stuff::with('info');
return View::make('cms::bransje')->with('stuff',$stuff);
但我似乎无法让它工作,我尝试在网上搜索,但很难找到答案。我找到了一种解决方法,那就是制作一个插件组件,然后我可以包含该组件并执行以下操作:
public function onRun()
$this->eventen = $this->page['stuff'] = $this->stuff();
protected function stuff()
return ...
有什么方法可以让我在不使用 Cms 的情况下制作页面,并且这些页面包含在我的默认主题中?我试过了
return View::make('my-theme-name::page');
还有很多变种,但没有运气。
我知道我也可以:
==
public function onRun()
在我的 cms 页面的开头,但我不确定如何通过那里从我的插件控制器调用函数。
【问题讨论】:
【参考方案1】:您可以在插件中使用routes.php file 绕过前端路由。
this video turotial 中的完整示例。
【讨论】:
虽然指向外部资源的链接可能有用,但也请在您的答案中添加要点。到其他网站的链接可能会随着时间的推移而中断。 感谢您的回答,这是一个很好的视频,但它没有回答我的问题。他正在返回 json 和一个“hello world”。我想要的是,假设我使用我的默认主题在 cms 中创建了一个页面“页面”。然后,我想创建一个执行函数的路由,它将以与访问“mysite.com/page”相同的方式呈现该页面,但添加了将对象发送到查看。 好的,那么您需要自定义路由返回的 CMS 页面(已处理的 Twig .htm 文件吗?)?问题是您为什么要这样做 - 这与 CMS 免费为您提供的功能相同。也许您需要其他东西 - 在发送或类似之前修改响应的全局事件挂钩?【参考方案2】:如果这个答案仍然有用(适用于 10 月 v434)。
我有几乎相同的场景。
我想要实现的是一种类似于 facebook 页面和个人资料的路由。
facebook.com/myprofile
与facebook.com/mypage
的url结构相同
首先我在 CMS 中为每个场景创建一个页面(比如catchpage.htm
)
然后在我的插件中 routes.php 的底部创建了一个包罗万象的路由,它也不会干扰 octobercms 的内部工作。
if (!Request::is('combine/*') && !Request::is('backend/*') && !Request::is('backend'))
// Last fail over for looking up slug from the database
Route::get('slug/slug2?', function ($slug, $slug2 = null)
//Pretend this are our routes and we can check them against the database
$routes = ["bola", "sade", "bisi", "ade", "tayo"];
if(in_array($slug, $routes))
$cmsController = new Cms\Classes\Controller;
return $cmsController->render("/catchpage", ['slug' => $slug]);
// Some fallback to 404
return Response::make(View::make('cms::404'), 404);
);
如果Request::is
检查是october 在后台使用的所有资源的列表,请不要删除combine,因为它是combiner 路由。删除它,样式和脚本将不会呈现。 backend 也是后端的 url,确保提供 backend 和 backend/*。
如果资源没用,最后别忘了return Response::make(View::make('cms::404'), 404);
。
您可以将所有这些都放在一个控制器中。
如果有人有更好的解决方法,请告诉我们。
【讨论】:
(new Cms\Classes\Controller)->render()
正是我所需要的!在自定义路由和控制器中呈现所选页面。以上是关于如何在 OctoberCMS 中使用控制器的默认主题和变量呈现 cms 页面?的主要内容,如果未能解决你的问题,请参考以下文章
在设置表单上设置默认值在 Octobercms 中返回 null
OctoberCMS:如何在 Rainlab.User 插件中通过电子邮件设置用户帐户激活?
如何在 octobercms 中过滤具有多个类别的博客文章?