如何处理Codeigniter模板?

时间:2009-06-22 23:49:40

标签: php codeigniter templates

我对MVC很新,最近我找到了CodeIgniter。我每天都在学习,但一个问题是它的模板引擎。在CodeIgniter中创建模板的最佳方法是什么?

CakePHP自带模板库,CodeIgniter中有类似功能吗?

12 个答案:

答案 0 :(得分: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);
    }
}

还有其他组合,但通过用户库存在更好的解决方案,如:

请参阅下面的评论

答案 1 :(得分: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 :(得分:13)

创建一个包含所有视图的库,并将其发送到您需要发送到内容视图的数据。这就是全部!

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

答案 3 :(得分:5)

这个易于使用和自定义的库完全符合您的期望:

  • 避免HTML重复(页眉,页脚..)
  • 无需学习新语言(!)

Most Simple Template Library for CodeIgniter

答案 4 :(得分:4)

我将CodeIgniter与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

一旦你完成了它就很棒了。

答案 5 :(得分:2)

我有两个主要模板;一个用于网站,一个用于我们的管理面板。这是我的主站点的设置(主要是静态的)...我决定在一个名为site的控制器上调用模板文件和每个页面并获取视图文件。

为什么没有人提到使用模板引擎? 是 - 正确 - 更好/更快的观点

  • 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控制器,它们是单段网址,但我们这样做 有一个部分,其结构如此; / 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...
    

并且作为精细点通知路由器让我们在网址中省略`/ site /', http:// the site.com/who-we-are

想法?任何人? bueller?

答案 6 :(得分:2)

那么你可以使用codeigniter库来模板。最着名的是:

  1. Codeigniter Simplicity(积极开发)
  2. Phil Sturgeon's Template Library(未积极开发)
  3. An Introduction to Views & Templating in CodeIgniter(这里实际上是从头开始创建模板库)

答案 7 :(得分:1)

我偏向于Carmelo Capinpin制作的这个模板库,因为它很容易使用:link text。只需复制您图书馆中的文件即可开始使用。关于如何使用它的说明在我提供的链接中。

答案 8 :(得分:1)

本地风格的

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文件。

答案 9 :(得分: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

答案 10 :(得分:0)

请允许我提出一种更简单的方法。考虑my answer to a similar question

<强>优点:

  1. 您的模板文件可以是完整的HTML文件。您不必拆分页眉和页脚。
  2. 任何视图文件都可以轻松地转换为模板。
  3. 可以在模板中生成特定视图的数据。
  4. <强>缺点: 1.您可能必须在视图下添加template(或layout - 如果您想在Rails方式中执行此操作)目录,以便正确构建代码。这来自Pros [2]。 2.必须首先将来自控制器的特定视图的数据传递给模板。

答案 11 :(得分:0)

默认情况下,codeignier没有这样的库。但是,如果您想要管理不同的主题,视图和资产,请尝试使用:

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