2010-06-02 5 views
1

J'essaie de créer une pagination dans laquelle il y a 5 éléments à la fois en fonction du nombre d'éléments dans DB. J'ai écrit ce code. mais je Dono comment aller plus loin .Son buggy..any mieux ou la modification de la pagination cettepagination utilisant php avec des données mysql

<?php 

$myresult .= "<div class='pagination' >"; 

if ($pagenum == 1) 
{ 
} 
else 
{ 
$pagenum = 1; 
$myresult .= "<a href='javascript:newPage(\"".$pagenum."\")'>&nbsp;first&nbsp;</a>"; 

$myresult .= " "; 

$previous = $pagenum-1; 
$myresult .= "<a href='javascript:newPage(\"".$previous."\")'> &nbsp;Prev&nbsp;</a>"; 

if ($pagenum == $last) 
{ 

$previous3 = $pagenum-4; 
$myresult .= "<a href='javascript:newPage(\"".$previous3."\")'> &nbsp; $previous3 &nbsp;</a>"; 

$previous2 = $pagenum-3; 
$myresult .= "<a href='javascript:newPage(\"".$previous2."\")'> &nbsp; $previous2 &nbsp;</a>"; 
} 
if ($pagenum > 2) 
{ 
$previous1 = $pagenum-2; 
$myresult .= "<a href='javascript:newPage(\"".$previous1."\")'> &nbsp; $previous1 &nbsp;</a>"; 

} 
if ($pagenum > 1) 
{ 

$previous2 = $pagenum-1; 
$myresult .= "<a href='javascript:newPage(\"".$previous2."\")'> &nbsp; $previous2 &nbsp;</a>"; 
$myresult .= " "; 

} 



} 

$myresult .= "<span class=\"disabled\"> $pagenum </span>"; 



if ($pagenum == $last) 
{ 
} 
else { 

if($pagenum < $last - 1) 
{ 
$next = $pagenum+1; 
$myresult .= "<a href='javascript:newPage(\"".$next."\")'>&nbsp; $next &nbsp;</a>"; 
} 
if($pagenum < $last - 2) 
{ 
$next1 = $pagenum+2; 
$myresult .= "<a href='javascript:newPage(\"".$next1."\")'> &nbsp; $next1 &nbsp;</a>"; 
} 
if($pagenum == 1) 
{ 
$next2 = $pagenum+3; 
$myresult .= "<a href='javascript:newPage(\"".$next2."\")'> &nbsp; $next2 &nbsp;</a>"; 

$next3 = $pagenum+4; 
$myresult .= "<a href='javascript:newPage(\"".$next3."\")'> &nbsp; $next3 &nbsp;</a>"; 
} 
if($pagenum == 2) 
{ 
$next2 = $pagenum+3; 
$myresult .= "<a href='javascript:newPage(\"".$next2."\")'> &nbsp; $next2 &nbsp;</a>"; 
} 
$next = $pagenum+1; 
$myresult .= "<a href='javascript:newPage(\"".$next."\")'>&nbsp;Next&nbsp;</a>"; 


$myresult .= "<a href='javascript:newPage(\"".$last."\")'>&nbsp;Last</a>"; 

} 
$myresult .= "</div>"; 
$myresult .= "</br>"; 
?> 
+0

La pagination dépend beaucoup de l'aspect graphique que vous avez l'intention d'atteindre! Avez-vous une image/capture d'écran/peu importe, de ce que vous essayez de créer? Avec cela, je peux vous donner un coup de main ... En ce qui concerne votre code actuel, vous répétez les mêmes instructions, et comme vous l'avez dit, c'est très buggué :) – Zuul

+0

http://drupal.org/node ? page = 2 J'essaie de créer quelque chose comme la pagination au fond. disons les boutons de pagination comme premier, prev, 3,4,5,6,7, next, last. obtenir en premier, prev, next, last a été facile mais les liens du centre 5 pages sont difficiles pour moi – Hacker

+0

j'ai trouvé la solution. Son à phpeasystep.com/phptu/29.html – Hacker

Répondre

2

Peut-être pas la meilleure réponse jamais, mais est ici quelque chose que je l'ai utilisé:

<?php 

class Pagination { 

    function __construct() { 

    } 

    function getPaginatinationNavigation($page = 1, $num_rows, $rows_per_page, $page_name) 
    { 
     $lastpage = ceil($num_rows/$rows_per_page); 

     $page = (int)$page; 
     if ($page > $lastpage) 
     { 
      $page = $lastpage; 
     } 
     if ($page < 1) { 
      $page = 1; 
     } 

     $content='<p style="text-align: center;">'; 

     if ($page == 1) { 
      $content.= " FIRST PREV "; 
     } else { 
      $content.= " <a href='$page_name?page=1'>FIRST</a> "; 
      $prevpage = $page-1; 
      $content.= " <a href='$page_name?page=$prevpage'>PREV</a> "; 
     } 

     $content.= " (Page $page of $lastpage) "; 

     if ($page == $lastpage) { 
      $content.= " NEXT LAST "; 
     } else { 
      $nextpage = $page+1; 
      $content.= " <a href='$page_name?page=$nextpage'>NEXT</a> "; 
      $content.= " <a href='$page_name?page=$lastpage'>LAST</a> "; 
     } 

     $content.= '</p>'; 

     return $content; 

    } 
} 

?> 

Importer l'objet

require_once('classes/Pagination.php'); 

Obtenez le nombre de lignes au total:

$query= "SELECT COUNT(*) FROM TABLE_NAME"; 
$row = mysql_fetch_array($getResults); 
$numRecords = $row[0]; 

faire la limite de limiter les lignes sur la base de numéro de page:

$limit = ' LIMIT ' . ($page - 1) * 25 .', 25'; 

requête en utilisant LIMIT

$query = 'SELECT * FROM TABLE_NAME' . $limit; 
$getResults=mysql_query($query) or die(mysql_error()); 

Afficher les résultats comme vous le feriez normalement:

while($row = mysql_fetch_array($getResults)) 
{ 
DISPLAY RESULTS HERE 
} 

Utilisez la classe cracher Navigation:

$pagination->getPaginatinationNavigation($page, $numRecords, 25, 'display_page_name.php'); 

Donc dans l'ensemble, pour la pagination dont vous avez besoin de faire 2 requêtes:

1) Pour obtenir le montant total d'enregistrements dans votre recherche 2) Pour obtenir les enregistrements S'Y LIMITER ces articles dans une gamme: disons 25 à 50 ou 1000 à 1050

Vous affichez les enregistrements de la requête limitée et pour passer à l'ensemble d'enregistrements suivant, vous augmentez le nombre de pages de un.

Espérons que cela aide. N'oubliez pas de nettoyer toutes les données que vous obtenez de la chaîne de requête url. Faites-moi savoir si vous souhaitez que j'explique davantage.

+0

le code de fin d'extraction des données est en cours. drupal.org/node?page=2 J'essaie de créer quelque chose comme la pagination au fond. disons pagination boutons comme premier, prev, 3,4,5,6,7, suivant, dernier – Hacker

+0

j'ai trouvé la solution. C'est à http://www.phpeasystep.com/phptu/29.html – Hacker

+0

question, une fois que vous appelez la fonction une fois, vous obtenez le nombre total de pages et le nombre total de résultats. Lors d'appels ultérieurs à la fonction lorsque vous allez aux pages suivantes, y a-t-il un moyen de ne pas faire l'appel pour obtenir le nombre total de résultats? Vous faites essentiellement deux voyages à la base de données lors du chargement d'une "nouvelle page"." – luckytaxi

Questions connexes