1

私は CodeIgniter を使用していますが、この質問はどの MVC フレームワークにも当てはまります。5 つの異なる Web サイトを管理できるカスタム CMS を使用しています。ユーザーはログインしてこれらのサイトを切り替えます。サイトの各領域にコンテンツを追加できます。入力できるCMSやデータは各サイト共通です。

公開されているサイトはすべて、他のすべてのサイトと同じデータを含んでいるにもかかわらず、まったく異なって見え、異なるブランドを表しています。

では、これらのビューをどのように実装しますか? 私が見るべきデザインパターンはありますか?

私が今これを行うと考えることができる唯一の方法は、各コントローラーの内部に switch ステートメントを配置することです > 各 Web サイトの異なるビューを取得するアクションですが、これを行うにはもっと賢い方法が必要です。次のような大量のコードの生成を回避したいと考えています。

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を拡張させるクラスを作成します。ControllerCoreControllerHome

    class CoreController extends Controller {}
    class Home extends CoreController {}
    
  • site_idsを使用してビューフォルダーにフォルダーを作成します。

    application/views/1/
    application/views/2/
    
  • のコンストラクタでベースフォルダを切り替えますCoreController
于 2009-07-15T10:07:15.413 に答える
0

Do it the way Django does with its optional "sites" framework:

  1. Add Site to your models.
  2. Establish a relationship between Site and your existing models.
  3. Load Site::get_current_site() and use its attributes.

Residuum's approach is good for organizing the files.

于 2009-07-15T10:14:27.770 に答える