1

CodeIgniter は初めてで、サブドメインにあるモバイル Web サイトを作成する必要があります。モバイルかどうかに応じてロードされる唯一の異なるものはcontrollersディレクトリです。アプリケーション フォルダーの残りの部分はすべて、両方のバージョンで問題ありません。controllersいくつかのパラメータに応じて特定のディレクトリを請求するように CodeIgniter に指示するにはどうすればよいですか?

それとも、CodeIgniter を使用してサブドメインに基づいてモバイル サイトを管理するのが最善の方法ではないでしょうか? 同じカスタム ライブラリとモデルにアクセスしたい。

私を導いてくれてありがとう、私は道に迷った!:)

4

2 に答える 2

1

複数のコントローラディレクトリを作成しないことをお勧めします。コントローラのロジックは、サイトの大部分で同じである可能性があります。モバイルバージョンとデスクトップバージョンが異なる場合に備えて、コントローラーで個別の機能を作成できます。

まず、すべてのコントローラーをカスタムコントローラーから継承させることをお勧めします。PhilSturgeonのKeepingItDryに関する投稿を参照してください。これが実装されると、リクエストがこのカスタムの「マザー」コントローラーでモバイルからのものかデスクトップからのものかを確認でき、すべての子孫コントローラーがそれを認識します。CodeIgniterのネイティブ を使用してください$this->agent->is_mobile()

class MY_Controller extends CI_Controller{
    function __construct(){
        parent::__construct();
        $this->data['agent'] = ($this->agent->is_mobile())? 'mobile' : 'desktop';
        $this->load->vars($this->data);
    }
}

変更されるのはプレゼンテーションであり、コントローラーではありません。リクエストの発信元(エージェント)がわかったので、適切なコンテンツをレンダリングできます。

ディレクトリに2つのディレクトリを作成しますviews

views
    desktop
    mobile

そして、あなたの意見を呼ぶとき:

$this->load->view($this->data['agent'] . "/theview");

コメントで言及したajaxリクエストに関しては、CodeIgniterのネイティブ $this->input->is_ajax_request()関数を使用してリクエストを確認できます。ユーザーがサイトのリンクまたはボタンをクリックし、モバイルでもデスクトップでもコントローラーが起動されると、多くの場合、同様の機能(データベース書き込みなど)を共有します...ただし、このis_ajax_request()機能を使用して、適切な応答を分岐して提供できます。プラットフォーム。

詳細については、ビュー構造に関する別のStackOverflowの質問に対する私の回答を確認することをお勧めします。

お役に立てれば。

于 2012-08-07T00:51:21.760 に答える
0

やろうとしていることを実行するには、ルーティングを確認する必要があります。表示しているデータは各ページ (モバイルと非モバイル) で同じであると想定しているため、異なるコントローラーが必要な理由はよくわかりません。モバイル プラットフォームに合わせてレイアウトが変更されるだけです。その場合、ユーザーエージェントに応じてコントローラー内のすべてのデータを収集/処理した後、別のビュー (それぞれモバイル/デスクトップビュー) をロードするだけで済みます。別のビューも必要ありません。サブドメインは言うまでもなく、別のコントローラーのセットです。これがMVCの力です。

于 2012-08-06T20:18:48.107 に答える