Page 1 sur 1

Système de pagination avancé

Posté : 11 avr. 2016, 20:49
par yoann38
Salut à tous.
Me voilà a la fin de mon systeme de pagination "avancé", pour moi ça devient complexe :wink:
Donc enfait tout marche pas de soucis.

Je cherche juste à faire en sorte à afficher le numéro de page dans l'url, actuellement on peut changer de page sans que l'url soit affecté ( pas terrible coté indexation des pages )...

Actuellement oui il y a de l'ajax, perso je n'aime pas ca, donc si plus simple en supprimant l'ajax

Donc voilà le code:
La pagination elle même: (page: recherche-ajax.php)
//traitement pagination
		$nbre_annonces_par_page = 10;
		$nbre_pages_max_gauche_et_droite = 2;
		$last_page = ceil($nb / $nbre_annonces_par_page);
		if(isset($_GET['page']) && is_numeric($_GET['page'])){
		$page_num = $_GET['page'];
		} else {
		$page_num = 1;
		}
		if($page_num < 1){
		$page_num = 1;
		} else if($page_num > $last_page) {
		$page_num = $last_page;
		}
		$limit = 'LIMIT '.($page_num - 1) * $nbre_annonces_par_page. ',' . $nbre_annonces_par_page;
		
		$pagination = '';
		if($last_page != 1){
		if($page_num > 1){
		$previous = $page_num - 1;
		$pagination .= '<a rel="nofollow" href="sortie.php?page='.$previous.'" class="page" data-page="'.$previous.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-left"></i>
</a> &nbsp; &nbsp;';
		for($i = $page_num - $nbre_pages_max_gauche_et_droite; $i < $page_num; $i++){
		if($i > 0){
		$pagination .= '<a rel="nofollow" href="sortie.php?page='.$i.'" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> &nbsp;';
		}
		}
		}
		$pagination .= '<span class="active">'.$page_num.'</span>&nbsp;';
		for($i = $page_num+1; $i <= $last_page; $i++){
		$pagination .= '<a rel="nofollow" href="sortie.php?page='.$i.'" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> ';
		if($i >= $page_num + $nbre_pages_max_gauche_et_droite){
		break;
		}
		}
		if($page_num != $last_page){
		$next = $page_num + 1;
		$pagination .= '<a rel="nofollow" href="sortie.php?page='.$next.'" class="page" data-page="'.$next.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-right"></i>
</a> ';
		}
		}

		$sql .= " ORDER BY loisirs.id_loisirs DESC LIMIT ".intval(($page-1)*$parPage).", ".$parPage;
		//$sql .= " ORDER BY loisirs.id_loisirs, id_simply_user IN(999, 34) DESC LIMIT ".intval(($page-1)*$parPage).", ".$parPage;
		$req = $bdd->query($sql);	
	   
		$nb2 = $req->rowCount(); // On calcul le total avant la pagination
Le js:
// JavaScript Document
// On donne une action dès qu'on clique sur un lien des nav
$(document).ready(function(){
    $('.filter-tabs a, .page:not(.active)').on('click', function(e) {
				
        e.preventDefault(); // On annule le fait d'avoir cliqué sur le lien.
        var du = $(this).attr('data-du');
        var au = $(this).attr('data-au');
        var page = $(this).attr('data-page');
        chargerDonnees(du, au, page);
	});
});
// On déclare la fonction qui va aller chercher les données en base de données selon le bouton cliqué
function chargerDonnees(du, au, page) {
	
	var dep = $('#departement').val();
	var region = $('#departement').attr('data-region');
	var loisir = $('#loisir').val();
	var vil = $('#ville').val();
	var datetimepicker2 = $('#datetimepicker2').val();
	
    $.ajax({
        type: 'GET',
        url: 'include/rechercheAjax.php',
        data: 'du='+du+'&au='+au+'&page='+page+'&departement='+dep+'&region='+region+'&loisir='+loisir+'&ville='+vil+'&date='+datetimepicker2,
        processData: true,
        async: false,
		

        beforeSend: function() {
            $('#bloc_page').html('Chargement en cours');
        },
        success: function (data) {
            $('#bloc_page').html(data);
            // On doit le rappeller car un nouveau bloc pagination a été créé
			
            $('.page:not(.active)').on('click', function(e) {
				
                e.preventDefault(); // On annule le fait d'avoir cliqué sur le lien.
                var du = $(this).attr('data-du');
                var au = $(this).attr('data-au');
                var page = $(this).attr('data-page');
                chargerDonnees(du, au, page);
            });
        }
    });
}
et htaccess. ( juste quelques exemple )
RewriteRule ^toutes-les-sorties-de-la-ville-de-([a-z0-9-]+)-page-([0-9]+).html$ sortie.php?ville=$1&page=$2

