8722 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
Alors j'ai besoin d'une pagination simple et j'ai trouvé ce code ci:

a écrit :
<?php
// -------------------------------------- //
// Script créé par http://cust.er.free.fr //
// -------------------------------------- //

// Ci dessous, toutes les pages que vous voulez ' paginer ' par ordre d'apparition !
// N'y mettez pas un lien dur mais juste le lien à partir de la source sans l'inclure.
$liens = array (
"", // Laissez vide pour commencer à la page 1
"/page 1.php",
"/page 2.php",
"/page 3.php",

);

$titre = array (
"", // Aussi à laisser vide pour le titre de la page 0 ( qui ne sera pas affichée )
"page 1",
"page 2",
"page 3"

);

// Cherche la place de l'adresse actuelle
$i = array_search($self, $liens);

// Cherche la place du dernier lien
$maxi = count($liens)-1;

// Nomme le premier lien
$mini = 0;

if ( $i != 1 ) // On prend notre minimum ( la valeur 1 de l'array )
{
// Affichage du lien ' page précédente '
echo '<a href="http://'.$_SERVER['HTTP_HOST'].''.$liens[$i-1].'" title="'.$titre[$i-1].'" class="mini_maxi">&lt;</a>&nbsp;';
}
else
{
// Affichage du symbole ' page précédente ' si on est à la page mini
echo '<span class="mini_maxi">&lt;</span>';
}

// Le minimum est égal à 1 .. pour éviter d'avoir la page ' 0 ' affichée dans la pagination
$ii=1;

$separation = false;

while ( $mini < $maxi )
{

// Cherche la page correspondant au numéro
$lien_pages = $liens[$ii];

if ( $i == $ii )
{
// Page actuelle
if ( $separation == true ) { echo '|'; }
echo '&nbsp;<span class="page_actuelle">'.$ii.'</span>&nbsp;';
}
else
{
if ( $separation == true ) { echo '|'; }
// Toutes les pages
echo '&nbsp;<a href="http://'.$_SERVER['HTTP_HOST'].''.$lien_pages.'" title="'.$titre[$ii].'" class="page">'.$ii.'</a>&nbsp;';
}

// Incrémentation de va variable $mini
$mini++;

// Incrémentation de la variable $ii ( numéro des pages )
$ii++;

// Activation ou continuation de l'affichage des séparations ' | '
$separation = true;
}

if ( $i != $maxi )
{
// Affichage du lien ' page suivante '
echo '&nbsp;<a href="http://'.$_SERVER['HTTP_HOST'].''.$liens[$i+1].'" title="'.$titre[$i+1].'" class="mini_maxi">&gt;</a>';
}
else
{
// Affichage du symbole ' page suivante ' si on est à la page maxi
echo '<span class="mini_maxi">&gt;</span>';
}


?>


et j'ai juste besoin de limiter le nombre de liens qui s'affichent car si j'ai 100 pages, je ne veux pas avoir les 100 qui s'affichent Smiley decu
juste les 5 d'avant et les 5 d'après.

J'ai essayé de comprendre les différents codes mais je ne suis pas douée à ça.
J'ai juste compris qu'il fallait insérer quelque part une variable avec i =+5 et i=-5 ...
mais j'ignore ou et comment
je suis archi débutante et vraiment pour moi tout ce code est pire que du chinois alors si une ame charitable voulait bien m'offrir ce code avec toutes les explications afin de pouvoir me débrouiller à l'avenir, je lui en serais infiniment reconnaissante.

petite précision: je ne veux pas utiliser de base sql.

Merci à tous et bonne continuation dans vos projets.
Modifié par devlyne (28 Feb 2013 - 15:33)
En clair tu veux les liens entre i-5 et i+5.
Il y aura plusieurs cas
- si moins de 11 pages
- si on est trop pret des bords.
- si on est en premier ou dernier liens.
Je passe sur PC demain et je te post un script PHP.
S il y a la reponse avant tant mieux.
La je suis sur smartphone et ce soir il y a Dexter a la tele.
A demain matin
<?php
// -------------------------------------- //
// Script créé par http://cust.er.free.fr //
// modifier par J P //
// -------------------------------------- //

// Ci dessous, toutes les pages que vous voulez ' paginer ' par ordre d'apparition !
// N'y mettez pas un lien dur mais juste le lien à partir de la source sans l'inclure.
$liens = array (
"", // Laissez vide pour commencer à la page 1
"/page 1.php",
"/page 2.php",
"/page 3.php",

);

$titre = array (
"", // Aussi à laisser vide pour le titre de la page 0 ( qui ne sera pas affichée )
"page 1",
"page 2",
"page 3"

);

