Al final, he hecho algo así
Código PHP:
function getPageLine($page, $title = "") {
return '<li '.($page == $this->_page ? 'class="active"' : null ).'><a href="#" class="datatable_reload" data-source="'.$this->_source.'" data-id="'.$this->_id.'" data-search="'.$this->_search_query.'" data-page="'.($page).'">'.($title == "" ? $page : $title).'</a></li>';
}
function getPages() {
if(!$this->_pagination_enabled) return "";
if($this->_table_total_rows > 0 && $this->_table_total_rows > $this->_limit) {
$total_paginas = ceil($this->_table_total_rows / $this->_limit);
$paginator = '<ul class="pagination pull-right" style="margin: 0px;">';
if($this->_page != 1) $paginator .= $this->getPageLine(1, "«");
$page_lines = array();
for($i = ($this->_page - 2); $i <= ($this->_page + 2); $i++) {
$page = $i > 0 ? $i : 5-abs($i);
if($page > $total_paginas) $page = $i - 5;
$page_lines[$page] = $this->getPageLine($page);
}
ksort($page_lines);
foreach($page_lines as $line) $paginator .= $line;
if($this->_page != $total_paginas) $paginator .= $this->getPageLine($total_paginas, "»");
$paginator .= '</ul>';
return $paginator;
}
else return "";
}
Que creo que es más legible que el anterior.
Voy a darle un vistazo al Decorator :P