こんにちは私は何かについて質問があります。私はCIでウェブサイトを作成するのに忙しく、自分自身に問題/質問を克服しました。CIのナビゲーション用のコードはどこに配置しますか?コントローラーまたは常に含める1つのビューで?
2 に答える
アップデート
これは私がここに投稿する最後の応答です。
あなたはあなたのコントローラーにナビゲーションを持っていることに完全に固執しているので、あなたができることはここにあります。コントローラに配列としてデータをロードします。ナビゲーションに表示される各リンクをその配列の一部にします。データをビュー(理想的には、前に説明したtemplate.phpビュー)に渡し、配列をforeachループで実行します。
5行のコードしかないので、ナビゲーション用に完全に別個のビューファイルを作成したくないので、それをテンプレートファイルに配置します。したがって、テンプレートは次のようになります。
<head>
<?php $this->load->view('elements/head'); ?>
</head>
<header>
<ul>
<?php foreach($menus as $menu): ?>
<li><a href='<?php print $menu["url"] ?>'><?php print $menu["title"] ?></a></li>
<?php endforeach; ?>
</ul>
</header>
<body>
<div class="content">
<?php $this->load->view($content); ?>
</div>
</body>
<footer>
<?php $this->load->view('elements/footer'); ?>
</footer>
とはいえ、このデータを実際にコントローラーにエコーすることはMVCパターンに反します。コントローラでデータを宣言できますが、ビューにロードする必要があります。
また、この質問、この質問、さらにはこの質問はすべて、個別のナビゲーションビューが最適であることに同意しています。
私は通常、すべてのページに含まれているデフォルトの「template.php」ビューを持っています。内部のコンテンツは動的に読み込まれます。
この場合、ナビゲーションを「header.php」ビューファイルに入れ(ナビゲーションが一番上にあると想定)、それを「template.php」ビューにロードすることをお勧めします。これにより、コードのブロックが分離され、後でナビゲーションだけを簡単に変更できるようになります。テンプレートファイルは次のようになります。
<head>
<?php $this->load->view('elements/head'); ?>
</head>
<header>
<?php $this->load->view('elements/header'); ?>
</header>
<body>
<div class="content">
<?php $this->load->view($content); ?>
</div>
</body>
<footer>
<?php $this->load->view('elements/footer'); ?>
</footer>
通常、私のナビゲーションはWebサイトの上部にあるため、すべてのhtml、header、metaタグを使用してheader.phpを作成します。次に、bodyタグの後に、ナビゲーションに必要なコードがあります。
いくつかの変数を渡すか、URIセグメントを使用して現在のページを検索できるため、stackoverflowのナビゲーションと同じように、ナビゲーションを強調表示できます。現在、[質問]セクションが強調表示されています。
テンプレートビューを作成できます。コントローラーで次のようにします。
public function index(){
$data['title'] = 'Site title'
$data['current_page'] = 'Home'
//the view you want to load
$data['view'] = 'home';
//loads the vars across all views
$this->load->vars($data);
//loads the view wich will have our template
$this->load->view('template');
}
これで、ビューテンプレートは次のようになります。左の列などがある場合は、必要に応じてレイアウトを変更できることを忘れないでください。
<?php
$this->load->view('header');
//this is the view we loaded on our controller
$this->load->view($view);
$this->load->view('footer');
?>
たとえば、ビューヘッダーにはナビゲーションシステムがあり、変数current_pageを使用してホームのメニューアンカーを強調表示し、title変数を使用してページ全体に動的なタイトルを付けています。