Système de pagination avec date dans l'URL.

Eléphant du PHP | 75 Messages

22 janv. 2010, 23:44

Bonsoir,

Je créer un script de pagination en PHP reprenant ceci : http://www.lesgourmetsexplorateurs.com/degustation.php

Comme vous pouvez le voir, les flèches droite et gauche permettent de passer aux évènement suivants ou précédents.

Autre chose, si jamais je me trouve sur la page suivante : http://www.lesgourmetsexplorateurs.c...tion_10-12.php

On sera sur la dégustation du 10 décembre. Si l'envie me prend de cliquer sur à l'affiche, je suis toujours sur la même dégustation du 10 décembre.

J'avais fait une première version d'un script de pagination qui remplissait parfaitement la première condition. Sauf que je n'avais pas prévu que le faite d'intégrer la deuxième condition à mon script le ferait totalement modifié. :/

Code :
<?php
require 'config.php';
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
mysql_select_db(DB_BDD);
 
$page = basename($_SERVER["SCRIPT_NAME"]);
 
$nombre_news = mysql_query('SELECT COUNT(*) AS total FROM news WHERE categorie="'.$page.'"');
$retour = mysql_fetch_assoc($nombre_news);
 
$news_par_page = 1;
 
if(isset($_GET['num_page'])){
	$num_page = $_GET['num_page'];
}
else{
	$num_page = 0;
}
 
$lecture = mysql_query('SELECT * FROM news WHERE categorie="'.$page.'" ORDER BY date DESC LIMIT '.$num_page.','.$news_par_page.'');
while($row = mysql_fetch_assoc($lecture)){
	$tableau_date = explode('-',$row['date']);
	$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);
 
	$date = date('l j F Y',$timestamp);
 
	$cible = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday','January','February','March','April','May','June','July','August','September','October','November','December');
	$rempl = array('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche','janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobtre','novembre','décembre',);
 
	$date = str_replace($cible,$rempl,$date);
	?>
        // Partie HTML [...]
			<?php
			if($num_page >= 0 && $num_page < $retour['total']-1){
				$suivant = $num_page+1;
				echo '<a href="'.$page.'?num_page='.$suivant.'" class="fleche_gauche"><img src="Boutons/Icone/pre.png" border="0" /></a>';
			}
			if($num_page > 0 && $num_page < $retour['total']){
				$precedent = $num_page-1;
				echo '<a href="'.$page.'?num_page='.$precedent.'" class="fleche_droite"><img src="Boutons/Icone/sui.png" border="0" /></a>';
			}
			?>
	// Partie HTML [...]
<?php
}
?>
Dans là seconde version, il me faudrait des dates à la place de numéros. J'ai testé pas mal de chose mais rien ne fonctionne...

En clair :

Je dois réunir trois conditions dans la pagination :
- Un bouton précédent et suivant afin de passer au évènement précédent et suivant...
- Si l'envie me prend d'aller sur une autre page, on doit toujours rester sur la même date.
- Et je veux que les pages soient identifiables par les URL lors de la transmission d'adresse par mail par exemple.

Si quelqu'un pourrait m'éclairer.

Merci d'avance.

Eléphant du PHP | 75 Messages

24 janv. 2010, 15:47

J'ai refais un script qui devrait fonctionner. Mais il ne fonctionne pas. :s

Code :

<?php
require 'config.php';
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
mysql_select_db(DB_BDD);
 
$page = basename($_SERVER["SCRIPT_NAME"]);
 
if(isset($_GET['date'])){
	$lecture = mysql_query('SELECT * FROM news WHERE categorie="'.$page.'" AND date="'.$_GET['date'].'" ORDER BY date ASC');
}
 
