Powered by CodeIgniter

Советы и решения

(55)
10
10 голосов
Решаем проблемы вместе и передаем друг другу полезные знания.
Здравствуй, сообщество CoGear.
Возможно, кому-то пригодится мое решение. Я захотел выводить страницы с «0 -самая свежая», т.е. примерно так: < — 0 1 2 3 4 -->.

Вот измененный код файла pager.php:

function create_links($return = FALSE){ $CI =& get_instance(); $CI->builder->start(); d('pager'); if($this->total_rows == 0 OR $this->per_page == 0){ return ''; } $num_pages = ceil($this->total_rows/$this->per_page); $this->cur_page = intval($this->cur_page); /* if($this->cur_page >= $num_pages){ $this->cur_page = 0; } if($this->cur_page*$this->per_page > $this->total_rows) { $this->cur_page = 0; } */ if($num_pages == 1){ return FALSE; } $start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links) : 0; $end = (($this->cur_page + $this->num_links) < $num_pages-1) ? $this->cur_page + $this->num_links : $num_pages-1; $this->base_url = rtrim($this->base_url, '/') .'/'; // 'First' link if($this->cur_page <> 0){ $data['first'] = $CI->builder->a(t('first'),$this->base_url,TRUE); } // 'Previous' link if($this->cur_page > 0){ $i = $this->cur_page - 1; // if($i == 0) $i = ''; else $i = $this->prefix.$i.'/'; $data['prev'] = $CI->builder->a(t('prev'),$this->base_url.$i,FALSE,'prevlink',TRUE); } else { $data['prev'] = ''; } // Digit links for ($page = $start; $page <= $end; $page++){ $i = $page; if($i >= 0){ if($this->cur_page == $page){ $CI->builder->span($page,FALSE,'current_page'); // Current page } else{ $n = ($i == $num_pages) ? '' : $this->prefix.$i.'/'; $CI->builder->a($page,$this->base_url.$n); } } } // 'Next' link if($this->cur_page < $num_pages-1){ $data['next'] = $CI->builder->a(t('next'),$this->base_url.$this->prefix.($this->cur_page+1).'/',FALSE,'nextlink',TRUE); } else { $data['next'] = ''; } // 'Last' link if($this->cur_page < $num_pages-1){ $i = ($num_pages-1).'/'; $data['last'] = $CI->builder->a(t('last'),$this->base_url.$this->prefix.$i,TRUE); } d(); $data['pages'] = $CI->builder->compile(TRUE); $template = $CI->_template('pager pager',$data,TRUE); if(isset($CI->pager_use_get) && $CI->pager_use_get){ unset($_GET['action']); $template = str_replace('/"','/?'.http_build_query($_GET).'"',$template); } return $template; }
Вот измененный код файла _hooks.php:
function _pager($CI,$page = 0,$count = FALSE,$config = FALSE){ $page = str_replace($CI->gears->pager->prefix,'',$page); if($page < 0) $page = 0; $CI->page_num = $page; $CI->total_rows = $count; if(isset($config['per_page'])){ $per_page = $config['per_page']; } else { $per_page = isset($CI->gear->per_page) ? $CI->gear->per_page : $CI->site->per_page; } $num_pages = ceil($count/$per_page); $real_page = $page; /* if($page != 0 && $page != $num_pages) $start = $count - ($per_page*$page); else */ $start = $real_page*$per_page; if($start < 0) $start = 0; if($config) $CI->pager_config = $config; $data = array('start'=>$start,'limit'=>(int)$per_page); //->order_by('id','desc') $CI->db->limit($data['limit'],$data['start']); return $data; }
02:24 ← 27 сентября 2010 Отправить в Твиттер musgravehillmusgravehill  RSS comments 5

Комментарии (5) ↓

admin admin time 02:42 ← 27 сентября 2010 #
Приветствуем! Почему бы не запостить в виде отдельной шестеренки?
Автор
musgravehill musgravehill time 02:49 ← 27 сентября 2010 #
Дмитрий, я переделывал вашу шестеренку, ничего особенного в коде нет. Отдельно этот код нельзя использовать — только править gear/pager.
admin admin time 03:43 ← 27 сентября 2010 #
Можно переименовать в super_pager в конфиге добавив:
position = -1; Чтобы наверняка :-) incomp[] = pager И он будет заменять стандартный пейджер.
Автор
musgravehill musgravehill time 20:14 ← 27 сентября 2010 #
попробую!
firestar firestar time 18:09 ← 18 ноября 2010 #
не работает =(