如何将模板集成到Codeigniter中?

时间:2013-01-03 09:11:57

标签: php codeigniter-2

我是Codeigniter的新手。你如何整合模板?类似的东西:

header_template.php等......

现在我这样做:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Page extends CI_Controller {

    public function index()
    {   
        $this->load->view('head_template.php');
        $this->load->view('header_template.php');
        $this->load->view('navigation_template.php');
        $this->load->view('page_view.php');
        $this->load->view('footer_template.php');

    }
}

虽然这很好,但必须有更好的方法。我必须将它包含在每个控制器中,这有点令人生畏。

我知道模板引擎,但它不是我想要的。此外,它表示Codeigniter文档中的速度很慢。

5 个答案:

答案 0 :(得分:2)

使用this temple engine非常简单和好的文档

使用CI和模板引擎检查此git repo以获取示例应用程序

github.com/mrsrinivas/ci_template

答案 1 :(得分:1)

 public function index()
{   
    $data["header"]     = $this->load->view('head_template.php',"",true);
    $data["navigation"] = $this->load->view('navigation_template.php',"",true);
    $data["footer"] = $this->load->view('footer_template.php',"",true);
    $this->load->view('page_view.php', $data, false);
}

在“page_view.php”中

<html>
<body>
<?php
  echo $header;
  echo $navigation;
  echo $footer;
?>
</body>
</html>

您可以在-http://www.codeignitor.com/user_guide/general/views.html

找到更多信息。

仅包含模板包含示例的代码 -

class Template extends CI_Controller{

 public function __construct(){
    parent :: __construct();
}

/**
 * TODO: Get the template from database or some configuration file
 * 
 * 1) Get Template hook
 * 2) Get Header
 * 3) Get Footer
 * 4) Get other hooks
 */
public function loadTemplate($viewName, $headerData = "", 
                            $viewData="", $footerData=""){
    $headerData["userId"] = (is_numeric($this->CI->session->userdata("userId")))
                            ? $this->CI->session->userdata("userId") : null;                            
    $this->CI->load->view('header/header', $headerData);
    $this->CI->load->view($viewName, $viewData);
    $this->CI->load->view('footer/footer', $footerData);
}
}

//模板类以更多代码结束

// Login.php that extends template class
class Login extends Template {
  public function Login() {
    parent :: __construct();
}

  public function getUserDetails(){
    $userDetails = $this->loadTemplate("myDataNeedToshow");

}
}

答案 2 :(得分:0)

上一位评论者列出的模板引擎很不错,但是在很长一段时间内都没有更新,而且对于你的目标可能有些过分。

虽然这可行,但我相信this very simple layout library正是您所寻找的。

这是非常基本的,但完成工作。我在过去扩展它以便轻松地允许多个“内容部分”,但我通常只是用它来快速获取html页眉和页脚。

答案 3 :(得分:0)

我所做的是在views文件夹中有一个名为template.php的文件,如下所示:

views/template.php:
<?= $this->load->view('header_view');?>
<?= $this->load->view($load_page);?>
<?= $this->load->view('footer_view');?>

然后在控制器中我称之为:

page.php文件:

$page = array(
        'meta_title' => 'Register Package',
        'load_page' => 'package_view'
        );
        $this->load->view('template', $page);

我确信有更好的方法,但是当我有时间的时候我会调查它

答案 4 :(得分:0)

助手可以帮助您实现全面整合。 我的示例代码:

Helper Functions

Controller