1

我正在使用 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
        }
    }
}
4

2 回答 2

1
  • 在您的情况下,编写一个CoreController扩展Controller并让所有其他控制器扩展该类的类:CoreControllerHome

    class CoreController extends Controller {}
    class Home extends CoreController {}
    
  • 使用 site_ids 在您的视图文件夹中创建文件夹:

    application/views/1/
    application/views/2/
    
  • 在 的构造函数中切换基本文件夹CoreController
于 2009-07-15T10:07:15.413 回答
0

像 Django 使用它的可选“站点”框架那样做:

  1. 将站点添加到您的模型。
  2. 在站点和现有模型之间建立关系。
  3. 加载 Site::get_current_site() 并使用它的属性。

Residuum 的方法非常适合组织文件。

于 2009-07-15T10:14:27.770 回答