How to configure page code encoding?

I am trying to paginate using CodeIgniter, it should be so simple according to the Codeigniter manual, even in this example it looks like

"First <1 2 3 4 5> Last"

$config['total_rows'] = $this->searchdesc_model->queryallrows(); $config['per_page'] = '10'; $config['uri_segment'] =4; $config['full_tag_open'] = '<p>'; $config['full_tag_close'] = '</p>'; $config['cur_tag_open'] = '<b>'; $config['cur_tag_close'] = '</b>'; $config['first_link'] = 'First'; $config['last_link'] = 'Last'; $config['last_tag_open'] = '<p>'; $config['last_tag_close'] = '</p>' $this->load->library('Company_Creation'); 

in the view, I call it only as pagination-> create_links () ;? > (or I send it through the view when I call it from the controller, yet I only get this

1 2 3>

and there is no way to make it look like exmaple, it may seem so fictitious, but can someone help me? or is the problem similar?

thanks

EDIT 1

 $config['total_rows'] = $this->searchdesc_model->queryallrows(); $config['per_page'] = '5'; $config['uri_segment'] =4; $config['full_tag_open'] = '<p>'; $config['full_tag_close'] = '</p>'; $config['cur_tag_open'] = '<b>'; $config['cur_tag_close'] = '</b>'; $config['first_link'] = ' First'; $config['last_link'] = ' Last'; $config['last_tag_open'] = '<p>'; $config['last_tag_close'] = '</p>'; $config['next_link'] = ''; $config['next_tag_open'] = '<p id="nextbutton" style="padding-left:5px;">'; $config['next_tag_close'] = '</p>'; $config['prev_link'] = ''; $config['prev_tag_open'] = '<p id="prevbutton" style="padding-right:5px;">'; $config['prev_tag_close'] = '</p>'; $config['num_links']=4; $data['retorno'] = $this->searchdesc_model->queryalldb($config['per_page'],$this->uri->segment(4,0)); $config['total_rows']=1000; $this->pagination->initialize($config); 

I did this in accordance with some tips that I get, as you said, when a lot of data works well, but I LOVE to show the first and next button all the time, I set total_rows after my request (which I call with the right number of rows) and I also tried, and the results are the same, I also need to show only 4 numbers, and I use numb_links ... still not working (I don’t know why Ci docs say this should work ..) any idea?

Thanks!

+6
source share
3 answers

To do what the example shows is actually quite easy. You just need to expand the pagination library to accommodate this. I was able to do this. No matter how many pages you show, it still shows the first, last, back arrow and forward arrow.

If you want to constantly show 5 pages with a file and back, you need to have so many results to fill this page. Then you set num_links to what you would like before and after, if on the third page. So it will be 2. My changes, if you are on the first page, should display 4 pages after when applicable. See image below. White - current page. Green pages are available.

enter image description hereenter image description here

I hope I explained everything correctly and it works for you. Let me know.

controller

  $this->pagingConfig = array(); $this->pagingConfig['base_url'] = 'URL'; $this->pagingConfig['total_rows'] = 0;//TOTAL ROWS $this->pagingConfig['cur_page'] = 0;//CURRENT PAGE NUMBER $this->pagingConfig['per_page'] = 0;//YOUR RESULTS PER PAGE $this->pagingConfig['num_links'] = 2;//NUMBER OF LINKS BEFORE AND AFTER CURRENT PAGE IF ON PAGE ONE WILL SHOW 4 PAGES AFTERWARDS IF YOU HAVE ENOUGH RESULTS TO FILL THAT MANY $this->pagingConfig['first_link'] = "&lt;&lt; First"; $this->pagingConfig['last_link'] = "Last &gt;&gt;"; $this->pagingConfig['full_tag_open'] = "<div class='pagination'>"; $this->pagingConfig['full_tag_close'] = "</div>"; $this->pagingConfig['last_tag_open'] = ""; $this->pagingConfig['first_tag_close'] = ""; $this->pagingConfig['anchor_class'] = "page"; $this->pagination->initialize($this->pagingConfig); $strPaging = $this->pagination->create_links(); 

ADVANCED LIBRARY LIBRARY

 function create_links() { // EDIT: ADDED THIS BECAUSE COULDN'T SEEM TO SET THIS ANYWHERE ELSE if ($this->anchor_class != '') { $this->anchor_class = 'class="'.$this->anchor_class.'" '; } // If our item count or per-page total is zero there is no need to continue. if ($this->total_rows == 0 OR $this->per_page == 0) { return ''; } // Calculate the total number of pages $num_pages = ceil($this->total_rows / $this->per_page); // Is there only one page? Hm... nothing more to do here then. if ($num_pages == 1) { return ''; } // Determine the current page number. $CI =& get_instance(); if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE) { if ($CI->input->get($this->query_string_segment) != 0) { $this->cur_page = $CI->input->get($this->query_string_segment); // Prep the current page - no funny business! $this->cur_page = (int) $this->cur_page; } } else { if ($CI->uri->segment($this->uri_segment) != 0) { $this->cur_page = $CI->uri->segment($this->uri_segment); // Prep the current page - no funny business! $this->cur_page = (int) $this->cur_page; } } $this->num_links = (int)$this->num_links; if ($this->num_links < 1) { show_error('Your number of links must be a positive number.'); } if ( ! is_numeric($this->cur_page)) { $this->cur_page = 1; } // Is the page number beyond the result range? // If so we show the last page if ($this->cur_page > $this->total_rows) { $this->cur_page = ($num_pages - 1); } // EDIT: DON'T NEED THIS THE WAY I'VE CHANGED IT // $uri_page_number = $this->cur_page; // $this->cur_page = floor(($this->cur_page/$this->per_page) + 1); // EDIT: START OF MODIFIED START AND END TO WORK HOW I WANT $totalLinks = ($this->num_links*2)+1; if($totalLinks > ($this->total_rows/$this->per_page)) { $totalLinks = ceil($this->total_rows/$this->per_page); } //first page if($this->cur_page == 1) { $start = 1; $end = $start + $totalLinks - 1; } //middle pages elseif($this->cur_page + $this->num_links <= $num_pages && $this->cur_page - $this->num_links > 0) { $start = $this->cur_page - $this->num_links; $end = $this->cur_page + $this->num_links; } //last couple of pages elseif(($this->cur_page + $totalLinks) > $num_pages) { $start = $num_pages - $totalLinks + 1; $end = $num_pages; //check to see if this is in the first half of links so it doesn't jump the paging if($this->cur_page <= $this->num_links) { $start = 1; $end = $start + $totalLinks - 1; } } //first couple of pages elseif(($this->cur_page - $totalLinks) < 1) { $start = 1; $end = $start + $totalLinks - 1; } // EDIT: END OF MODIFIED START AND END TO WORK HOW I WANT // EDIT: CODEIGNITERS BASE PAGING SETUP SEE ABOVE FOR MY CHANGES // $start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1; // $end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages; // Is pagination being used over GET or POST? If get, add a per_page query // string. If post, add a trailing slash to the base URL if needed if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE) { $this->base_url = rtrim($this->base_url).'&amp;'.$this->query_string_segment.'='; } else { $this->base_url = rtrim($this->base_url, '/') .'/'; } // And here we go... $output = ''; // Render the "First" link // EDIT: CHANGED TO ALWAYS SHOW FIRST LINK AT LEAST if ($this->first_link !== FALSE AND $this->cur_page != 1) { $first_url = ($this->first_url == '') ? $this->base_url."1" : $this->first_url; $output .= $this->first_tag_open.'<a '.$this->anchor_class.'href="'.$first_url.'">'.$this->first_link.'</a>'.$this->first_tag_close; } else { $output .= $this->cur_tag_open.$this->first_link.$this->cur_tag_close; } // Render the "previous" link // EDIT: CHANGED TO ALWAYS SHOW PREVIOUS LINK AT LEAST if ($this->prev_link !== FALSE AND $this->cur_page != 1) { $i = $this->cur_page-1; if ($i == 0 && $this->first_url != '') { $output .= $this->prev_tag_open.'<a '.$this->anchor_class.'href="'.$this->first_url.'">'.$this->prev_link.'</a>'.$this->prev_tag_close; } else { $i = ($i == 0) ? '' : $this->prefix.$i.$this->suffix; $output .= $this->prev_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$i.'">'.$this->prev_link.'</a>'.$this->prev_tag_close; } } else { $output .= $this->cur_tag_open.$this->prev_link.$this->cur_tag_close; } // EDIT: CHANGED THIS TO ALWAYS SHOW ALL LINKS WANTED EVEN IF ON FIRST PAGE // Render the pages if ($this->display_pages !== FALSE) { // Write the digit links for ($loop = $start; $loop <= $end; $loop++) { // EDIT: DON'T NEED THIS THE WAY I'VE CHANGED IT // $i = ($loop * $this->per_page) - $this->per_page; if ($loop >= 0) { if ($this->cur_page == $loop) { $output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page } else { $n = ($loop == 0) ? '0' : $loop; if ($n == '' && $this->first_url != '') { $output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->first_url.'">'.$loop.'</a>'.$this->num_tag_close; } else { $n = ($n == '') ? '' : $this->prefix.$n.$this->suffix; $output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close; } } } } } // Render the "next" link // EDIT: CHANGED TO ALWAYS SHOW NEXT LINK AT LEAST if ($this->next_link !== FALSE AND $this->cur_page < $num_pages) { $output .= $this->next_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.($this->cur_page+1).$this->suffix.'">'.$this->next_link.'</a>'.$this->next_tag_close; } else { $output .= $this->cur_tag_open.$this->next_link.$this->cur_tag_close; } // Render the "Last" link // EDIT: CHANGED TO ALWAYS SHOW LAST LINK AT LEAST if ($this->last_link !== FALSE AND $this->cur_page != $num_pages) { $i = (($num_pages)); $output .= $this->last_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.$i.$this->suffix.'">'.$this->last_link.'</a>'.$this->last_tag_close; } else { $output .= $this->cur_tag_open.$this->last_link.$this->cur_tag_close; } // Kill double slashes. Note: Sometimes we can end up with a double slash // in the penultimate link so we'll kill all double slashes. $output = preg_replace("#([^:])//+#", "\\1/", $output); // Add the wrapper HTML if exists $output = $this->full_tag_open.$output.$this->full_tag_close; return $output; } 
+9
source

The only reason you get 1 2 3 > instead of Β« First < 1 2 3 4 5 > Last Β» is because you simply don't have enough lines in your result to create more than 3 pages.

  • The first and last links are not displayed by default if you do not need them. This is not very clear from the documentation .

  • You will not get the β€œPrevious” links until you advance page 1, the example is actually on page 3 (β€œ3” is in bold).

  • Since you provide your own templates in the configuration instead of using the default values, your actual results will be slightly different.

If you want to do a quick test to see more links, simply reduce per_page to a lower number or include several lines in your total_rows . The total number of displayed links can also be configured using num_links .

+5
source

For those people who are developing their CI application using PostgreSql and cannot understand why the limit + page offset works "weird":

With ontroller:

 ... $offset = ($page-1)*$config["per_page"]; $this->reporting_model->some_fetch_method($id, $config["per_page"], $offset); ... 

M Odel:

 ... $this->db->limit($limit_perpage, $offset); $this->db->where("id", $id); $this->db->get('some_table'); ... 
0
source

Source: https://habr.com/ru/post/908299/


All Articles