複数のコントローラディレクトリを作成しないことをお勧めします。コントローラのロジックは、サイトの大部分で同じである可能性があります。モバイルバージョンとデスクトップバージョンが異なる場合に備えて、コントローラーで個別の機能を作成できます。
まず、すべてのコントローラーをカスタムコントローラーから継承させることをお勧めします。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の質問に対する私の回答を確認することをお勧めします。
お役に立てれば。