2009-07-23 8 views
2

CodeIgniterでコントローラ/ビューを使用する最良の方法は何ですか?これはCodeIgniterでコントローラとビューを使用する良い方法ですか?

私のページを作るのに悪い方法はありますか?

function index() 
{ 
    $this->load->library('carabiner');  
    $this->load->view('include/head'); 
    $this->load->view('include/home'); 
    $this->load->view('top'); 
    $this->load->view('featured'); 
    $this->load->view('eventslist'); 
    $this->load->view('footer');  
} 

function create() 
{ 
    $this->load->view('include/head'); 
    $this->load->view('top'); 
    $this->load->view('page'); 
    $this->load->view('dynamicstuff'); 
    $this->load->view('footer'); 
} 

私はこの方法で準テンプレート化しています、そしてそれは、サイトの概要を取得するため正常に動作しますが、それはアプリを作成するための最良の方法ですか? 私はCodeIgniterで約1週間働いています。私はPHPを初めて使い慣れました。

function index() 
{ 
     $this->load->library('carabiner');    
     $this->load->view('index'); 
} 

function create() 
{ 
     $this->load->view('create'); 
} 

はその後、例えば、他のテンプレートファイルが含まれています

答えて

1

すべてこれは非常に簡単ですCodeIgniter Libraryと呼ばれるダウンロードがあります。実装方法を学ぶと、コーディングが非常に簡単になります。また、各ページまたはコントローラを異なるテンプレート(レイアウト)に変更することもできます。

<?php 

    function index() { 

     $data['some_variable'] = 'some data'; 

     $this->template->write_view('content', 'page/home', $data); 
     $this->template->render(); 

    } 

?> 

どこにも使用したいどのテンプレートに変更することができます:

<?php 

    $this->template->set_template('login'); 

?> 

すべてのこれらのテンプレートが保管されている名前を持っているあなたは、次の操作を行うことができます上記の私が言及したシステムを使用して

設定ファイルに保存します。必要な数のテンプレートを作成できます。

テンプレートファイル自体は、次のようになります

<html> 
.... etc. all other html elements 
    <body> 
     header html goes here 

     <?=$content?> 

     footer html goes here 
    </body> 
</html> 

あなたもにあなたのコンテンツを書くことができるようにセクションを設定することができます。それは意見の多くを含めているので、私は通常これをしないが、あなたは、このような完全な制御が必要な場合は、あなたはまだそうすることができます:

<?php 

    function index() { 

     $data['header'] = 'header info'; 
     $data['content'] = 'content info'; 
     $data['sidebar'] = 'sidebar info'; 
     $data['footer'] = 'footer info'; 

     $this->template->write_view('content', 'page/home', $data); 
     $this->template->write_view('header', 'modules/header'); 
     $this->template->write_view('sidebar', 'modules/sidebar'); 
     $this->template->write_view('footer', 'modules/footer'); 

     $this->template->render(); 

    } 

?> 

HTMLテンプレートコード:

<html> 
.... etc. all other html elements 
    <body> 
     <div id="header"> 
      <?=$header?> 
     </div> 

     <div id="content"> 
      <div id="left"> 
       <?=$content?> 
      </div> 

      <div id="sidebar"> 
       <?=$sidebar?> 
      </div> 
     </div> 

     <div id="footer"> 
      <?=$footer?> 
     </div> 
    </body> 
</html> 

この方法では、すべてのコントローラ機能に1つのファイルを含めることを心配するだけです。 PHP 5を使用していない場合は(スイッチを切り替えてください)、<?=$content?>の代わりに<?php echo $content; ?>を使用します。

3

私は機能ごとに1つだけのビューをロードしますindex.phpのために:もちろん

<?php 
    include 'include/head'; 
    include 'include/home'; 
    include 'top'; 
    include 'featured'; 
    include 'eventslist'; 
    include 'footer'; 
?> 

、あなたはこれらのビューそして自分自身とは、それ自体は、ヘッダとナビゲーションを含むもののビューをグループ含めることができるなど

+0

これによりパフォーマンスが向上しますか? –

+0

ウェブサイトの掲載状況私はそうは思わない。プログラミングのパフォーマンス?間違いなく、レイアウトとコンテンツの間にコントローラとビューの分離と、正しく実行されるようになります。 – Residuum

+0

これは良いモデルです。コントローラーはヘッダーとフッターについてすべて知っている必要はなく、特集記事はマークアップのイベントリストよりも先に進んでいるはずです。それはすべてのビューの仕事です。 – GloryFish

3

すべてのコントローラで、私は$ page_dataという配列を保持しています。これは私が私のビューに渡す必要があるすべてのものを保持しています:ページのタイトル、リソース(js/css)をロードする、メタ記述、およびコンテンツ。

function index(){ 
    $page_data['title'  ] = 'My Page Title'; 
    $page_data['description' ] = 'All about my great page.'; 
    $page_data['content_file' ] = 'pages/index'; 
    $page_data['content_data']['books'] = $this->Books_model->get_books(); 
    $this->load->view('page-template', $page_data); 
} 

次にビューの下で、私は 'ページ-template.php'、 'header.phpの'、 'nav.php'、 'footer.php' と 'を有する:

は、それは次のようになりますpages/index.php 'と入力します。すべては、ページテンプレートを使用した、基本的なHTML/PHPです。このようなPHP探して何か:

... 
<title><?php echo $title ; ?></title> 
.... 
<body> 
    <?php $this->load->view('header'); ?> 
    <?php $this->load->view('nav'); ?> 
    <?php $this->load->view($content_file, $content_data); ?> 
    <?php $this->load->view('footer'); ?> 
</body> 

その同じパターンに続いては、あなたはそれが便利なAJAX /データフィードページの「部分的-template.php」または多分「JSON-template.php」を持っているかもしれません。

このモデルは、サイトの拡大に​​応じて非常に柔軟性が高いことがわかります。

0

私の解決策。その後

function index() 
{ 
    $data['main'] = 'content_view'; 

    $this->load->vars($data); 
    $this->load->view('template'); 
} 

...私は、ヘッダーとフッターのビューを考慮する理由を見たことがないtemplate.php

<html> 
<body> 
<div class="header">.... blah...</div> 
<div class="main"><?php $this->load->view($main); ?></div> 
<div class="footer">.... (c)2009, etc.</div> 

+0

メインコンテンツの上下の領域がインデックスの外側で何度か変更されるので、私はそれらを取ります –

+0

右...これは主なビューをロードする理由です...私は、異なるページで違う?それは本当はヘッダーではなく、そのページの内容の一部です。 – Zack

関連する問題