私は大規模な codeigniter プロジェクトを開始しており、さまざまなページ/コントローラーに表示されるデータのループなど、コンテンツのスニペット用に再利用可能な「ミニ」ビューを作成したいと考えています。
メインコントローラーのビュー内からビューを呼び出す方が良いですか? もしそうなら、どのように?または、コントローラーから「ミニ ビュー」を呼び出して、ビューのコードをメイン ビューに渡す必要がありますか?
私は大規模な codeigniter プロジェクトを開始しており、さまざまなページ/コントローラーに表示されるデータのループなど、コンテンツのスニペット用に再利用可能な「ミニ」ビューを作成したいと考えています。
メインコントローラーのビュー内からビューを呼び出す方が良いですか? もしそうなら、どのように?または、コントローラーから「ミニ ビュー」を呼び出して、ビューのコードをメイン ビューに渡す必要がありますか?
他のビュー内のビューは、ネストされたビューと呼ばれます。CodeIgniterにネストされたビューを含めるには2つの方法があります。
事前にビューをロードして、他のビューに渡します。まず、これをコントローラーに入れます。
<?php
// the "TRUE" argument tells it to return the content, rather than display it immediately
$data['menu'] = $this->load->view('menu', NULL, TRUE);
$this->load->view ('home', $data);
?>
次に<?=$menu?>
、メニューを表示したい場所にビューを配置します。
まず、これをコントローラーに入れます。
<?php
$this->load->view('home');
?>
次に、これを/application/views/home.php
ビューに配置します。
<?php $this->view('menu'); ?>
<p>Other home content...</p>
最良の方法については、2番目の方法よりも1番目の方法の方が好きです。1番目の方法を使用することでコードを混同する必要がなく、 phpを含めるようなものではないからです。間接的には両方とも同じですが、1番目の方法は2番目の方法よりも明確でクリーンです!
正直なところ、私はテンプレート ビューを作成し、コントローラーから必要なデータをロードすることでこれを行うことを好みます。これは、ビューからビューをロードするよりもコードの繰り返しが少なくなり、DRY の概念に従うことを意味します。特にヘッダー、フッター、メニューなどに。
したがって、私のテンプレート ビューは次のようになります。
template.php
$this->load->view('header',$title);
$this->load->view('sidebar',$sidebar_content);
$this->load->view('main_content',$main_content);
$this->load->view('footer');
次に、コントローラーで、次のようにテンプレートに必要なデータを渡します。
$data['title'] = 'Home Page';
$data['sidebar_content']='pages/standard_sidebar';
$data['main_content'] ='pages/my_home_page';
$this->load->view('template',$data);
このようにすることには多くの利点があります。まず、複数のテンプレートを使用できることです。たとえば、私の場合、2 つの主要なテンプレートがあり、1 つはサイドバーのないフル ページ ビュー用で、もう 1 つはサイドバー付きのページ用です。また、if ステートメントを呼び出して、含めるヘッダーを決定します。通常のもの、または管理メニューがあるもの。
はい、すべてのメイン ビュー ページにヘッダー、サイドバー、フッターを含めることはできますが、それでは大量の重複コードが発生します。たとえば、すべてのページに何か新しいもの、他の小さなスニペットを追加したい場合はどうなりますか? テンプレートを使用して、適切なテンプレートにスニペットを追加すれば完了です。私がすべてのページを見つけてそこにスニペットビューを追加する別のルートに行くと、私の意見ではページに CSS を配置するのと同じで、無駄が多く、最終的には保守できません。
方法 1
このメソッドをビューに使用して、必要な場所にインクルード ビューを挿入します
$this->load->view('include/include_view');
方法 2
またはコントローラーでは、次のようなビュー以上のものをロードできます。
$this->load->view('header_view');
$this->load->view('list_view');
$this->load->view('footer_view');
データを渡す必要があるか (この場合は method2 を使用)、またはメイン ビューの特定の部分にビューを含めたいか (この場合は method1 を使用する方が良い) によって異なります。 )
方法 3
メイン ビューによるインクルード ビューへのデータの受け渡し
あなたのコントローラーに:
$data['title'] = "Title";
$this->load->view('main_view',$data);
あなたの見解では
$data2['title'] = $title;
$this->load->view('include/include_view',$data2);
データ全体をインクルード ビューに渡したい場合は、次の方法で行うことができます: コントローラーで:
$data['nestedView']['title'] = 'title';
あなたの見解では
$this->load->view('includes/included_view', $nestedView);
これは、ビュー内にビューを含める簡単な方法です。事前にビューをロードする必要はありません。ビュー パスを他のビューに渡すだけです。
コントローラーでこれを使用します:
$data['middle'] = 'includeFolder/include_template_view'; //the view you want to include
$this->load->view('main_template_view',$data); //load your main view
main_template_view には、他のビューを含めることができます。
$this->load->view($middle);