开发者

Codeigniter reusable sections

I have a table of data from a database that I want to display on various pages of my website. Ideally, i would like to just have an include or something that will go off and get the data, and return the html table. The html and data will be identical everytime I need to use this.

I wanted to know the best way of doing this

Thanks

EDIT

If this helps, something similar to a Django "inclusion" custom tag...for开发者_StackOverflow any django developers reading


 you need to pass the variable $data to the view method.

This is your code:

function load_my_view(){  
    $this->load->model('my_table');
    $data['my_results'] = $this->my_table->my_data();
    $this->load->view('my_view');
}

Please change it to this in order to load the $data into the view:

function load_my_view(){  
    $this->load->model('my_table');
    $data['my_results'] = $this->my_table->my_data();
    $this->load->view('my_view',$data);
}


You should use a function in a model to fetch the data you need. Your controller calls the model function and sends the returned information to a view. You don't need to use traditional php includes with Codeigniter. I recommend a review of the user guide. It's very good and will tell you all the basic stuff you need to know to develop with CI. But to get you started, you watn to use Models, Views, and Controllers. Your url will tell CI what controller and function inside that controller to run. If your url is

http://www.example.com/my_controller/load_my_view

Then CI will do what is inside the load_my_view function in the my_controller controller. function load_my_view in turn instantiates a model "my_table" and runs a database query, returns information that the controller sends to the view. A basic example follows:

Your model

class my_table extends CI_Model{
    function my_data(){
        $this->db->select('column_1,column_2,column_3');
        $this->db->from('my_table');
        $query = $this->db->get();
        if($query->num_rows()>0){
          $result = $query->result();
        }
        else{
          $result = false;
        }
        return $result;
    }


}

Your controller

class my_controller extends CI_Controller{
    function load_my_view(){  
        $this->load->model('my_table');
        $data['my_results'] = $this->my_table->my_data();
        $this->load->view('my_view');
    }

}

Your View

<ul id = "my_db_results">

    <?php foreach($my_results as $result):?>
         <li><?php echo $result->column_1." : ".$result->column_2." ( ".$result->column_3." )";?></li>
    <?php endforeach;?>
</ul>


It looks like a good oportunity to use cache: http://codeigniter.com/user_guide/libraries/caching.html


Ok, so here is one thing that worked for me, but its definitely not perfect.

I created a view in which made a call to the model getting the data then put the data into a table. This way, I only have to include this view to put the table anywhere.

I understand this completely ruins the point of having a MVC framework, but hopefully it demonstrates what I want to do...and it works

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