RewriteRule ^toutes-les-sorties-de-la-ville-de-([a-z0-9-]+).html$ sortie.php?ville=$1

RewriteRule ^toutes-les-sorties-([A-Za-z0-9_-]+)-de-la-ville-de-([a-z0-9-]+).html$ sortie.php?loisir=$1&ville=$2

Re: Système de pagination avancé

Posté : 11 avr. 2016, 20:58
par Genova
Les robots ne lisent pas le JS, donc côté indexation tu es à l'abri tant que tes URLS sont accessibles. Pour savoir si un robot peut bien parcourir ton site c'est très simple : tu désactives Javascript, et tu vois si tu peux te balader sur ton site même sans JS.

Pour changer une URL, il faut utiliser "history". Attention cependant, car ça ne fonctionne pas pour IE9 et moins. Pour ces navigateurs, fait un location.href pour rediriger à la place d'utiliser de l'AJAX, de cette façon l'utilisateur sera redirigé vers l'URL que tu veux dans son navigateur. Tant pis pour lui s'il utilise encore un navigateur pourri ;)

Pour utiliser l'historique, tu as deux fonctions principales :
- history.pushState() : ajoute une nouvelle URL dans l'historique
- history.replaceState() : remplace l'URL en cours dans l'historique par la nouvelle que tu donnes

Note que ces deux fonctions remplacent dans tous les cas l'URL dans la barre du navigateur.

Re: Système de pagination avancé

Posté : 12 avr. 2016, 08:59
par Ryle
Bonjour,

Fondamentalement, que l'utilisateur voit l'url changer ou non, ça n'a pas réellement d'importance du moment que les moteurs de recherche accèdent bien à la liste de résultats correspondant à la page demandée quand ils sollicitent l'url avec le numéro de page.

En revanche pour connaitre ces url avec numéros de pages, il faut que le moteur de recherche puisse les trouver sur ton site afin de les indexer, mais avec le nofollow, tu leurs demandes de ne pas le faire...

Re: Système de pagination avancé

Posté : 12 avr. 2016, 20:57
par yoann38
Salut à tous et merci pour votre investissement.
Donc merci déjà de m'avoir fait remarquer le no follow ( c'était complétement idiot de mettre ça)
Donc en fait si on regarde le source à chaque fois le lien est du type:

sortie.php?page=2

Meme si on se trouver sur la page par exemple :
http://monsite.fr/actu-de-la-ville-de-grenoble.html

Si j'ai bien compris ce n'est pas grave selon vous, c'est bien ça ?
Parceque je m'arrahce les cheveux pour supprimer l'ajax et avoir des url propres du genre:
http://monsite.fr/actu-de-la-ville-de-g ... age=2.html

Merci encore

Re: Système de pagination avancé

Posté : 13 avr. 2016, 16:41
par Ryle
Je pense qu'il faut que tu combines les deux :)

En principe, dès le moment où les liens présents dans ta page sont bons (et un "actu-de-la-ville-de-grenoble-page-2.html" sera toujours plus pertinent pour le moteur de recherche que "sortie.php?page=2") , le moteur de recherche va les collecter sans se soucier de savoir si ceux-ci déclenchent de l'ajax ou un changement de page.

Si de plus lorsque la page "actu-de-la-ville-de-grenoble-page-2.html" est appelée directement via son url, elle affiche bien la liste des résultats de la page 2 (le script ajax est peut être à ajuster pour cela), alors le moteur de recherche devrait être content et indexera le contenu de la page :)

Donc à mon sens, pas besoin de se débarrasser du mode ajax et ne faire que de la réécriture pour le référencement, tu dois pouvoir profiter du meilleur des deux fonctions :)

Re: Système de pagination avancé

Posté : 13 avr. 2016, 20:33
par yoann38
Voilà donc on arrive à mon problème.
Je n'arrive pas a faire ce système pour avoir actu-de-la-ville-de-grenoble-page-2.html, actu-de-la-ville-de-grenoble-page-3.html et ainsi de suite.
Pourtant tout bête à faire surement.

Peut tu me donner des explications, directions à suivre ou autre .... je te prie.
J'ai peur de m'embrouiller grave avec l'ajax c'est pour ça je disé peut être de le supprimé

En resumé suuprimé l'ajax...
Et avoir des urls du type par exemple : actu/grenoble/page-2.html


Par exemple si je desactive le js et que je saisie l'url :
http://monsite.fr/actu-de-la-ville-de-g ... age-3.html

ca nous met bien sur la page 3.
Ma grande question est que faire pour arriver à ce résultat ...