我對MVC相當陌生,最近我發現了CodeIgniter。我仍然每天都在學習,但其中一個問題是它的模板引擎。在CodeIgniter中創建模板的最佳方式是什麼?如何處理Codeigniter模板?
CakePHP帶有自己的模板庫,CodeIgniter中是否有類似的功能?
我對MVC相當陌生,最近我發現了CodeIgniter。我仍然每天都在學習,但其中一個問題是它的模板引擎。在CodeIgniter中創建模板的最佳方式是什麼?如何處理Codeigniter模板?
CakePHP帶有自己的模板庫,CodeIgniter中是否有類似的功能?
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
嗯,是的。但我想知道是否有加快這一過程,並使其更有條理 - 所以我不會輸入
不像其他框架的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);
}
}
其他有但通過用戶庫存在更好的解決方案,如:
看評論下面
我是從谷歌來的,上面的鏈接不再工作了,重定向到CodeIgniter的github repo,但是你可以去那裏的wiki頁面搜索'模板'以找到十幾個不同的實現。問題。 – sg3s 2012-10-08 09:01:30
也有一些很棒的模板庫,我用它們不是CodeIgniter的一部分,但可以很容易地集成,Mustache(https://github.com/bobthecow/mustache.php)和Twig(http:// twig.sensiolabs.org/) – 2012-10-08 14:10:50
爲什麼這個答案有這麼多upvotes? – 2015-07-08 13:08:53
我用笨使用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
一旦你設置了它的偉大。
我偏向於由卡梅羅卡賓犬製作的模板庫,因爲它很容易使用:link text。只需將文件複製到磁帶庫中,即可開始使用。關於如何使用它的說明在我提供的鏈接中。
製作,包括所有的意見圖書館和發送,您需要發送到您的內容視圖的數據。這就是全部!
<?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');
}
}
我試過幾種方法來做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
是視圖接觸。
There is a library which allows you to use templates in CodeIgniter以本地風格。 要加載模板/主題只是做:
$this->load->theme(‘theme_name’);
要加載CSS和JavaScript文件從你的意見,你可以這樣做:
$this->load->css(‘path/file.css’);
$this->load->js(‘path/file.js’);
您可以選擇控制方式瀏覽器緩存CSS & JS文件。
我有兩個主要模板;一個用於網站,另一個用於我們的管理面板。這裏是我的主站點(主要是靜態的)的設置...我決定使用一個名爲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?
允許我提出一個更簡單的方法來做到這一點。考慮my answer to a similar question。
優點:
缺點: 1.您可能需要添加一個template
(或layout
- 如果你想這樣做的Rails的方式)目錄下的意見,以便正確地組織你的代碼。這來自Pros [2]。 2.來自控制器的特定視圖的數據首先必須傳遞給模板。
那麼你實際上可以使用codeigniter庫模板。其中最著名的有:
好codeignier做默認情況下沒有這樣的庫。但是如果你想不同的主題,觀點,以及資產使用這個管理嘗試:
你好@馬丁,我看到這是一個很老的職位和你仍然沒有標註任何答案正確。你有沒有找到解決你的問題? – 2016-10-25 05:44:17