web-dev-qa-db-ja.com

Codeigniterテンプレートの扱い方

私はMVCにかなり慣れていないので、最近CodeIgniterを見つけました。私はまだ毎日勉強していますが、1つの問題はテンプレートエンジンです。 CodeIgniterでテンプレートを作成する最良の方法は何ですか?

CakePHPには独自のテンプレートライブラリが付属していますが、CodeIgniterにも同様の機能はありますか?

27
Martin

他のフレームワークとは異なり、CodeIgniterにはグローバルテンプレートシステムがありません。各コントローラーは、システムとは関係なく独自の出力を制御し、特に指定のない限り、ビューはFIFOです。

たとえば、グローバルヘッダーがある場合:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
<html>
    <head>
        <title><?=$title?></title>
        <!-- Javascript -->
        <?=$javascript ?>
        <!-- Stylesheets -->
        <?=$css ?>
    </head>
    <body>
        <div id="header">
            <!-- Logos, menus, etc... -->
        </div>
        <div id="content">

そしてグローバルフッター:

        </div>
        <div id="footer">
            <!-- Copyright, sitemap, links, etc... -->
        </div>
    </body>
</html>

その後、コントローラは次のようになります。

<?php
class Welcome extends Controller {

    function index() {
        $data['title'] = 'My title';
        // Javascript, CSS, etc...

        $this->load->view('header', $data);

        $data = array();
        // Content view data
        $this->load->view('my_content_view', $data);

        $data = array();
        // Copyright, sitemap, links, etc...
        $this->load->view('footer', $data);
    }
}

他の組み合わせもありますが、次のようなユーザーライブラリを使用することで、より優れたソリューションを実現できます。

下のコメントを参照

25
Ryan Schumacher

Codeigniterテンプレートを実行するためにいくつかの方法を試しましたが、私が滞在する方法は、最も速くて最も簡単です、以下のとおりです。

コントローラ内:

    //Charge the view inside array
    $data['body'] = $this->load->view('pages/contact', '', true);


    //charge the view "contact" in the other view template
    $this->load->view('template', $data);

ビューtemplate.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es"> 
<head> 
    <title>Template codeigniter</title> 
</head> 
<body> 
    <div> 
        <?=$body?>
    </div> 
    <div class="clear"></div> 
    <div>Footer</div> 
    </div> 
</body> 
</html> 

$bodyはビューの連絡先です。

14
jruzafa

すべてのビューを含むライブラリを作成し、コンテンツビューに送信する必要があるデータを送信します。これで全部です!

<?php
class Display_lib
{

    public function user_page($data,$name)
    {
        $CI =& get_instance ();

        $CI->load->view('preheader_view',$data);
        $CI->load->view('header_view');
        $CI->load->view('top_navigation_view');
        $CI->load->view($name.'_view',$data);
        $CI->load->view('leftblock_view',$data);
        $CI->load->view('rightblock_view',$data);
        $CI->load->view('footer_view');        
    }
}
13
SpartakusMd

このライブラリは、使いやすくカスタマイズも簡単で、期待どおりの結果が得られます。

  • hTMLの重複を避ける(ヘッダー、フッター..)
  • 新しい言語を学ぶ必要はありません(!)

CodeIgniterの最もシンプルなテンプレートライブラリ

5
Jerome Jaglale

私はSmartyでCodeIgniterを使用していますが、それは素晴らしいです(Smartyが好きなら、私はそうします)。

あなたが記事コントローラーを持っているとしましょう、あなたはそれの中でこのような何かをすることができます:

class Article extends Controller {
  function show_all() {
    $articles = $this->article_model->get_all();
    $this->smarty->assign('entities', $articles);
    $this->smarty->view('list');
  }
}

そして、あなたのテンプレートで:

{include file="header.tpl"}
  <ul>
  {foreach from=$entities item=entity}
  <li>{$entity.title}</li>
  {/foreach}
  </ul>
{include file="footer.tpl"}

これの良い点は、コントローラーがヘッダーとフッターについて本当に知る必要がないことです。記事のグループをリストとして表示する必要があることを知っているだけです。そこから、物事のリストがどのように表示されるかを定義するのは、テンプレートだけです。この場合、ヘッダーとフッターの間のulにあります。

あなたができるもう一つのクールなことは、記事ではないもののためにこのリストテンプレートを使うことです。ユーザーまたはページのリストなどを作成できます。このようなテンプレートを再利用すると便利な場合があります。常にではないが、時々。

SmartIg向けのCodeIgniterの設定は非常に簡単です。 Smartyファイルをライブラリフォルダーにコピーし、その単純なラッパーを作成するだけです。ここで手順を見つけることができます:

http://devcha.blogspot.com/2007/12/smarty-as-template-engine-in-code.html

セットアップが完了したら、それはすばらしいことです。

4
GloryFish

