CodeIgniter默认布局问题:如何在CodeIgniter_2.0.2中为整个项目创建默认布局?

时间:2011-08-30 05:51:09

标签: php codeigniter

我想为整个codeigniter项目创建一个默认布局。 (像cakephp)

我还需要将值从数据库(通过控制器)传递到默认布局。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可以考虑使用模板系统。例如Template library

答案 1 :(得分:1)

您可以使用钩子来实现此目的

post_controller - 您可以使用此设置变量。
在控制器完全执行后立即调用。

display_override - 您可以覆盖显示并包含您自己的视图 覆盖_display()函数,用于在系统执行结束时将最终页面发送到Web浏览器。这允许您使用自己的显示方法。请注意,您需要使用$ this-> CI =& amp;来引用CI超级项目。 get_instance()然后通过调用$ this-> CI-> output-> get_output()

来获得最终数据

参考:http://codeigniter.com/user_guide/general/hooks.html

答案 2 :(得分:1)

CodeIgniter wiki是寻找此类帮助的好地方。

例如,这里有four different approaches来实现您想要的目标。

答案 3 :(得分:1)

实际上你可以使用一个非常简单的解决方案。这是我在 CodeIgniter 中使用布局编写的微型库:

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

class Layout {
protected $CI;

public function __construct() {
    $this->CI =& get_instance();
}

/**
 * This method loads either the default layout (defined in the config.php file with the key default_layout) or a specific layout
 * @param string $view
 * @param array $params
 * @param string $layout
 */
public function load_layout($view, $params = array(), $layout = "") {  
    // get the name of the layout file
    $layout_file = file_exists(dirname(__FILE__) . "../views/" . $layout) ? $layout : $this->CI->config->item("default_layout");
    // load it, transmit the params
    $this->CI->load->view(
        $layout_file, 
        array(
            "view_name" => $view,
            "view_params" => $params
        )
    );
}
?>

Layout.php 文件中将此文件添加到项目中,然后转到配置文件并添加以下行:

$config['default_layout'] = "your-default-layout-name.php";

最后在项目的 application / views 文件夹中创建一个新文件,并将其命名为您放入配置文件的值,即 your-default-layout-name.php 。粘贴页面基本结构的所有内容并添加到主包装器中:

<?php
    // load required view
    if (isset($view_name)) {
        $this->load->view(
                $view_name, $view_params
        );
    }        
?>

好的!现在你可以简单地替换原生:

$this->load->view("view-name.php", $params);

by:

// load the default layout
$this->layout->load_layout("view-name.php", $params);
// load a specific layout
$this->layout->load_layout("view-name.php", $params, "my-specific-layout.php"); 

它会像魅力一样发挥作用!

注意:不要忘记在您的autoload.php文件中或直接在您的脚本中包含该库。