2009-06-22 153 views
27

我對MVC相當陌生,最近我發現了CodeIgniter。我仍然每天都在學習,但其中一個問題是它的模板引擎。在CodeIgniter中創建模板的最佳方式是什麼?如何處理Codeigniter模板?

CakePHP帶有自己的模板庫,CodeIgniter中是否有類似的功能?

+0

你好@馬丁,我看到這是一個很老的職位和你仍然沒有標註任何答案正確。你有沒有找到解決你的問題? – 2016-10-25 05:44:17

回答

0

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 User Guide: Views

+0

嗯,是的。但我想知道是否有加快這一過程,並使其更有條理 - 所以我不會輸入

, ,樣式等...我想只在一個文件夾或庫中。把它看作wordpress,你可以在不修改每一個視圖的情況下更改模板。 – Martin 2009-06-23 00:10:32

25

不像其他框架的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); 
    } 
} 

其他有但通過用戶庫存在更好的解決方案,如:

看評論下面

+0

我是從谷歌來的,上面的鏈接不再工作了,重定向到CodeIgniter的github repo,但是你可以去那裏的wiki頁面搜索'模板'以找到十幾個不同的實現。問題。 – sg3s 2012-10-08 09:01:30

+0

也有一些很棒的模板庫,我用它們不是CodeIgniter的一部分,但可以很容易地集成,Mustache(https://github.com/bobthecow/mustache.php)和Twig(http:// twig.sensiolabs.org/) – 2012-10-08 14:10:50

+0

爲什麼這個答案有這麼多upvotes? – 2015-07-08 13:08:53

4

我用笨使用Smarty,它是偉大的(如果你喜歡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中。

你可以做的另一件很酷的事情是將這個列表模板用於非文章的事物。你可以有一個用戶或網頁列表或其他。在某些情況下,重複使用這樣的模板會很有用。並不總是,但有時候。

爲smarty設置CodeIgniter非常簡單。這是將Smarty文件複製到庫文件夾併爲其創建簡單包裝的問題。你可以在這裏找到說明:

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

一旦你設置了它的偉大。

1

我偏向於由卡梅羅卡賓犬製作的模板庫,因爲它很容易使用:link text。只需將文件複製到磁帶庫中,即可開始使用。關於如何使用它的說明在我提供的鏈接中。

12

製作,包括所有的意見圖書館和發送,您需要發送到您的內容視圖的數據。這就是全部!

<?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');   
    } 
} 
14

我試過幾種方法來做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是視圖接觸。

2

我有兩個主要模板;一個用於網站,另一個用於我們的管理面板。這裏是我的主站點(主要是靜態的)的設置...我決定使用一個名爲site的控制器它調用模板文件和每個頁面,並獲取視圖文件。

爲什麼沒有人提到模板引擎的使用? Are -just- views better/faster

  • 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.php我設置規則來處理它們的單段網址大多爲 site控制器的請求,但我們做 有一個部分,其構造因此; /誰,我們 - 是,然後選擇人/誰,我們 - 是/羅伯特 - 韋恩等 :

    $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中離開了`/網站/」, HTTP://的site.com/who-we-是

想法?任何人? bueller?

0

允許我提出一個更簡單的方法來做到這一點。考慮my answer to a similar question

優點:

  1. 你的模板文件,可以是一個完整的HTML文件。你不必打破頁眉和頁腳。
  2. 任何視圖文件都可以用最小的努力變成模板。
  3. 特定視圖的數據可以在模板中生成。

缺點: 1.您可能需要添加一個template(或layout - 如果你想這樣做的Rails的方式)目錄下的意見,以便正確地組織你的代碼。這來自Pros [2]。 2.來自控制器的特定視圖的數據首先必須傳遞給模板。