2016-12-03 15 views
0

私はCodeIgniter Frameworkの初心者です。以前は、私はLaravelを学んできました。私の問題はLaravelのBladeのような動的テンプレートを作りたいということです。だから、私はちょうどそのページで必要なスタイルとスクリプトを読み込むすべてのページで。CodeIgniterの部分的なビュー

私はCodeIgniterで作成したコードですので、カスタムスタイルとカスタムスクリプトを読み込むことができます。

template.php

<?php 
     defined('BASEPATH') OR exit('No direct script access allowed'); 

     // <hmtl> 
     $this->load->view($header); 
     if(isset($style)) 
      $this->load->view($style); 

     // <body> 
     $this->load->view($navbar); 
     if(isset($sidebar)) 
      $this->load->view($sidebar); 
     $this->load->view($content); 
     $this->load->view($footer); 
     // </body> 

     if(isset($script)) 
      $this->load->view($script); 
     // </html> 

と私のコントローラ

public function index() 
    { 
     $data = [ 
      'title'  => 'Home', 
      'header' => 'partials/_header', 
      'navbar' => 'partials/_navbar', 
      'content' => 'guest/public', 
      'footer' => 'partials/_footer' 
     ]; 
     $this->load->view('template', $data); 
    } 

私はそれで立ち往生していますので、多分あなたは、より良い考えを持っています。 Laravelでは@yield@sectionがあるので簡単です。
あなたからのアイデアは、私にとってとても役立つだろう、ありがとう。

答えて

1

最後に、私はそれを動的にする最良の方法を考え出しました。異なるページごとにカスタムスクリプトとCSSをロードする方法。ここで

がtemplate.phpのコードは、(ビューフォルダ内)である

<?php 
    defined('BASEPATH') OR exit('No direct script access allowed'); 

    $this->load->view($header); 
    $this->load->view($navbar); 
    $this->load->view($content); 
    $this->load->view($footer); 

とコントローラコントローラ

public function index() { 
    $data = [ 
     'header'  => 'partials/_header', 
     'style'   => 'partials/style/_public_css', 
     'navbar'  => 'partials/_navbar', 
     'content'  => 'guest/public', 
     'footer'  => 'partials/_footer', 
     'script'  => 'partials/script/_public_js' 
    ]; 
    $this->load->view('template', $data); 
} 

と_header.php

<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>...</title> 

    <!-- Partial CSS Here --> 
    <?php if(isset($style)) $this->load->view($style); ?> 
</head> 
<body> 
のパーシャルビューで

_navbar。PHP

<header> 
    <nav class="navbar navbar-inverse navbar-fixed-top"> 
     .... 
    </nav> 
</header> 

は、コントローラ内のコンテンツ変数は、それがpublic.php(私の場合には、あなたがロードしたい任意のページに置き換える必要があり)

<div class="container"> 
    .... 
</div> 

をロードし、最後のものは_footerですあなたのフッターがすべてのページの静的ない場合の.php

<footer> 
     .... 
    </footer> 

    <!-- JQuery HERE --> 

    <!-- any js that you will you in all pages HERE --> 

    <!-- Partial Script Here --> 
    <?php if(isset($script)) $this->load->view($script); ?> 
</body> 
<html> 

を覚えて、_footer.phpであなたのjQueryを置き、それだけでjquを配置していない場合たとえスクリプトを最初に読み込むのがベストプラクティスではないとしても、_header.phpでうまくいきます。

0

私は今までに何度か似たようなことをしたことがありますが、それはテンプレートライブラリですべて行いました。テンプレートライブラリは、それが依存するページや、出力を作成するために、荷重 - >ビュー機能を使用することになり

$this->template_library->render_page(); 

:のように、コントローラは、呼び出しで終わるだろう

$this->template_library->set_css_script('page.css'); 
    $this->template_library->set_layout('product_page'); 

のようなセッターを使用して

設定されているか設定されていない値については、ページレイアウトはhome_page、product_page、checkout_page、message_pageなどさまざまな設定レイアウトを持つことができました。

レイアウトには、メインページを作成したマスターレイアウトと、異なるページのバリエーションがありました。

私は単純なビューに戻っていましたが、ヘッダーとフッターと任意のバリアントの共通ファイルを使用しました。すべてのレイアウトやテンプレート、パーシャルを維持するよりも、多くの異なるビューファイルを維持するほうが簡単でした。

1つのことは、ビューが別のビューを読み込むことができるということです。したがって、すべてDRYを維持するために、これは、派生するページパーツビューを「関連製品」や「ブログリスト」などのために「パーシャル」フォルダに保存できることを意味します。

関連する問題