4

codeigniter でビューを処理する最善の方法を決定しようとしています。今、私が考えていることは、あまりにも乱雑に思えます。

現在、関連するビューが 3 つあります。

1) ヘッダー 2) コンテンツ 3) フッター

すべてのコントローラーには、このようなものがあります。一部のコントローラーでは、これが数回行われます (同じコントローラーで異なる機能が使用されます)。

$this->load->view('head', $data);
$this->load->view('volunteers/add_profile.php',$content_data);
$this->load->view('foot'); 

すべての単一ページにヘッダーとフッターをロードする必要があるのは、かなりばかげているようです。ただし、各ページのヘッダーにはわずかに異なるデータ (メタ タグ、スタイル シート、読み込まれたスクリプトなど) が含まれます。

これを行うためのよりクリーンな方法はありますか?

ありがとう!

4

5 に答える 5

4

のようなメソッドで親コントローラーを作成するのが好きrenderPage('content_view', $data)です。そのメソッドには、ヘッダー、メニュー、フッターなどを含めることができます。そうすれば、ビューの読み込みに関するすべてのものがコントローラーに保持され、すべてのアクションまたはビューでヘッダー、メニュー、またはフッターを気にする必要がなくなります。また、子コントローラーはrenderPage()目的に合わせてメソッドを再定義できるため、柔軟性があります。

複数のコンテンツビューをロードする必要がある場合はrenderPage()、文字列の代わりに文字列の配列を受け取るメソッドを作成できます。

于 2013-02-12T19:03:43.043 に答える
1

@TheShiftExchangeが提案したもの、またはアプリケーションが許可する場合は、各コンテンツビューからヘッダービューとフッタービューを呼び出すことができます(コントローラーから呼び出される唯一のビューです)。

于 2013-02-12T17:37:57.997 に答える
1

はい - テンプレート ビューがあります。コントローラーで:

$data['header'] = xxx;
$data['content'] = xxx;
$this->load->view('my_template', $data);

次に my_template.php ビュー ファイルで:

$this->load->view('head', $header);
$this->load->view('volunteers/add_profile.php',$content);
$this->load->view('foot'); 
于 2013-02-12T17:13:00.547 に答える
0

MY_Controller extends CI_Controllerクラスを作成する独自のコントローラーを作成し、次にMY_Controllerアクセス修飾子$data$loadviewArray.

public $data = array(); 
public $loadviewArray = array();

この後、関数を作成しますMY_Controller

public function loadview() {
   foreach ($this->loadviewArray as $key => $val) {
      $this->load->view($val, $this->data);
   }
}

次に、コントローラーAdminを作成し、コントローラー作成関数でextends MY_Controllerこのようにします。Admin extends MY_ControllerAdminindex

public function index() {
   $this->data["page_title"] = "Login";
   $this->data["records"] = $data; // You can pass data
   $this->loadviewArray = array("admin/header", "admin/login", "admin/footer");
   $this->loadview();
}

$dataアクセス修飾子配列では、ビューでデータを渡し、ビューをロードしてから、$loadviewArrayビューをロードするための関数を呼び出します。このようにすることも、今では非常に役立ちます。そして、ヘッダーとフッターのビューを別々に作成します...

于 2014-01-30T06:18:36.887 に答える
-1

https://github.com/alzalabany/codeigniter-base-controller/tree/masterを確認してください

したがって、いつでもテンプレート ライブラリを使用できます。それでも、私は何らかの理由でそれらが好きではありません!

codeigniter を使用すると、そのコアを拡張できます。上記のリンクにアクセスすると、小さな例を見ることができます

この例では、MY_controller を拡張するすべてのコントローラーがこれらのデフォルトで開始されます。

protected        $body='base/body',
                        $title='Codeigniter Z master',//txt
                        $js=array(),//filename
                        $inline_js='',//script
                        $css=array(),
                        $inline_css='',//style
                        $breadcrumb=FALSE,//<li><a>
                        $content=array(),//html
                        $noEcho = FALSE;

したがって、MY_controller でそれらを変更することを選択した場合、その効果はデフォルトになります。それ以外の場合は、$this->title = 'Codeigniter - ウェルカム ページ'; を使用します。たとえば、コントローラーコンストラクターで。

ローディング アシストは、アセットの場所を呼び出し$this->_assets()て配置するだけの非常に簡単な作業です (MY_controller.php のデフォルトの場所をアセット フォルダーに編集します)。その inline_js/css が単に呼び出す場合

$this->_assets('alert("hi");','js');

ビューをページ セクションにロードする場合は、$this->outv(view_path,view_data,section_name);

htmlを変数にロードするだけの場合は、使用できます

$this->out('フッター','フッター');

最後に ->_flush(); を呼び出すだけです。

私が使用する他のいくつかのオプション

$noEcho; 設定すると、ビューのコンテンツをブラウザに送信する前に、すべてのバッファをクリアしてエコーを削除します。

MY_controller 内でログアウトやログインなどの機能を設定することもでき、任意のコントローラからアクセスできますhttp://localhost/ci/welcome/logout

とにかく:)それがあなたの質問に答えることを願っています!

于 2014-01-30T05:19:46.107 に答える