代码编写器-使用代码编写器钩子在站点范围内获取数据


Codeigniter -fetching data sitewide with codeigniter hooks

我试图从数据库中获得网站任何页面的滚动新闻,而不必在网站的每个控制器中传递变量。所以我决定使用钩子而不是在每个控制器中传递滚动变量。

我确实创建了一个像这样的类

class Scroll
{
 function getScroller()
 {
  $data = array();
  $CI =& get_instance();
  $CI->db->where('a_status','active');
  $CI->db->limit(4);
  $CI->db->order_by('id','desc');
  $Q = $CI->db->get('news');
  if($Q->num_rows() > 0){
    foreach($Q->result_array() as $row){
        $data[] = $row;
    }
  }
  $Q->free_result();
  return $data;
 }

}

我现在得到的是

Severity: Notice
Message: Trying to get property of non-object
Call to a member function get() on a non-object in E:'xampp'htdocs'
谁能告诉我怎么做这个?谢谢,我想在任何控制器的视图中自动获取scrollernews,而无需传入每个控制器。由于

如果您在视图级别定义,则不需要这样做。

可以直接在视图中定义db请求。

另一种方法是有独立的控制器与单独的视图,并通过iframe加载到页面中。它通常用于"网页小部件",可以稍后加载到其他页面。

扩展CI Controller的核心类应该会减少麻烦。http://ellislab.com/codeigniter/user-guide/general/core_classes.html

<我>应用程序/核心/MY_Controller.php

class MY_Controller extends CI_Controller {
    public function __construct() {
        parent::__construct();
        //By do this, all controllers who use this class as parent controller
        //will have $news in their views
        $this->load->vars(array( 
             'news' =>  array()
        ));
    }   
}

<我>应用程序/控制器/welcome.php

class Welcome extends MY_Controller {
    public function index()
    {       
        $this->load->view('welcome_message');
    }
}

应用程序/视图/welcome_message.php

var_dump($news);

使用分隔库或帮助器,并在控制器的结构上调用该方法,如:

class My_Controller extends CI_Controller(){
    function __construct(){
      parent::__construct();
    //load your library
    //call your library method
    }
    }