为相同数据实现多个视图的想法

时间:2009-07-15 09:28:12

标签: php model-view-controller design-patterns architecture structure

我正在使用CodeIgniter,但问题适用于任何MVC框架。我有一个自定义CMS,允许管理5个不同的网站。用户登录并在这些站点之间切换。他们可以为网站的每个区域添加内容。每个站点可以输入的CMS和数据相同。

面向公众的网站看起来完全不同,代表不同的品牌,即使它们包含与所有其他品牌相同的数据。

那你将如何实现这些观点呢?我应该看一下设计模式吗?

我现在能想到的唯一方法是在每个控制器内部放置一个switch语句>为每个网站获取不同视图的操作,但必须有一个更聪明的方法来做到这一点。我希望能够产生大量代码如下:

class Home extends Controller {

    public function getPage()
    {
        $website = $this->session->userdata( "site_id" );
        switch( $website )
        {
            case "1":
                // load view one
            break;
            case "2":
                // load view 2
            break;
            // etc etc
        }
    }
}

2 个答案:

答案 0 :(得分:1)

  • 编写一个扩展CoreController的{​​{1}}类,并让所有其他控制器扩展Controller类,在您的情况下为CoreController

    Home
  • 使用site_ids在视图文件夹中创建文件夹:

    class CoreController extends Controller {}
    class Home extends CoreController {}
    
  • application/views/1/ application/views/2/
  • 的构造函数中切换基础文件夹

答案 1 :(得分:0)

按照Django的optional "sites" framework

的方式进行
  1. 将网站添加到您的模型中。
  2. 建立网站与现有模型之间的关系。
  3. 加载Site :: get_current_site()并使用其属性。
  4. Residuum的方法适用于组织文件。