我想在CodeIgniter中使用分页库执行大量数据。我一直在实施它,它的工作原理。但是,我有一个问题 - 每页的数据量不一致。
这是我用它制作的简单代码......
控制器
class Buku_con extends Controller {
public function Buku_con() {
parent::__construct();
$this->load->model('buku_model');
$this->load->library('pagination'); //call pagination library
}
function getBuku() {
//count the total rows of tb_book
$this->db->select('*');
$this->db->from('tb_book');
$getData = $this->db->get('');
$a = $getData->num_rows();
$config['base_url'] = base_url().'index.php/Buku_con/getBuku/'; //set the base url for pagination
$config['total_rows'] = $a; //total rows
$config['per_page'] = '10'; //the number of per page for pagination
$config['uri_segment'] = 3; //see from base_url. 3 for this case
$config['full_tag_open'] = '<p>';
$config['full_tag_close'] = '</p>';
$this->pagination->initialize($config); //initialize pagination
$data['detail'] = $this->buku_model->getBuku($config['per_page'],$this->uri->segment(3));
$this->load->view('buku_view', $data);
}
}
模型
class Buku_model extends Model {
function Buku_model() {
parent::Model();
}
function getBuku($perPage,$uri) { //to get all data in tb_book
$title=$this->session->userdata('title');
$this->db->select('*');
$this->db->from('tb_book');
$this->db->where('title','$title');
$this->db->order_by('id','DESC');
$getData = $this->db->get('', $perPage, $uri);
if($getData->num_rows() > 0)
return $getData->result_array();
else
return null;
}
}
查看
if(count($detail) > 0) {
//... html for table .....
foreach($detail as $rows) {
echo
.... $rows['id'] .....
.... $rows['title'] .....
.... $rows['author'] .....
....
}
echo $this->pagination->create_links(); ....
分页效果很好,但每页数据量与我在控制器中定义的不一致。我认为问题是由我在模型中使用的查询引起的 - 标题会话。
我希望数据每页执行10个数据,但在第1页中只有5个数据,第2页只有4个数据 - 不一致。也许这个问题也在视野中。我该怎么办?非常感谢你。
答案 0 :(得分:0)
您尚未正确计算偏移量。你可以试试这个:
$offset = ( $this->uri->segment(3) - 1 ) * $config['per_page'];
$data['detail'] = $this->buku_model->getBuku($config['per_page'], $offset);
答案 1 :(得分:0)
您可能希望使用codeigniter分页库来查看此页面的正确分页 https://stackoverflow.com/a/10123424/876117
您没有获得每个请求的所有数据。您需要仅获取指定了分页库生成的链接中的偏移量的数据。
答案 2 :(得分:0)
老兄,你的控制器上有很多疑问。还有模特(科西嘉)。
首先:尝试几乎只使用控制器上的功能。您在模型上创建的函数。多数民众赞成是正确的MVC方式。
关于你的分页问题:
尝试使用和滥用GET变量。好的,你可以通过这样的网址: http://site.com/controller/function?p=2
请参阅? “?p = 2时”?这样我就可以对我的控制器说我想在列表中看到第二页。你知道,我可以传递更多的GET变量,例如: http://site.com/controller/function?p=2&cat=romance&year=2010
以及你将如何处理这些变量:
让我们来看第二个例子(“?p = 2&amp; cat = romance&amp; year = 2010”)
$page = $this->input->get('p'); // this is more secure too. avoid use $_GET or $_POST
$category = $this->input->get('cat');
$year = $this->input->get('year');
现在,您可以使用一些函数来获取与值匹配的书籍列表:
$data['books'] = $this->book->get_by_search($page, $category, $year);
PS:在这个例子中,你加载了一个模型'book'that,它包含一个名为'get_by_search'的函数。你必须这样做才能使代码正常工作。
提示:我们永远不知道搜索可以获得多少变量。因此,您可以创建一些接收这些可能变量的模型函数。看: // model Book
public function get_by_search($page = NULL, $cat = NULL, $year = NULL, $author = NULL)
{
$perpage = 10;
// the NULL is to prevent an error if the function is called without them.
if ( ! is_numeric($page) || $page < 0)
{
$qtd = $perpage;
$offset = 0;
}
else
{
$qtd = $page * perpage;
$offset = $perpage;
}
$this->db->where('category', $cat);
$this->db->where('year', $year);
return $this->db->get('books', $perpage, $offset);
// if you want to debug your queries, do the same above, but with no return
// and then use this:
echo this->db->last_query(); die; // stop here and see the query string.
}
好吧,我希望它可以帮助你。还有更多要告诉你,但我认为你告诉我更多关于你的代码进展的更好。这个答案只是解决方案的一部分。看到?多数民众赞成不是那么简单,但我知道如何。如果您需要更多帮助,请告诉我,好吗?
嗯abraço!