Codeigniter - 使用codeigniter挂钩在全站点获取数据

时间:2013-04-09 04:38:10

标签: php codeigniter

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

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

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而不必传入每个控制器。感谢

3 个答案:

答案 0 :(得分:0)

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

您可以直接在视图中定义数据库请求。

其他方法是将具有单独视图的分离控制器通过iframe加载到页面中。它通常用于“web小部件”,以后可以加载到另一个页面。

答案 1 :(得分:0)

扩展CI控制器的核心类应该可以减轻您的麻烦。 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);

答案 2 :(得分:0)

使用分离的库或帮助程序,并在控制器的构造上调用该方法,如:

class My_Controller extends CI_Controller(){

    function __construct(){
      parent::__construct();
    //load your library
    //call your library method
    }
    }