// Cherche la place de l'adresse actuelle
$i = array_search($self, $liens);

// Cherche la place du dernier lien et Début de modif
$max = count($liens)-1;

// Nomme le premier lien
$min = 0;
if ($max<11){
$maxi=$max;
$mini=$min;
}else{
$maxi=$i+5;
$mini=$i-5;
}
// fin de modif

if ( $i != 1 ) // On prend notre minimum ( la valeur 1 de l'array )
{
// Affichage du lien ' page précédente '
echo '<a href="http://'.$_SERVER['HTTP_HOST'].''.$liens[$i-1].'" title="'.$titre[$i-1].'" class="mini_maxi">&lt;</a>&nbsp;';
}
else
{
// Affichage du symbole ' page précédente ' si on est à la page mini
echo '<span class="mini_maxi">&lt;</span>';
}

// Le minimum est égal à 1 .. pour éviter d'avoir la page ' 0 ' affichée dans la pagination
$ii=1;

$separation = false;

while ( $mini < $maxi )
{

// Cherche la page correspondant au numéro
$lien_pages = $liens[$ii];

if ( $i == $ii )
{
// Page actuelle
if ( $separation == true ) { echo '|'; }
echo '&nbsp;<span class="page_actuelle">'.$ii.'</span>&nbsp;';
}
else
{
if ( $separation == true ) { echo '|'; }
// Toutes les pages
echo '&nbsp;<a href="http://'.$_SERVER['HTTP_HOST'].''.$lien_pages.'" title="'.$titre[$ii].'" class="page">'.$ii.'</a>&nbsp;';
}

// Incrémentation de va variable $mini
$mini++;

// Incrémentation de la variable $ii ( numéro des pages )
$ii++;

// Activation ou continuation de l'affichage des séparations ' | '
$separation = true;
}

if ( $i != $maxi )
{
// Affichage du lien ' page suivante '
echo '&nbsp;<a href="http://'.$_SERVER['HTTP_HOST'].''.$liens[$i+1].'" title="'.$titre[$i+1].'" class="mini_maxi">&gt;</a>';
}
else
{
// Affichage du symbole ' page suivante ' si on est à la page maxi
echo '<span class="mini_maxi">&gt;</span>';
}


?>
merci à toi de m'avoir donné de ton temps
tu as ma reconnaissance éternelle Smiley biggrin

je te tiens au courant
Modifié par devlyne (28 Feb 2013 - 16:23)
Il faut intercaler juste avant mon else
}elseif($i<5){
$mini=$min;
$maxi=$i+5;
}elseif($i>$max-5){
$mini =$i-5;
$maxi=$max;
}
Effectivement ca ne fonctionne pas
il y aurait une erreur dans cette ligne:
}elseif($i $mini=$min;

l'erreur en question:
Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files XP\EasyPHP-5.3.9\www\navigation.php on line 115

j'ai appelé mon menu navigation.php ( mais tu devais t'en douter)
et comme j'ignore ce langage Smiley bawling je suis bien incapable de résoudre ce problème. Mais c'est peut etre moi qui ai oublié de paramétrer quelque chose ...
merci à toi en tout cas.
Modifié par devlyne (28 Feb 2013 - 16:52)
La ligne est elle complete il semble t en manquer un bout (la condition $1 inf a 5)
Modifié par Lemonstr (28 Feb 2013 - 16:58)
oui merci, plus d'erreur quand je charge ma page mais en chargeant le menu j'ai ceci:


Notice: Undefined variable: self in C:\Program Files XP\EasyPHP-5.3.9\www\navigation2.php on line 104

Notice: Undefined offset: -1 in C:\Program Files XP\EasyPHP-5.3.9\www\navigation2.php on line 129

Notice: Undefined offset: -1 in C:\Program Files XP\EasyPHP-5.3.9\www\navigation2.php on line 129
< 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 >


et le nombre de pages n'est toujours pas limité....

alors à la ligne 104:$i = array_search($self, $liens);
la ligne 129:echo '<a href="http://'.$_SERVER['HTTP_HOST'].''.$liens[$i-1].'" title="'.$titre[$i-1].'" class="mini_maxi">&lt;</a>&nbsp;';

est ce qu'il y a un problème avec mes liens ?

