库调用头视图- CodeIgniter


Library calls in header view - CodeIgniter

我需要调用一些库函数,以便在我的头部视图中正确显示一些数据-什么是最好/正确的方法?

我认为我应该在所有控制器中调用这个,但它似乎有点多余。我应该走这条路吗?你有什么建议吗?

编辑:

我有一个输出页头部分的视图。在这个视图中,我有一个菜单,这取决于你是否登录,有任何收藏夹等。为了确定在菜单中显示什么,我必须参考一些库,例如,身份验证收藏夹库。

我尝试从视图中调用库,但是它给了我一个错误。

我想我可以加载控制器并将数据传递给每个控制器中的视图,但我会有很多重复的代码。是这条路吗?

是的,在每个控制器或方法中手动分配相同的数据给分部视图是多余的。你要避免这个

任何像样的模板库都应该能够为你处理这个问题。你可以在谷歌上搜索一个解决方案,或者自己写一个。

在这里,在模型代码中,它可能类似于:

class Template {
    public $data = array();
    function area($area_name)
    {
        $CI =& get_instance();
        $data = isset($this->data[$area_name]) : $this->data[$area_name] ? NULL;
        $CI->load->view('templates/'.$area_name, $data);
    }
    function set_data($area_name, $data)
    {
        $this->data[$area_name] = $data;
    }
}

然后在控制器中,像这样:

$this->template->set_data('header', $my_data);

然后在视图中,像这样:

<header><?php echo $this->template->area('header'); ?></header>
<div><?php echo $this->template->area('content'); ?></div>
<footer><?php echo $this->template->area('footer'); ?></footer>

这是过度简化了,有一百万种方法来处理它,但我绝对建议编写一些类来处理你的模板,而不是仅仅使用$this->load->view()来处理所有事情,即使它只是一个加载视图的包装器。

为了避免在每个控制器中手动设置相同的数据,使用MY_Controller,在模板类__construct()中设置它,或者直接从视图文件中调用它,无论源是什么(模型,库等)。父MVC可能会流泪,但有时这是最简单的,甚至是最有意义的。

如何使用控制器扩展的快速示例:

// File: application/core/MY_Controller.php
class MY_Controller extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $data['var_name'] = $this->some_lib->get_data();
        $data['var_name2'] = $this->some_model->get_more_data();
        $this->template->set_data('header', $data);
    }
}

然后,您的所有控制器将扩展MY_Controller而不是CI_Controller,并且头数据将已经加载。这只是对另一个主题的一个简单的概述,使用这种方法可以实现更多的可能性。

我尝试从视图中调用库,但是它给了我一个错误。

如果库已加载并且正确调用它,则不应该发生这种情况。语法为$this->library_name->method()

无论如何,我强烈建议编写或借用某种模板类

您没有遵循MVC模型,但如果您想要,"正确"的方法是调用控制器中的函数,然后将数据传递给打印出来的视图

你应该能够在视图之前自动加载库或者在控制器中加载它。然后你就可以访问视图中的库方法,并且可以像在控制器中那样访问它们。