else{
	$lecture = mysql_query('SELECT * FROM news WHERE categorie="'.$page.'" ORDER BY date ASC');
	while($row = mysql_fetch_array($lecture)){
		$tableau_date = explode('-',$row['date']);
		$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);
 
		$date = date('l j F Y',$timestamp);
 
		$cible = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday','January','February','March','April','May','June','July','August','September','October','November','December');
		$rempl = array('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche','janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobtre','novembre','décembre',);
 
		$date = str_replace($cible,$rempl,$date);
		?>
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
		<html xmlns="http://www.w3.org/1999/xhtml">
		<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
		<title>Les Gourmets Explorateurs</title>
		</head>
 
		<body>
			<div id="body2">
				<a href="index.php" class="index"> </a> 
				<div id="calendrier"><center>
				<font face="Comic sans MS" size="2" color="#CC0000"><b><?php echo nl2br($date); ?></b></font>
				</center></div>
				<?php
				if($row['date'] > reset($row)){
					$precedent = prev($row['date']);
					echo '<a href="'.$page.'?date='.$precedent.'" class="fleche_gauche"><img src="Boutons/Icone/pre.png" border="0" /></a>';
				}
				if($row['date'] < end($row)){
					$suivant = next($row['date']);
					echo '<a href="'.$page.'?date='.$suivant.'" class="fleche_droite"><img src="Boutons/Icone/sui.png" border="0" /></a>';
				}
				?>
				<div id="titre">
				<font face="Tahoma" size="3" color="#000066"><b></i></b>
				<div id="textebas"><b><?php echo $row['titre']; ?></b></div>
				</font>
				</div>
				<div id="cadre"  class="auto">
				<font face="Tahoma" size="2" color="#000066"><br />
				<?php echo nl2br($row['contenu']); ?>
				</font>
				</div>
				<span class="Roue"><img src="Boutons/Roue/roue.png" /></span>
				<a href="degustation.php" class="menu"></a>
				<?php echo '<a href="degustation.php?date='.$row['date'].'"><img src="Boutons/Police/menu.png" id="Menu" border="0" /></a>' ?>
				<a href="affiche.php" class="Affiche"> </a>
				<a href="affiche.php"><img src="Boutons/Police/affiche.png" id="Affiche" border="0" /></a>
				<a href="interview.php" class="inter"></a>
				<a href="interview.php"><img src="Boutons/Police/interview.png" id="inter" border="0" /></a>
				<a href="reservation.php" class="reservation"></a>     
				<a href="#"><img src="Boutons/Police/reservation.png" id="Reservation" border="0" /></a>
				<div id="DE"><img src="Boutons/Roue/de.png" /></div>
				<div id="ED"><img src="Boutons/Roue/ed.png" /></div>
				<div id="DA"><img src="Boutons/Roue/da.png" /></div>
				<div id="AD"><img src="Boutons/Roue/ad.png" /></div>
				<?php echo '<a href="pdf/'.$row['pdf'].'" class="pdf"> </a>'; ?>
				<a href="index.php" class="Home" /> </a>
				<a href="http://www.facebook.com/pages/Les-gourmets-explorateurs-de-Slow-Food-Paris-Mouffetard/208788453944?ref=search&sid=1033789250.2599145647..1" class="Reseau" /> </a>
				<a href="degustation-construction.php" class="Thematique" /> </a>
				<a href="pdf/recetteFromage1sf_ge.pdf" class="Carnet" /> </a>
				<a href="degustation-construction.php" class="Evenements" /> </a>
				<a href="degustation-construction.php" class="Dos" /> </a>
			</div>
		</body>
		</html>
	<?php
	}
}
?>


Les flèchent ne s'affiche jamais.

J'ai tenté de remplacer $row par $row['date'] ici :

Code :

				<?php
				if($row['date'] > reset($row)){
					$precedent = prev($row['date']);
					echo '<a href="'.$page.'?date='.$precedent.'" class="fleche_gauche"><img src="Boutons/Icone/pre.png" border="0" /></a>';
				}
				if($row['date'] < end($row)){
					$suivant = next($row['date']);
					echo '<a href="'.$page.'?date='.$suivant.'" class="fleche_droite"><img src="Boutons/Icone/sui.png" border="0" /></a>';
				}
				?>


Les flèches s'affichent, mais j'ai ce message d'erreur qui s'affiche :


Warning: reset() expects parameter 1 to be array, string given in D:\wamp\www\GourmetPHP\degustation.php on line 35

Warning: end() expects parameter 1 to be array, string given in D:\wamp\www\GourmetPHP\degustation.php on line 39

Et quand je clique sur une flèche, voilà l'url : degustation.php?date=

Merci.