merci beaucoup
Depuis le début il y a un truc que je ne comprends pas.
Ce que tu veux j'ai compris, mais avec ton script il faut que tu renseignes ton array à chaque modif. "a la main" alors que tu as un ordi.
Donc plusieurs questions :
Ou sont tes fichiers "chemin relatif ou absolu" par rapport à ta page ?
Y a t'il autre chose dans le répertoire ?
Ont ils des noms standart genre page1, page2 ect. ?
comment appels tu tes pages ? variable dans l'url ou adresse.
alors mes fichiers sont à la racine du site dans le dossier www de easyphp en chemin relatif. toutes mes pages sont au même endroit.
eh bien dans mon répertoire il y a toutes mes pages en fait
pour appeler mes pages je tape localhost dans mon navigateur (je ne suis pas certaine de bien répondre à cette question)
pour le moment mon site est en local.

je sais bien qu'il faut remplir à la main le nom des pages et leurs liens mais les autres scripts étaient si compliqués .....
il est évident que si tout était automatique, ce serait plus pratique et efficace mais vu mon niveau de compréhension......

merci à toi de prendre du temps pour mon petit probleme
Tu fais un site avec potentielement 100 pages. C est un genre de blog.
Avec un entete et un contenu variable.
Veux tu afficher la derniere page par defaut et navuguer en remontant le temps ou rester dans l ordre chronologique.
non ce n'est pas un blog, en fait c'est un site qui regroupe des fictions.
et certaines d'entre elles font plus de 100 pages à raison d'un chapitre par page...
et ce menu permet au lecteur de pouvoir naviguer librement dans l'histoire et puis je suis jalouse de google XD
juste au cas ou tu aurais la réponse à ça aussi: comment puis je changer la couleur de fond des numéros de page qui est blanche ?

je te remercie et heureuse que cela t'amuse Smiley biggrin
Alors j'y suis.
Première étape.
Une page index.php avec tout ce qui faut en Html head meta et tout.
et dedans :
<body>
Là à toi de jouer. Si ton entête reste la même pour quoi pas ici en statique à l'ancienne.
Si tu veux en changer de temps en temps :
<?php
include "entete.php";
//comme ça si tu veux faire une modif tu n'aura que le fichier entete.php à ouvrir.

//ici un traitement qui te mettra le contenu souhaité en fonction des choix de lien pagination.
// Pour le traitement je te propose de mettre tes pages dans un répertoire /pages et de les nommer :
// page0.php pour l'accueil
// page1.php, page2.php, .... pagen.php etc.
// ne met rien d'autre dans ce répertoire ce sera plus simple pour automatiser.

if(isset($_GET['p']) && preg_match("/^[0-9]+$/i", $_GET['p'])){
$p=$_GET['p'];
if(file_exists("pages/page$p.php")){
include "pages/$p.php";
}else{

include "page/page0.php";
}
}else{
include "page/page0.php";
}

//enfin ton footer avec les liens vers les pages.
include "pagination.php";
?>
</body>

jusque là ca va.
Modifié par Lemonstr (01 Mar 2013 - 10:45)
ensuite le fichier pagination.php
<?php
$dir = opendir ("pages/"); // regarder dans le répertoire pages
$liste=array(); // preparer un tableau

while (false !== ($file = readdir($dir))) { //tant qu'on trouve quelque chose
$liste[]=$file; // on met son nom dans le tableau
}
$max=sizeof($liste); // je regarde combien il y a de page en tout (dont page0)
// Là si quelqu'un à plus simple pour déterminer le nombre d'élément je suis preneur, J'ai eu la flemme de chercher.
if($max>1){ // c'est bon il y a une page.
$max = $max-1; // ben ouais l'éléphant php compte a partir de 0 ou de 1 comme il veut.
$min = 1; // je commence les liens à la page 1.

// définir les bornes [a;b] c'est à dire page-5 à page+5
if ($max<11){ //pas assez de page, mettre tous les liens
$a=$min;
}elseif($i>$max-6){ //trop prêt de b
$b=$max;
$a=$i-5;
}elseif($i<6){ //trop prêt de a
$b=$i+5;
$a=1;
}else{ // cas général.
$b=$i+5;
$a=$i-5;
}

//afficher les liens
if(isset($_GET['p']) && preg_match("/^[0-9]+$/i", $_GET['p'])){
$g=$_GET['p']; //récupérer le n° de la page courante.

echo '<center>'
for ($i=$a; $i < $b ; $i++) {
if($i=$g){
echo '<b><FONT COLOR="#FF0000">'.$i.'</font></b>|'; //la page courante en Gras et en rouge
}else{
echo '<a href="?p='.$i.'">'.$i.'</a>|'; // pas sur de moi des fois il y a des caprices avec les " et ' on règlera si il y a un souci.
}
}
echo '<a href="?p='.$b.'">'.$b.'</a></center>';
echo '<enter><a href="?p=0">Accueil</a></center>';
}
?>
Pages :