<pedrocorreia.net ⁄>
corner
<mySearch ⁄> <mySearch ⁄>

corner
 
corner
<mySnippets order="rand" ⁄> <mySnippets order="rand" ⁄>

corner
 
corner
<myContacts ⁄> <myContacts ⁄>

<email ⁄>


pc@pedrocorreia.net

<windows live messenger ⁄>


pedrojacorreia@hotmail.com

<myCurriculum type="pdf" ⁄>


Download
corner
 
corner
<myBlog show="last" ⁄> <myBlog show="last" ⁄>

corner
 
corner
<myNews show="rand" ⁄> <myNews show="rand" ⁄>

corner
 
corner
<myNews type="cat" ⁄> <myNews type="cat" ⁄>

corner
 
corner
<myQuote order="random" ⁄> <myQuote order="random" ⁄>

corner
 
corner
<myPhoto order="random" ⁄> <myPhoto order="random" ⁄>

<pedrocorreia.net ⁄>
corner
 
corner
<myAdSense ⁄> <myAdSense ⁄>

corner
 
corner
<myVisitorsMap ⁄> <myVisitorsMap ⁄>

corner
 
 

<Construir barra de paginação ⁄ >




clicks: 10575 10575 2007-12-08 2007-12-08 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This



A paginação de registos ajuda em muito a navegabilidade de uma listagem de dados, tanto para o cliente como para o servidor. Para o cliente porque suponhamos que temos uma listagem de 1000 registos, seria exaustivo andar a fazer scroll a esses registos, além de que irá tornar o site mais lento pois será maior a quantidade de informação transmitida; bem como o parsing do html, o browser ainda se engasgava lá para o meio; no lado do servidor estar a analisar 1000 registos torna-se dispendioso em recursos assignados, quanto maior fôr o numero de registos a percorrer na tabela, maior será o tempo de processamento e consequentemente o tempo de espera a enviar a resposta.

Como tal a paginação torna-se importante, poupa tráfego na rede, ajuda o cliente na usabilidade do site e permite libertar o servidor para outras tarefas. Já tinha mostrado um exemplo de paginação num snippet anterior, mas como estava lá para o meio do código ^_^'' podia passar ao lado, sendo assim criei este snippet dedicado só com a paginação. Cerca de 90% do código foi aproveitado, apenas alterei algumas coisas.

Let the code begin ...


