[RESOLU] Pagination en Include (sans Mysql)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Pagination en Include (sans Mysql)

Re: Pagination en Include (sans Mysql)

par Damonya » 12 janv. 2016, 15:11

Super, ça marche impeccablement maintenant. Grand merci.

Ouah je suis trop content réussi à faire enfin ce que je voulais et "presque" tout seul. (oui presque, tu m'as pas mal aidé ^^)

J'vais enfin avoir une page d'accueil qui met plus 3h à se charger ^^

:D

Pour le reste, refaire un systeme de pagination complet comme avant, je pense pouvoir me débrouiller seul (l'ayant déjà fait).

Re: Pagination en Include (sans Mysql)

par Spols » 12 janv. 2016, 15:00

Le problème vient que tu n'a pas un nombre d'article divisible par le nombre d'article affiché par page. Mais c'est un problème que tu aura souvent, il faut donc inclure ce cas dans ton script.

En testant dans ta boucle la présence de l'article que tu tente d'inclure et en sortant de la boucle si cet article n'existe pas, tu devrais t'en sortir.
juste avant ton include, sur la même ligne j'ajouterai
if (!empty($tableau[$i])) include [...]

La bonne pratique voudrait que tu ajoute à la ligne suivante
else break;
Ce qui terminera la boucle.

Re: Pagination en Include (sans Mysql)

par Damonya » 12 janv. 2016, 14:41

( ! ) Notice: Undefined offset: 4 in E:\MeteOBell\www\accueil.html on line 93
( ! ) Warning: include(E:\MeteOBell\www\Articles): failed to open stream: Permission denied in E:\MeteOBell\www\accueil.html on line 93
( ! ) Warning: include(): Failed opening 'Articles/' for inclusion (include_path='.;C:\php\pear') in E:\MeteOBell\www\accueil.html on line 93
( ! ) Notice: Undefined offset: 5 in E:\MeteOBell\www\accueil.html on line 93
( ! ) Warning: include(E:\MeteOBell\www\Articles): failed to open stream: Permission denied in E:\MeteOBell\www\accueil.html on line 93
( ! ) Warning: include(): Failed opening 'Articles/' for inclusion (include_path='.;C:\php\pear') in E:\MeteOBell\www\accueil.html on line 93

Mais je pense que c'est parce que dans mes tests, je ne fais pas avec un nombre suffisant d'article (seulement 4 dans mes tests). Si je mets $pagination à 2 ou 1, plus d'erreurs. Je suppose que ça sera bon quand je mettrais plus d'articles.

rsort ($tableau); après closerdir(); ça marche :D

Merci à toi. ;)

Re: Pagination en Include (sans Mysql)

par Spols » 12 janv. 2016, 13:55

Avec les les messages d'erreur, ce sera plus facile de t'aider

le rsort, je le mettrai juste après le closedir();

Re: Pagination en Include (sans Mysql)

par Damonya » 12 janv. 2016, 13:35

Bon je pense que je m'en rapproche, la page 1 s'affiche bien comme il faut, mais j'ai quelques messages d'erreurs quand je clique ensuite sur les pages suivantes.
<?php	


$tableau = array();
$dossier = opendir ('./Articles/');
 
while ($fichier = readdir ($dossier)) {
	if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
	$tableau[] = $fichier;
	}
}
closedir ($dossier);
 

$nbpics = count($tableau);
 
//definir le nombre d'image par page que l'on souhaite
$pagination=3;
$nombreDePages=ceil($nbpics/$pagination);
 
$index = isset($_GET['p']) ? intval($_GET['p']) : 1;
 
if ($nbpics != 0) {
 
 
	for ($i = ($index-1)*$pagination; $i <= ($index*$pagination) -1; $i++) 
	
	{

	include('Articles/'.$tableau[$i]) ;
	
	
	
	}
	
 
	for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="index.php?p=' . $i . '">' . $i . '</a> ';
}
 
}

?>
J'aimerais aussi classer mes articles dans l'ordre décroissant. Avec rsort() sans doute mais je sais pas où le mettre.

Re: Pagination en Include (sans Mysql)

par Damonya » 12 janv. 2016, 10:48

Tout dépend sous quelle format sont tes articles pour le moments.
Je travaille en xhtml. Chaque article est situé dans un <li></li>

