<mySnippets order="rand" ⁄>
<myContacts ⁄><email ⁄>
<windows live messenger ⁄>
<myCurriculum type="pdf" ⁄>
<myBlog show="last" ⁄>
<myNews show="rand" ⁄>
<myNews type="cat" ⁄>
<myQuote order="random" ⁄>
<myPhoto order="random" ⁄>
<myAdSense ⁄>
<myVisitorsMap ⁄>
/****** <layout> ******/ body{font-family: Tahoma, Verdana, Arial, sans-serif;font-size: 8pt;color: #000;} /****** <layout /> ******/ /****** <paginacao> ******/ .pages{padding: 0;margin: auto auto auto 12px;text-align: center;} .pages a, .pages span{ display: block;margin: 1px; width:16px auto; height: 13px; float: left; padding: 0.2em 0.5em;border: 1px solid #666;background: #fff; } .pages span.current{background: #FF7F55;color: #fff;} .pages a{text-decoration: none;} .pages a:hover{background: #FF6600;color: #fff;} .pages a.current{background: #FF7F55;color: #fff;} .pages a.current:hover{color: #FFFF99;} /****** <paginacao /> ******/ /****** <misc> ******/ a{color: #FF5500;text-decoration: underline;} a:hover{color: #0080D5;text-decoration: none;} /****** <misc /> ******/
<?php //class para automaticamente fazer o load das classes if(function_exists("__autoload")) return;{ function __autoload($class){ include_once("class.$class.php"); } } ?>
<?php define("LNG_PAGINACAO_PAGINA","Página"); define("LNG_PAGINACAO_DE","de"); define("LNG_PAGINACAO_SELECIONADA","(selecionada)"); define("LNG_BAR_FIRST","First"); define("LNG_BAR_PREVIOUS","Previous"); define("LNG_BAR_NEXT","Next"); define("LNG_BAR_LAST","Last"); define("BAR_PER_PAGE",10); define("BAR_PAGES_INTERVAL",11); define("LNG_WEBPAGE_TITLE","My Custom Pagination"); define("CHARSET","iso-8859-1"); define("DIV_ID","pages"); ?>
<?php /** * Interface MyPagination * * Especifica métodos a serem implementados * * @author pedrocorreia.net * */ interface IMyPagination{ /** * Método Construtor * * @param String $id Nome do Div * @param Int $cur_page Página corrent * @param Int $num_records Número de registos * @param Int $per_page Itens por página * @param Int $interval Intervalo de páginas que aparecem visiveis * @param String $class Class href * @param String $class_selected Class da página selecionada * @param Array $arr_page_indicators Indicadores de inicio de fim da paginação * @param String $webpage Página para onde será feito o pedido */ function __construct($id,$cur_page,$num_records,$per_page,$interval,$class="",$class_selected="",$arr_page_indicators="",$webpage=""); /** * Atribuir a página corrent * * @param Int $cur_page */ function SetCurPage($page); /** * Obter página corrente * * @return Int */ function GetCurPage(); /** * Atribuir a próxima página * */ function SetNextPage(); /** * Obter a página seguinte * * @return Int */ function GetNextPage(); /** * Atribuir a página anterior * */ function SetPrevPage(); /** * Obter a página anterior * * @return Int */ function GetPrevPage(); /** * Atribuir o intervalo de páginas * Se não forem especificados intervalos (recomendado) * o cálculo é feito automaticamente * * @param Int $start_pos Onde começa a paginação * @param Int $end_pos Onde termina a paginação */ function SetIntervalPageDelimiters($start="",$end=""); /** * Obter paginação * * @return String */ function Parse(); } ?>
<?php include_once("settings.inc"); /** * Class MyPagination * Constrói paginação * * @author pedrocorreia.net * */ class MyPagination implements IMyPagination { private $_id; private $_class; private $_class_selected="current"; private $_cur_page=1; private $_next_page=2; private $_prev_page=0; private $_num_pages; private $_per_page; private $_interval; private $_page_delimiter_start_at; private $_page_delimiter_end_at; private $_web_page; private $_arr_page_indicators; function __construct($id,$cur_page,$num_records,$per_page,$interval,$class="",$class_selected="",$arr_page_indicators="",$webpage=""){ $this->_id=$id; $this->_per_page=$per_page; if($class) $this->_class=$class; if($class_selected) $this->_class_selected=$class_selected; $this->_interval=$interval; if($arr_page_indicators) { $this->_arr_page_indicators=$arr_page_indicators; } else{ //valores por omissão $this->_arr_page_indicators=array(LNG_BAR_FIRST,LNG_BAR_PREVIOUS,LNG_BAR_NEXT,LNG_BAR_LAST); } $this->_web_page=($webpage)?$webpage:$_SERVER['PHP_SELF']; $this->_num_pages=ceil($num_records/$this->_per_page); $this->SetCurPage($cur_page); } public function SetCurPage($cur_page){ if(!$cur_page || !is_numeric($cur_page)) $cur_page=1; $this->_cur_page=$cur_page; $this->SetNextPage(); $this->SetPrevPage(); } public function GetCurPage(){return $this->_cur_page;} public function SetNextPage(){ if($this->GetCurPage()<$this->_num_pages){$this->_next_page=$this->GetCurPage()+1;} else{$this->_next_page=1;} } public function GetNextPage(){return $this->_next_page;} public function SetPrevPage(){ if($this->GetCurPage()-1>0){$this->_prev_page=$this->GetCurPage()-1;} else{$this->_prev_page=$this->_num_pages;} } public function GetPrevPage(){return $this->_prev_page;} public function SetIntervalPageDelimiters($start_pos="",$end_pos=""){ if($start_pos>0 && $end_pos>0){ $this->_page_delimiter_start_at=$start_pos; $this->_page_delimiter_end_at=$end_pos; return ; } //definir intervalos superior e inferior //relativamente à página actual $interval=intval($this->_interval/2); if($this->_interval % 2==0) { $start_at=$this->_cur_page-$interval; } else{ $interval++; $start_at=$this->_cur_page-$interval+1; } $end_at=$this->_cur_page+$interval-1; //isto acontece quando nos encontramos //no inicio ou no fim da listagem, //faz com que o intervalo de páginas //se mantenha sempre igual $aux_diff=$this->GetCurPage()+$interval; if($aux_diff>$this->_num_pages+1){ $start_at-=$aux_diff-$this->_num_pages-1; } // //verificar limites superiores e inferiores if($end_at>$this->_num_pages){$end_at=$this->_num_pages;} if($start_at<1){ $start_at=1; $end_at=$this->_interval; } // $this->_page_delimiter_start_at=$start_at; $this->_page_delimiter_end_at=$end_at; } public function Parse(){ //senão existirem registos suficientes a paginação não é construída if($this->_num_pages<$this->_per_page) return ; $const=get_defined_constants(); $this->SetIntervalPageDelimiters(); //construir paginação no invervalo pretendido for ($i=$this->_page_delimiter_start_at;$i<=$this->_page_delimiter_end_at;$i++){ $title="{$const['LNG_PAGINACAO_PAGINA']} $i {$const['LNG_PAGINACAO_DE']} {$this->_num_pages}"; if ($i==$this->_cur_page){ $title.=$const['LNG_PAGINACAO_SELECIONADA']; $href=new HRef("href_$i","{$this->_web_page}?page=$i",$i,$title,$this->_class_selected); $middle_pagination_bar.=$href->ParseObject(); } else{ $href=new HRef("href_$i","{$this->_web_page}?page=$i",$i,$title); $middle_pagination_bar.=$href->ParseObject(); } } // $complete_pagination_bar=$this->_BuildLeftMostItens().$middle_pagination_bar.$this->_BuildRightMostItens(); $div=new Div($this->_id,$complete_pagination_bar,"pages"); $result=$div->ParseObject(); return $result; } /** * Método privado * Obter os itens mais à esquerda da paginação * * @return String */ private function _BuildLeftMostItens(){ if(!$this->_arr_page_indicators[0] || !$this->_arr_page_indicators[1]) return ; //primeiras páginas $txt=$this->_arr_page_indicators[0]; $href=new HRef("left_href_1","{$this->_web_page}?page=1",$txt,$txt); $left_pagination_bar=$href->ParseObject(); $txt=$this->_arr_page_indicators[1]; $href=new HRef("left_href_2","{$this->_web_page}?page={$this->GetPrevPage()}",$txt,$txt); $left_pagination_bar.=$href->ParseObject(); return $left_pagination_bar; } /** * Método privado * Obter os itens mais à direita da paginação * * @return String */ private function _BuildRightMostItens(){ if(!$this->_arr_page_indicators[2] || !$this->_arr_page_indicators[3]) return ; //últimas páginas $txt=$this->_arr_page_indicators[2]; $href=new HRef("left_href_3","{$this->_web_page}?page={$this->GetNextPage()}",$txt,$txt); $right_pagination_bar=$href->ParseObject(); $txt=$this->_arr_page_indicators[3]; $href=new HRef("left_href_4","{$this->_web_page}?page={$this->_num_pages}",$txt,$txt); $right_pagination_bar.=$href->ParseObject(); return $right_pagination_bar; } } ?>
<?php include_once("Classes/AutoLoad.inc"); include_once("Classes/settings.inc"); //valor de exemplo //normalmente este número vai ser obtido //através de um "select count ..." à tabela $num_records=200; $my_pagination=new MyPagination(DIV_ID,$_GET["page"],$num_records,BAR_PER_PAGE,BAR_PAGES_INTERVAL); $html=new Html(LNG_WEBPAGE_TITLE,$my_pagination->Parse(),"css/style.css",CHARSET); $output = new Output(); $output->AddElement($html->Parse()); $output->Parse(); ?>