2013-03-07 51 views
1

我正在开发基于cms的Yii应用程序。我最近完成了后端的页面,现在可以从数据库中获取页面。如何为Yii请求的动态页面设置站点/域控制器

问题始于获取请求的URL并呈现动态布局。

什么是去了解这一点的最好方法是什么?就像使用起始站点/域控制器一样,我该如何设置它?

使用CMenu进行渲染的模板效果很好。该菜单显示在前端。以下是我目前使用的/ home和/ company/products菜单链接的示例。它使用干净的网址。

<ul id="yw0"> 

<li class="active"><a href="/home">Home</a></li> 
<li><a href="/about_us">About us</a></li> 
<li><a href="/company">Company</a></li> 

    <ul> 
     <li><a href="/company/products">Products</a></li> 
     <li><a href="/company/services">Services</a></li> 
    </ul> 

<li><a href="/contact">Contact</a></li> 

</ul> 

但是,这是一个点。该布局需要从后端的特定页面动态加载。每个页面可以有不同的布局。数据库中有一列。因此,例如url:“http://example.com/home”需要加载'protected/views/layouts/main.php'

目前链接如:“http://example.com/company/products”不会去任何地方。这很明显,因为这些链接不存在并且是动态创建的。

我想我需要做两件事情:

  • 来拨打startController每个请求到达,并且将处理的页面和布局的加载。
  • 和两个一些设置与干净的Url。?

就是这样。

我可以想象它没有太多的工作。但它让我头疼。

尤其是干净的网址。他们一直对我感到困惑。

index.php?r =站点/索引将转到siteController和动作索引。

但这不是我想要的。我也尝试设置'urlManager',但它去了一个控制器和一个动作。像page/default/view/id /。但我不想去一个动作,而只是从数据库加载(下一个)所请求的页面(具有不同的布局)的开始控制器。

我需要设置干净的URL某处配置文件main.php

希望它很容易明白我想实现。任何帮助是极大的赞赏。

回答

1

您可以在控制器中设置布局,也可以像这样在单个控制器的每个动作中设置不同的布局。

public function actionActionname() 
{ 
    $this->layout = 'front_layout'; 
    //Do the actions 
    $this->render('renderVariable'); 
} 

并以品种控制器布局,可以这样设置:

class ControllerName extends Controller 
{ 
    public $layout = '//layout path'; 
+0

感谢您的答复。事情是在控制器中设置代码的布局并不是真正的动态。但主要问题是我如何做一个启动控制器。一个入口控制器。和干净的网址。我再次尝试过网址管理器。现在它转到:yiitest/frontend/index.php/home。正如你可以看到它使用数据库中的主页URL。但我得到 错误404 无法解决请求“家”。 但是如何以及在哪里设置入口控制器。 “protected/controllers /”中的SiteController和pageController不会被调用。 编辑:对不起,第一次使用stackoverflow – Minahalmon 2013-03-07 11:14:17