Un exemple type avec du texte, des images, des liens et une vidéo :
<li class="bordure_puce">
			<h3><i>12/01/2016</i> - <a href="URL.html" title="Lorem">ipsum dolor</a></h3>
<div class="zone_texte">
			<p>
			Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum <a href="URL.html" title="sed">do eiusmod</a>
			</p>
			<div class="frise">
			<a class="deux_l height_300" href="URL.html" >
				<img  src="IMAGE.png" alt="tempor" title=" incididunt ut labore " /></a>
			<a class="deux_r height_300" href="URL.html" >
				<img  src="IMAGE.png" alt="et dolore " title="magna aliqua" /></a>	
			</div>
			<hr class="separation" />	

			<div class="frise">
			<a class="deux_l height_300" href="URL.html" >
				<img  src="IMAGE.png" alt="Youtube" title="Lien vers Youtube" /></a>	
			<iframe class="deux_r" height="300" src="URL YOUTUBE" frameborder="0" ></iframe>		
			</div>
			<hr class="separation" />	
</div>
</li>
Avec _GET dis-tu ? Ok je vais me renseigner là-dessus. Pas encore eu l'occasion de travailler avec ça. Merci pour la première piste, ça me donne une direction où chercher c'est sympa. ;)

Re: Pagination en Include (sans Mysql)

par Spols » 12 janv. 2016, 10:18

Tout dépend sous quelle format sont tes articles pour le moments.

Pour un système de pagination, tu dois trouver le moyen de dresser une liste qui apparaissent identique à chaque appel de la page, par exemple en ayant un nombre qui s'incrémente ou en classant par date de création. ensuite tu détermine par un paramètre dans ton url, le premier article à afficher. tu extrait de ton tableau les articles à charger et tu ne charge que ceux là.

Ensuite tu fait quelques liens pour naviguer entre les pages.

Les includes fonctionneront très bien, si tu as un dossier avec tout tes articles dedans, un fichier par article, je te propose de les numéroter dans le nom de fichier (du moins au début, prévoit 1 ou 2 zéro devant pour le jour ou tu dépasseras les 100, 1000 articles et que le 1 ne soit pas devant le 20 par exemple).
Tu récupère la liste des fichiers de ton dossier tu les classes par ordre croissant ou décroissant (selon ta volonté). Tu récupère une variable _get pour déterminer le premier article, si tu n'en a pas, tu prends les X premiers sinon les Xsuivant à partir de ta variable _GET. et tu les affiche

Pagination en Include (sans Mysql)

par Damonya » 12 janv. 2016, 10:05

Bonjour,

Jusqu'à maintenant sur mon site j'utilisais un systeme de pagination en javascript pour trier mes articles et n'en afficher que 5 par page, grâce à un jquery et ça marche très bien comme vous pouvez le voir sur la page d'accueil de mon site : http://www.meteobell.com/

Le soucis maintenant au fur et à mesure que je rajoute des articles c'est que j'arrive aux limitations du systeme, puisque faire ainsi suppose de charger tous les articles. Le javascript ne faisant que cacher les articles dont je n'ai pas besoin. A force donc ma page devient de plus en plus lourde et s'affiche de plus en plus mal et lentement. Si jusqu'à maintenant ça me suffisait, ce n'est donc pas un système pérenne dans l'avenir.

Alors vous me direz. Bah c'est simple passe en Mysql. Et je réponds non, car d'une part trop compliqué à mon niveau (je maitrise un peu le php, mais pas du tout le mysql) et surtout cela suppose de réaliser une boucle donc que la mise en forme de tous mes articles soit similaire (ou alors que mon code html passe en string pour passer dans la bdd et là franchement ça complique énormément la rédaction de mes articles je trouve)

Je sais qu'il existe des solutions intermédiaires entre le javascript et le mysql répondant à ma demande, mais ceci étant peu habituels comme demande, trouver des guides, des tutoriaux sur le net c'est la croix et la bannière.

Une piste tout de même : les includes.

L'idée serait donc d'avoir un dossier avec dedans une page html par article avec chacun un ID unique et d’appeler via include ceux dont j'ai besoin avec ma pagination. Ca me permet de garder intacte la structure xhtml unique de chaque article. Je vois bien l'idée, je pense que c'est possible mais je sais pas du tout par quoi commencer ni comment réaliser ça en php.

Si vous avez des pistes, des tutoriaux etc.. je suis preneur...

Merci.