如何在 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/myprofilefacebook.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 中过滤具有多个类别的博客文章?

OctoberCMS - 如何在组件内调用函数

如何使用获取页面树在 OctoberCMS 中获取静态页面下拉列表?

如何在octobercms中创建中间件