ベストプラクティス:ヘッダーとフッターを構築する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/176856

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top