style.css
  1. /****** <layout> ******/
  2. body{font-family: Tahoma, Verdana, Arial, sans-serif;font-size: 8pt;color: #000;}
  3. /****** <layout /> ******/
  4.  
  5. /****** <tabela> ******/
  6. td.footer{background-color: #0080C0;color:#ffffff;font-weight:normal;text-align:center;}
  7. table.main_tbl{border: solid 1px #004080; padding: 1px; border-spacing: 1px; width:100%;}
  8. /****** <tabela /> ******/
  9.  
  10. /****** <paginacao> ******/
  11. .pages{padding: 0;margin: auto auto auto 12px;}
  12. .pages a, .pages span{
  13. display: block;margin: 1px; width:16px; height: 13px; float: left;
  14. padding: 0.2em 0.5em;border: 1px solid #666;background: #fff;
  15. }
  16. .pages span.current{background: #FF7F55;color: #fff;}
  17. .pages a{text-decoration: none;}
  18. .pages a:hover{background: #FF6600;color: #fff;}
  19. .pages a.current{background: #FF7F55;color: #fff;}
  20. .pages a.current:hover{color: #FFFF99;}
  21. /****** <paginacao /> ******/
  22.  
  23. /****** <misc> ******/
  24. a{color: #FF5500;text-decoration: underline;}
  25. a:hover{color: #0080D5;text-decoration: none;}
  26. /****** <misc /> ******/



settings.inc
  1. <?php
  2. //definições de ligação à bd
  3. define("DB_SERVER","my_server");
  4. define("DB_USERNAME","my_username");
  5. define("DB_PASSWORD","my_password");
  6. define("DB_NAME","my_database");
  7. define("TBL_DADOS","my_table");
  8.  
  9. //paginação
  10. define("PER_PAGE","20");
  11. define("LNG_PAGINACAO_PAGINA","Página");
  12. define("LNG_PAGINACAO_DE","de");
  13. define("LNG_PAGINACAO_SELECIONADA","(selecionada)");
  14.  
  15. //gridview
  16. define("PAGINATION_CLASS_TABLE","main_tbl");
  17. define("PAGINATION_CLASS_TD","footer");
  18. define("PAGINATION_GENERIC_NAME","myPagination");
  19.  
  20. ?>



functions.php
  1. <?php
  2. include_once("settings.inc");
  3.  
  4. /**
  5. * Construir Paginação
  6. *
  7. * @param int $page
  8. * @param String $webpage
  9. * @param String $name_sufix
  10. * @return String
  11. */
  12. function DoPagination($page="",$webpage="",$name_sufix=""){
  13. $const=get_defined_constants();
  14. $name="{$const['PAGINATION_GENERIC_NAME']}$name_sufix";
  15.  
  16. return DoPaginationTable($page,$const['TBL_DADOS'],$name,$_SERVER['PHP_SELF']);
  17. }
  18.  
  19. /**
  20. * Construir linha com paginação
  21. *
  22. * @param Int $current_page_num
  23. * @param String $table
  24. * @param String $name_sufix
  25. * @param String $webpage
  26. * @param String $extraSQL
  27. * @param String $extraHref
  28. * @return String
  29. */
  30. function DoPaginationTable($current_page_num,$table,$name_sufix="",$webpage="", $extraSQL="",$extraHref=""){
  31. $const=get_defined_constants();
  32.  
  33. if(!$current_page_num || $current_page_num<0 || !is_numeric($current_page_num)){
  34. $current_page_num=0;
  35. }
  36. else {
  37. $current_page_num--;
  38. }
  39.  
  40. $iSQL="Select count(*) From `$table` $extraSQL";
  41. $db=connectDB();
  42. $sql=mysql_query($iSQL) or die(mysql_error());
  43. $myrow=mysql_fetch_array($sql);
  44. mysql_close($db);
  45.  
  46. $numRegs=$myrow[0];
  47. if ($numRegs>$const['PER_PAGE']){ //caso o número de registos seja > perPage, constrói a barra, c.c., não
  48. $regSplit=$numRegs/$const['PER_PAGE'];
  49. if($numRegs%$const['PER_PAGE']>0) $regSplit++;
  50.  
  51. $numPagesTotal=intval($regSplit);
  52. $paginationBar="<div class='pages'>";
  53.  
  54. for ($i=1;$i<=$regSplit;$i++){
  55. $title="{$const['LNG_PAGINACAO_PAGINA']} $i {$const['LNG_PAGINACAO_DE']} $numPagesTotal";
  56.  
  57.  
  58. if ($i==$current_page_num+1){
  59. $title.="&nbsp;{$const['LNG_PAGINACAO_SELECIONADA']}";
  60. $paginationBar.=DoCustomHref("$webpage?page=$i&$extraHref",$i,$title,"current");
  61. }
  62. else{
  63. $paginationBar.=DoCustomHref("$webpage?page=$i&$extraHref",$i,$title);
  64. }
  65. }
  66. $paginationBar.="</div>";
  67. }
  68.  
  69. if($paginationBar) { //se existir construir tabela
  70. $row=DoTableRow("",DoTableCell("",$paginationBar,$const['PAGINATION_CLASS_TD']));
  71. $tblPaginationBar=DoTable($row,$name_sufix,$const['PAGINATION_CLASS_TABLE']);
  72. }
  73.  
  74. return $tblPaginationBar;
  75. }
  76.  
  77. /**
  78. * Construir Tabela
  79. *
  80. * @param String $rows
  81. * @param String $id
  82. * @param String $tblClass
  83. * @return String
  84. */
  85. function DoTable($rows,$id,$tblClass){
  86. if($tblClass) $tblClass="class=\"$tblClass\"";
  87. return "
  88. <table $tblClass name='$id' id='$id'>
  89. $rows
  90. </table>
  91. ";
  92. }
  93.  
  94. /**
  95. * Construir célula
  96. *
  97. * @param String $id
  98. * @param String $content
  99. * @param String $class
  100. * @return String
  101. */
  102. function DoTableCell($id="", $content, $class="",$colspan=""){
  103. if($class) $class=" class=\"$class\" ";
  104. if($colspan) $colspan=" colspan=\"$colspan\" ";
  105. if($$content) $content="&nbsp;";
  106. if($id) $id=" name=\"$id\" id=\"$id\" ";
  107. return "<td $id $class $colspan>$content</td>";
  108. }
  109.  
  110. /**
  111. * Construir linha
  112. *
  113. * @param String $id
  114. * @param String $td
  115. * @param String $class
  116. * @return String
  117. */
  118. function DoTableRow($id="",$td,$class=""){
  119. if($class) $class=" class=\"$class\" ";
  120. if($id) $id=" name=\"$id\" id=\"$id\" ";
  121.  
  122. return "<tr $id $class>$td<tr>";
  123. }
  124.  
  125. /**
  126. * Construir href
  127. *
  128. * @param String $text
  129. * @param String $class
  130. * @return String
  131. */
  132. function DoCustomHref($link,$text,$tooltip="",$class=""){
  133. if($class) $class=" class=\"$class\" ";
  134. if(!$tooltip) $tooltip=$text;
  135. return "<a href='$link' title=\"$tooltip\" $class>$text</a>";
  136. }
  137.  
  138. /**
  139. * Ligação à bd
  140. *
  141. * @return
  142. */
  143. function connectDB(){
  144. $db = mysql_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD);
  145. mysql_select_db(DB_NAME,$db) or die("<b><br/>Impossivel aceder á base de dados.</b><br/>");
  146. return $db;
  147. }
  148. ?>



index.php
  1. <?php
  2. include_once("functions.php");
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt">
  6. <head>
  7. <link rel="stylesheet" type="text/css" href="style.css" media="all" />
  8. </head>
  9. <body>
  10. <?php
  11. echo DoPagination($_REQUEST["page"]);
  12. ?>
  13. </body>
  14. </html>





Este é um exemplo da paginação:






Qualquer erro/ dúvida é só dizer ...









clicks: 10575 10575 2007-12-08 2007-12-08 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This