我是相当新的MVC,我发现最近笨。 我还在学习日常生活,但有一个问题是它的模板引擎。 什么是笨创建模板的最好方法?
CakePHP附带自己的模板库,有没有笨了类似的功能?
我是相当新的MVC,我发现最近笨。 我还在学习日常生活,但有一个问题是它的模板引擎。 什么是笨创建模板的最好方法?
CakePHP附带自己的模板库,有没有笨了类似的功能?
不像其他框架的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);
}
}
还有其他的组合,而是通过类似的用户库,存在更好的解决方案:
请参见下面的评论
我试过几种方法可以做到笨模板和我住的是最简单快速的方式,如下。
在控制器:
//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
是查看联系人。
让包括所有的意见图书馆和发送,您需要发送到您的内容视图的数据。 这是所有的了!
<?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');
}
}
这个库,易于使用和定制,并你所期望的正是:
最简单的模板库笨
我用笨使用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的设置笨是非常简单的。 这是Smarty的文件复制到库文件夹,并为它创建一个简单的包装的问题。 你可以在这里找到的说明:
http://devcha.blogspot.com/2007/12/smarty-as-template-engine-in-code.html
一旦你设置了它的伟大。
我有两个主要的模板; 一个网站和一个为我们的管理面板。 这里是我的设置对于我们的主网站(大多是静态的)......我决定叫一个控制器上site
,它调用模板文件和每个网页并获取其视图文件。
为什么没有人提到模板引擎的使用? 是-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.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-are
想法? 任何人? bueller?
那么实际上你可以使用一个笨库模板。 最著名的有:
我对卡梅隆通过做Capinpin这个模板库偏颇,因为它是如此易于使用: 链接文本 。 只要拷贝文件在您的图书馆,你准备好去。 关于如何使用它为我提供的链接说明。
有一个库,它允许你使用模板CI中的原生风格。 要加载模板/主题只是做:
$this->load->theme(‘theme_name’);
要加载CSS和JavaScript文件从你的意见,你可以这样做:
$this->load->css(‘path/file.css’);
$this->load->js(‘path/file.js’);
您可以选择控制方式的浏览器缓存的CSS和JS文件。
一个笨模板通常只是一个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用户指南:查看
请允许我提出了一个更简单的方法来做到这一点。 考虑我的回答类似的问题 。
优点:
缺点:1。你可能需要添加一个template
(或layout
-如果你想这样做的Rails的方式)目录下的意见,以便正确地组织你的代码。 这遵循优点[2]。 2.来自控制器的特定视图的数据必须首先被传递给模板。
那么codeignier没有默认情况下,这样的库。 但是如果你想不同的主题,观点,以及资产管理尝试使用这样的:
https://github.com/mahadazad/php-layout-manager