さてあなたは実際にテンプレートのためのcodeigniterライブラリを使用することができます。最も有名なものは次のとおりです。

  1. Codeigniter Simplicity (積極的に開発)
  2. Phil Sturgeonのテンプレートライブラリ (積極的に開発されていません)
  3. CodeIgniterでのビューとテンプレートの概要 (ここでは、実際にテンプレートライブラリを最初から作成します)
2

2つの主要なテンプレートがあります。 1つはサイト用、もう1つは管理パネル用です。これがメインサイトの設定です(ほとんどが静的)... siteと呼ばれる1つのコントローラーを決定しました。これは、テンプレートファイルと各ページを呼び出し、itsファイルを表示します。

テンプレートエンジンの使用について誰も言及しないのはなぜですか? Are -just-ビューの向上/高速化

  • config/template.phpテンプレートを定義しました。 * site_template *はviewsフォルダにあります:

    $template['site']['template'] = 'site_template';
    $template['site']['regions'] = array('title','section','col2','content',);
    $template['site']['parser'] = 'parser';
    $template['site']['parser_method'] = 'parse';
    $template['site']['parse_template'] = FALSE;
    
  • config/routers.phpsiteコントローラーのリクエストを処理するルールを設定しますが、これは主に単一セグメントのURLですが、セクションが1つあります。このように構成されています。 / who-we-areそして、選択した人々/ who-we-are/robert-wayneなど:

    $route['what-we-do'] = 'site/what_we_do';
    $route['who-we-are'] = 'site/who_we_are';
    $route['who-we-are/(:any)'] = "site/who_we_are/$1"
    
  • そしてcontrollers/site.php各ページ/セクションの関数を使用して:

    class Site extends CI_Controller
    {
    function __construct() {
        parent::__construct();
        $this->template->set_template('site'); // ask for the site template
        $this->load->library('mobile');
    }
    public function index()
    {
    $data = array('section' => 'home');
    $this->template->write_view('col2', 'site/menu.php', $data);
    $this->template->write('title', "COOL PAGE TITLE", TRUE);
    $this->template->write('section', $data['section'], TRUE);
    $this->template->write_view('content', 'site/welcome', $data);
    $this->template->render();
    }
    public function who_we_are()
    {
    // this bit readies the second segment.
    $slug = str_replace('-', '_', $this->uri->segment(2, 0));
    if($slug) // IF there is a second segment we load the person.
    {
    $data['bio'] = $this->load->view('site/people/'.$slug, '', true)
    } else {
    // where it loads the general view who_we_are
    }
    // and so on for each page...
    

細かい点に注意すると、ルーターでは、URLの「/ site /」を省略できますhttp:// the site.com/who-we-are

考え?誰でも? bueller?

2
Robert

CodeIgniterでテンプレートを使用できるライブラリがあります ネイティブスタイル。テンプレート/テーマをロードするには、次のようにします。

$this->load->theme(‘theme_name’);

CSSとJavaScriptファイルをビューからロードするには、次のようにします。

$this->load->css(‘path/file.css’);
$this->load->js(‘path/file.js’);

ブラウザーがCSSおよびJSファイルをキャッシュする方法をオプションで制御できます。

1
VangelisB

使いやすいので、Carmelo Capinpinが作成したこのテンプレートライブラリに偏っています。 link text 。ライブラリにファイルをコピーするだけで準備完了です。それを使用する方法の説明は、私が提供したリンクにあります。

1
Randell

Codeigniterテンプレートは通常、単なるPHPファイルです。通常のすべてのPHP構文を使用して変数を出力し、ループを実行して、他のPHPコードを呼び出すことができます。

サンプルコントローラー:

<?php
class Blog extends Controller {

    function index()
    {
        $data['title'] = "My Real Title";
        $data['heading'] = "My Real Heading";

        $this->load->view('blogview', $data);
    }
}
?>

サンプルビュー:

<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
    <h1><?php echo $heading;?></h1>
</body>
</html>

詳細はこちらのドキュメントをご覧ください: CodeIgniterユーザーガイド:ビュー

0
pix0r

まあcodeignierにはデフォルトでそのようなライブラリはありません。しかし、異なるテーマ、ビュー、アセットを管理したい場合は、次のようにしてみてください。

https://github.com/mahadazad/php-layout-manager

0
PHPNinja

これを行う簡単な方法を提案させてください。 同様の質問に対する私の答え を検討してください。

長所:

  1. テンプレートファイルは完全なHTMLファイルにすることができます。ヘッダーとフッターを分割する必要はありません。
  2. ビューファイルは、最小限の労力でテンプレートに変換できます。
  3. 特定のビューのデータは、テンプレートで生成できます。

短所:1. template(またはlayout —追加したい場合は、 Rails way)コードを適切に構造化するためにビューの下のディレクトリ。これはPros [2]から続きます。2。コントローラからの特定のビューのデータは、最初にテンプレートに渡される必要があります。

0
iGbanam