Возможно, кому-то пригодится мое решение. Я захотел выводить страницы с «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;
} 

position = -1; Чтобы наверняка :-) incomp[] = pagerИ он будет заменять стандартный пейджер.