【问题标题】:Codeigniter: passing data to an includeCodeigniter:将数据传递给包含
【发布时间】:2015-03-02 21:32:34
【问题描述】:

我知道如何通过控制器中的数据数组将数据传递给页面视图,但我使用的模板独立于控制器加载导航视图,如下所示:

echo isset($nav) ? $this->load->view($nav) : '';

我想将动态数据传递给导航视图,但我不想通过不会很干燥的控制器数据数组为每个页面单独加载它。有没有办法通过模板中的代码来传递?

【问题讨论】:

标签: php codeigniter


【解决方案1】:

下一个解决方案:

型号:

class Model_Index extends CI_Model {

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

        $sql = "...";

        $query = $this->db->query($sql);

        return ($query->num_rows()>0) ? $query->result() : false;

     }
}

查看:

$this->ci =& get_instance();
$this->ci->load->model('model_index');
$data = $this->ci->model_index->get_data();

print_r($data);

【讨论】:

    【解决方案2】:
    $this->load->view({template}, {vars});
    

    {template} - 模板文件名
    {vars} - 模板数组

    样本:

    $vars['title'] = 'Hello World';
    $this->load->view('test', $vars);

    此代码从 application/views/test.php 加载模板并将使用 $title 变量。

    在模板中使用加载其他模板:

    $this->view('other');
    

    【讨论】:

    • 好的,但我想从数据库中提取数据,所以我希望 $vars 包含从模型中获取的对象。目前我正在从控制器加载模板视图,并且 $data 告诉模板要加载哪个子视图。 $data 当前也包含导航数据对象,但我不想为每个视图都重复这一点。当模板加载导航子视图时,我想在那个阶段只拉一次导航对象 - 但我不知道是否可能。
    【解决方案3】:

    感谢这个优雅的问题解决方案!

    经过更多的脑筋急转弯,我想出了另一种不太全面的处理方式,方法是在 Controller 的开头声明 $data 变量,然后在 Constructor 中添加公共数据元素。然后,您可以在视图方法中将特殊视图数据元素添加到同一数组中,并将整个数据元素发送到视图。这节省了在每个视图方法中添加通用数据元素,尽管它显然只适用于该控制器加载的视图。不过很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-09
      • 2014-01-27
      • 1970-01-01
      • 2011-08-21
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多