私はコードイグナイターのファンです。正直なところ、CI の真の力は、派手な「TEMPLATING lib」や認証 lib が搭載されていないことだと思います。それでも、迅速かつ非常に迅速に独自のツールを構築するためのすべてのツールが提供されます。
したがって、私の答えはあなたが本当に求めているものではありませんが、10分以内にciで独自のいわゆるtemplaring libを構築し、スムーズに動作する方法の簡単な例です。
applicaiton/core フォルダー内に MY_Controller を作成します。
class MY_Controller extends CI_Controller {
protected $noEcho=true,$body = 'base/layout', $title = 'YOUR CONTROLLER TITLE',
$js = array(), //filename
$inline_js = '', //script
$css = array(),
$inline_css = '', //style
$content = array(); //html
内部には3つの基本機能があります
- ページパーツを設定します。
- あなたの資産を管理する
- 最終結果ページを印刷します。
1
function output($data,$section='content'){
//checking type of data to be pushed its either array or string(html)
//this is a view it should be formated like this array( viewname,$data )
if( is_array($data) ){
$this->content[ $section ][] = $this->load->view( $data[0], $data[1], TRUE );
return $this;//to allow chaing
}elseif( is_string($data) ){//this is html
$this->content[ $section ][] = $data;
return $this;//to allow chaing
}
}
2つ目は、このページにjs、css、インラインjs&cssを追加できる機能です。
function _asset( $link, $txt = FALSE ) {
if ( $txt !== FALSE ) {
if ( $txt == 'js' )
$this->inline_js[] = $txt;
elseif ( $txt == 'css' )
$this->inline_css[] = $txt;
}else{
if ( pathinfo( $link, PATHINFO_EXTENSION ) == 'css' ){
$this->css[] = link_tag( base_url( 'assets/css/' . trim( $link, "/\\" ) ) );
}else{
$this->js[] = '<script src="' . base_url( 'assets/js/' . trim( $link, "/\\" ) ) . '"></script>';
}
}
return $this;
}
最後に、すべてのパーツをまとめる関数。
protected function print_page(){
if ( $this->noEcho ) ob_clean();
$data=array();
$data[ 'title' ] = $this->title;
$data[ 'css' ] = is_array( $this->css ) ? implode( "\n", $this->css ) : '';
$data[ 'js' ] = is_array( $this->js ) ? implode( "\n", $this->js ) : '';
$data[ 'inline_css' ] = ( $this->inline_css ) ? '<style>' . implode( "\n", $this->inline_css ) . '</style>' : '';
$data[ 'inline_js' ] = ( $this->inline_js ) ? implode( "\n", $this->inline_js ) : '';
foreach ( $this->content as $section => $content ) {
$data[ $section ] = is_array( $content ) ? implode( "\n\n\n ", $content ) : $content;
} //$this->content as $section => $content
return $this->load->view( $this->body, $data );
}
3つすべてをまとめて、コントローラーをこのベースコントローラーに拡張します。
あなたが構築しようとしているサンプルページの場合、私は次のようにします:
コントローラー:
public function __construct() {
parent::__construct();
$this->title = 'Controller title';
$this->body = 'base/default';
//load all your assets.. if its across all pages then load them in MY_controller construct
$this->assets('jquery.min.js')
->assets('bootstrap.css')
->assets('alert("itworks");','js');//will be added to $inline_js
}
function index(){
$var = $This->some_model->get_data();
$this->output( array('some_View',$var) )
->output('<hr/>')
->output('THIS WILL BE IN $FOOTER','footer')
->print_page();
}
さて、それはどれほどきれいですか:) ?;
これで、コントローラーはビューセットをロードしthis->body
、すべてのセクションをそれに渡します。したがって、上記の例では、ビューは 2 つの変数を受け取ります。
- $content : 内容が悪い some_view view +
- $footer : 渡された html が含まれます。
- $css、$js、$inline_js、$inline_css 変数にはすべてのアセットが含まれています
- $title にはページのタイトルが含まれます。
最後に、この小さなデモが、CI ネイティブ ビュー ローダーのおかげでこれら 3 つの小さな関数が実行できる無限の可能性を理解するのに役立つことを願っています。