2009-10-13 8 views
1

Je travaille actuellement sur un CMS interne et je suis un peu arrêté. J'essaye de le rendre facile à paginer entre les pages des articles dans un blog, et je ne peux pas décider comment il devrait être abordé. Le vrai problème ne se pose que lorsque je dois autoriser un utilisateur à choisir le nombre de résultats à afficher par page ou l'ordre de tri des messages.pagination PHP et tri

Mon idée initiale était d'utiliser simplement une chaîne de requête: blog/?page=3&count=20&sort=date mais je ne suis pas sûr si cette méthode aura des effets néfastes sur le référencement. Par exemple, Google est-il assez sensible pour se rendre compte que blog/?page=3&count=20 est identique à blog/?count=20&page=3?

Je me suis alors pensé à utiliser des sessions, mais encore une fois cela ne résout pas le problème ci-dessus, et peut-être fait pire que certains utilisateurs ne peuvent pas les cookies activés. Enfin, je suis déjà en train d'utiliser mod_rewrite pour certaines urls, serait-il préférable d'utiliser une structure comme celle-ci: blog/1/20/?

je pouvais vraiment faire avec l'aide/suggestions ici, il ne semble pas être un moyen dur et rapide des résultats paginer.

Merci à l'avance

Répondre

2

Tant que les chaînes de requête sont présents sur les liens sur votre site (via statique, normal liens « d'appel » qui sont spiderable) il ne devrait pas avoir d'effets indésirables. Cependant, si votre pagination se produit via des sessions, cela peut avoir un impact, car cela se fait généralement via des cookies ou par un long ID de session propagé par une chaîne de requête. Pour autant que je sache, l'ordre des paramètres n'a pas d'importance, à condition qu'ils donnent la même sortie du serveur.

La méthode simple de pagination de chaîne de requête GET fonctionne bien. Google le fait aussi (par exemple: q = test & start = 10 & ...), il s'agit de s'assurer que tout est accessible via des ancres plain-vanilla.

0

Évitez d'utiliser des chaînes query si vous planifiez l'exploration de votre site de manière satisfaisante.

Au lieu de cela, utilisez mod_rewrite et les requêtes comme ceci:

blog/page:3/count:20/sort:date 

Cela va le rendre plus lisible, tout en gardant querystrings de la route.

Bien sûr, vous devrez l'analyser avant de faire la requête proprement dite, mais c'est assez simple à faire en PHP: en utilisant explode() vous séparez chaque partie de l'URI, puis analysez à partir de là.

Tenir compte de ne pas avoir l'ordre des paramètres fixes, au lieu de leur permettre d'être permutés et omis, ce qui vous donnera plus de flexibilité lors de la construction des liens.

0

J'ai toujours fait cela avec des variables de session qui sont définies par des appels ajax.

Je mis un événement onClick pour chaque tête de colonne, et envelopper le contenu de la page dans un div, donc je peux le remplacer.

Je ne veux pas que Google télécharge de toute façon 10 versions différentes de la même page.

+0

Mais alors, comment répondez-vous aux utilisateurs qui ont des cookies désactivés? Ou JavaScript désactivé? – Rowan

0

Sur vos commentaires sur les variables de session:

Je puis pensé à utiliser des sessions, mais encore une fois cela ne résout pas le problème ci-dessus, et peut-être fait pire que certains utilisateurs ne peuvent pas les cookies activés.

Les variables de session sont stockées sur le serveur et non sur le client. La désactivation des cookies n'affecte donc pas les variables de session.

Les variables de session sont probablement le moyen le plus simple et le plus fiable de résoudre ce problème si vous voulez éviter les problèmes de duplication de google.

+0

Je sais que les variables de session sont stockées sur le serveur, mais qu'un identifiant de session doit encore être stocké sur le client (dans un cookie ou une chaîne de requête) – Rowan