ベストプラクティス:ヘッダーとフッターを構築する最良の方法は何ですか?
-
05-07-2019 - |
質問
ヘッダーとフッターを作成する最良の方法は何ですか?コントローラからすべて呼び出すか、ビューファイルからインクルードする必要がありますか? CodeIgniterを使用していますが、これのベストプラクティスを知りたいと思っています。このように、コントローラーから含まれているすべてのビューファイルを読み込みますか?
class Page extends Controller {
function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
または単一のビューファイルを呼び出し、そこからヘッダービューとフッタービューを呼び出します:
//controller file
class Page extends Controller {
function index()
{
$data['page_title'] = 'Your title';
$this->load->view('content', $data);
}
}
//view file
<?php $this->load->view('header'); ?>
<p>The data from the controller</p>
<?php $this->load->view('footer'); ?>
これは両方の方法で行われたのを見てきましたが、今から先に進みたいと思います。
解決
この方法で試すこともできます-デフォルトビューテンプレートを定義し、コントローラーから渡された変数(この例では 'content')に基づいてコンテンツを取り込みます。
コントローラー内:
$data['content'] = 'your_controller/index';
// more code...
$this->load->vars($data);
$this->load->view('layouts/default');
次に、すべてのページのデフォルトレイアウトを定義します。 views / layouts / default.php
// doctype, header html etc.
<div id="content">
<?= $this->load->view($content) ?>
</div>
// footer html etc.
ビューには、純粋なコンテンツのみを含めることができます。 views / your_controller / index.phpには、コントローラー/データ配列から渡された変数のみが含まれる場合があります
<?= $archives_table ?>
<?= $pagination ?>
// etc.
CI wiki / FAQの詳細-(Q.ビューにビューを埋め込む方法?ネストされたテンプレート?...)
他のヒント
実際、これをかなり自分で調査した後、ヘッダーとフッターをMVCに含めるためのベストプラクティスは3番目のオプション、つまりベースコントローラーの拡張であるという結論に達しました。特に、非常にモジュール式のレイアウト(ヘッダーとフッターだけでなく、サイドバーパネル、非静的メニューなど)を構築する場合は、htxtの提案よりも柔軟性が少し高くなります。
最初に、Base_controllerクラスを定義します。このクラスでは、ページ要素(ヘッダー、フッターなど)を出力文字列に追加するメソッドを作成します。
class Base_controller extends Controller
{
var 実際、これをかなり自分で調査した後、ヘッダーとフッターをMVCに含めるためのベストプラクティスは3番目のオプション、つまりベースコントローラーの拡張であるという結論に達しました。特に、非常にモジュール式のレイアウト(ヘッダーとフッターだけでなく、サイドバーパネル、非静的メニューなど)を構築する場合は、htxtの提案よりも柔軟性が少し高くなります。
最初に、Base_controllerクラスを定義します。このクラスでは、ページ要素(ヘッダー、フッターなど)を出力文字列に追加するメソッドを作成します。
class Page_controller extends Base_controller
{
function index()
{
$data = ...; // Set content data here
$this->_standard_page($data);
}
function admin()
{
$data = ...; // Set content and header data here
$this->_page_with_admin_header($data);
}
}
次に、ページコントローラーで基本クラスを拡張し、関数を呼び出してページを構築します。
<*>
ベースコントローラーを使用すると、個々のページコントローラーで非常にクリーンなコードを実現し、ページ上の要素に個別のビューを設定できます(ビューとコントローラーの両方でコードを再利用できます)。必要なのは、共通ページの「セクション」(「フラグメント」と呼びたいと思うもの)をベースコントローラーの関数として定義することだけです。
また、ベースコントローラーが制御不能に成長し始めた場合(大規模サイトで発生する可能性があります)、サブクラスに配置することで一般的でない機能の一部を再配置し、対応するページコントローラーが元のコントローラーの代わりにそれらを拡張できるようにしますベースコントローラー。
お楽しみください
/ Jens Roland
output = '';
function _standard_header($data=null)
{
if (empty($data))
$data = ...; // set default data for standard header here
$this->_output .= $this->load->view('header', $data, true);
}
function _admin_header($data=null)
{
if (empty($data))
$data = ...; // set default data for expanded header here
$this->_output .= $this->load->view('admin_header', $data, true);
}
function _standard_page($data)
{
$this->_standard_header();
$this->_output .=
$this->load->view('standard_content', $data, true);
echo $this->_output; // note: place the echo statement in a
// separate function for added flexibility
}
function _page_with_admin_header($data)
{
$this->_admin_header($data);
$this->_output .=
$this->load->view('standard_content', $data, true);
echo $this->_output;
}
}
次に、ページコントローラーで基本クラスを拡張し、関数を呼び出してページを構築します。
<*>ベースコントローラーを使用すると、個々のページコントローラーで非常にクリーンなコードを実現し、ページ上の要素に個別のビューを設定できます(ビューとコントローラーの両方でコードを再利用できます)。必要なのは、共通ページの「セクション」(「フラグメント」と呼びたいと思うもの)をベースコントローラーの関数として定義することだけです。
また、ベースコントローラーが制御不能に成長し始めた場合(大規模サイトで発生する可能性があります)、サブクラスに配置することで一般的でない機能の一部を再配置し、対応するページコントローラーが元のコントローラーの代わりにそれらを拡張できるようにしますベースコントローラー。
お楽しみください
/ Jens Roland
最初に行う方法はよりクリーンだと思います。単にそれがレンダリングされることを知るという観点から。ビューファイルを入力して残りを見つける必要はありません。
他のビューの内部でビューを呼び出すことは悪い習慣です。これは、コントローラービューのミキシングの一種です。 CIのビュー関数を使用すると、ビュー出力を文字列として返す3番目のパラメーターを渡すことができます。これを使用して複合ビューを作成できます。
例:
class Page extends Controller {
function index() {
$data['page_title'] = 'Your title';
$this->load->view('default_layout', array(
'header' => $this->load->view('header' , array(), true),
'menu' => $this->load->view('menu' , array(), true),
'content' => $this->load->view('content', $data , true),
'footer' => $this->load->view('footer' , array(), true),
));
}
}
default_layout.php
<? echo $header, $menu, $content, $footer; ?>
このようなテンプレートを作成するには、ヘッダーとフッターを組み合わせることができます。
class Page extends Controller {
function index() {
$data['page_title'] = 'Your title';
$this->load->view('default_template', array(
'menu' => $this->load->view('menu' , array(), true),
'content' => $this->load->view('content', $data , true),
));
}
}
default_template.php
<html><head></head><body><span>Some Header HTML</span> // this is your header html
<? echo $menu, $content; ?>
<span>some footer HTML</span></body></html> // this is your footer html