7

まず、この投稿にご迷惑をおかけしましたことをお詫び申し上げます。ここに質問を投稿するのはこれが初めてであり、これに慣れるにはもっと時間が必要です。

Q1。次のように、フロントエンドバックエンド用に2つの「マスターコントローラー」を作成します。

  • MY_ControllerCI_Controllerを拡張します
  • フロントエンドはMY_Controllerを拡張、すべてのフロントエンドコントローラーはフロントエンドを拡張します
  • BackEndMY_Controllerを拡張し、すべてのバックエンドコントローラーはBackEndを拡張します。

HMVC(MX)でそれを行うための最良の方法は何ですか?

MY_Controller、Frontend、Backendの3つのクラスをMY_Controller.phpに入れるというアイデアを与えてくれた@Wesley Murchに感謝しますが、各クラスを1つのphpファイルに入れる方が良い(よりクリーン)と思います。それとも私は間違っていますか?私はこのような構造を作成することを考えていました:

  • ./core/MY_Controller.php(MX_Controllerを拡張)
  • ./libraries/Backend.php(MY_Controllerを拡張します)
  • ./libraries/Frontend.php(MY_Controllerを拡張)
  • autoload.phpのバックエンドフロントエンドの自動ロード
  • すべてのフロントエンドコントローラーはフロントエンドを拡張します(例class Blog extends Frontend:)
  • すべてのバックエンドコントローラーはバックエンドを拡張します(例class Admin extends Backend:)

これは、バックエンド/フロントエンドコントローラーにinclude_onceまたはrequire_once: ./libraries/ Backend.phpまたは./libraries/Backend.phpのコードをもう1行追加しなくても機能しますか?


Q2。HMVCで複数のテーマを実装するにはどうすればよいですか?たとえば、MVCでは、次のように2つのテーマを構成できます。

  • ./application/views/ theme1 /view_files.php
  • ./application/views/ theme2 /view_files.php

しかし、HMVCでは、ビューフォルダーは別々のフォルダー内にあり、複数のテーマを実装する場合は、通常、次のようにする必要があります。

  • ./application/modules/ module1 / views / theme1 /view_files.php
  • ./application/modules/ module1 / views / theme2 /view_files.php
  • ./application/modules/ module2 / views / theme1 /view_files.php
  • ./application/modules/ module2 / views / theme2 /view_files.php

テーマのすべてのビューファイルを1つのフォルダーに入れたいので、それは私が望んでいることではありません。後で新しいテーマを作成する場合は、1つのテーマフォルダーのみを複製する必要があります。しかし、HMVCモデルを壊さずにそれを行うにはどうすればよいのでしょうか(私が知る限り、HMVCモデルでは、モデル、ビュー、コントローラーは1つのモジュールフォルダーにある必要があります-少なくともCIでは)。それは私が立ち往生している紛争です。

4

1 に答える 1

9

開くか作成core/MY_Controller.phpし、MY_Controllerクラスを作成して拡張MX_Controllerし、同じファイルで他のベースコントローラーを作成して拡張しMY_Controllerます。コピー/貼り付けして開始できる例を次に示します。

<?php defined('BASEPATH') OR exit('No direct script access.');

class MY_Controller extends MX_Controller {

    public function __construct()
    {
        // do some stuff here that affects all controllers
    }

}

class Frontend_Controller extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
    }

}

class Backend_Controller extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
        // Check admin login, etc.
    }

}

/* end file application/core/MY_Controller.php */

「複数のテーマ」に関する限り、何が必要かわからない。スタイルシート?HTMLテンプレート?ユーザーに切り替える必要がありますか、それとも手動で切り替えますか?モバイルデバイスを検出し、それに応じてテーマを変更する必要がありますか?上記のすべて?「最良の」方法は、実装によって異なります。

MY_Controller.phpから拡張された2つのライブラリを作成し、それらを自動ロードすることを考えています。それは機能しますか?

なぜあなたが必要なのか、したいのかわからない...ただそれをしないでください。これらのクラスは、他のコントローラーでのみ拡張する必要があります。

テーマについては、次のようなビューに複数のテーマを設定したいと思います。-/views/theme1/view_files.php-/views/theme2/view_files.php js / css / imagesについては、自分で調整できます。最初はテーマを修正しますが、後でユーザーが選択できるようにする場合があります。MVCでは、上記のように/ views /のサブフォルダーにテーマを配置できますが、HMVCでは、ビューフォルダーが分離されているため、テーマにそれらを配置する別の方法を見つける必要があります(同じテーマのすべてのビューファイルが1つだけになるようにしたい)フォルダ)..

これはここで取り組むには広すぎる質問であり、まだ何も試したことがないように思われるので、最低限の例を示します。

class MY_Controller extends MX_Controller {

    public function __construct()
    {
        // do some stuff here that affects all controllers
        $this->theme = 'theme1'; // matches your directory name in /views/themes/
    }

}

コントローラから:

$this->load->view('themes/'.$this->theme.'/my_view_file');

HMVCを使用すると、ファイルは常に現在のモジュールで検索され、存在しない場合はデフォルトのアプリケーションディレクトリにフォールバックします。何らかの理由で明示的にする必要がある場合は、パスの前にモジュール名を追加すると言うことができます(モジュール間のリソースのクロスロードの場合など)。例:

// From "blog" module
$this->load->view('events/index');
// We just loaded `modules/events/views/index` from the blog module

とにかく、これは完全な解決策ではありませんが、うまくいけば、それはあなたがアイデアを始めるのに役立つでしょう。これを行うには何百万もの方法があります。テーマをすでにサポートしている2つのテンプレートライブラリを次に示します。

于 2011-07-22T13:40:21.150 に答える