7
votes

Page de l'article et will_paginer

J'ai des photos qui sont divisées sur des pages successives via le plugin will_paginate. Lorsque vous ouvrez une photo puis revenez à toutes les photos à l'aide d'un lien, vous revenez toujours à la première page (par exemple, la photo est affichée à la page 5, vous ouvrez la photo, cliquez sur un lien pour afficher toutes les photos et vous attendre à ce que vous soyez sur Page 5 Encore une fois, mais vous êtes à la page 1).

Maintenant, y a-t-il une méthode pour obtenir le numéro de page sur lequel une photo appartient à?

J'ai essayé de passer un paramètre d'obtention, mais cela ne fonctionne que si l'utilisateur n'effectue plus d'actions (par exemple poster un commentaire, modifier la photo, ECC.).


0 commentaires

3 Réponses :


0
votes

Le numéro de page dépend fortement des résultats de votre recherche. Votre recherche peut avoir 1, 10 ou 100 pages en fonction du jeu de résultats et du nombre d'éléments par page.

Tout lien vers "Afficher toutes les photos" pourrait contenir les informations de recherche et de pagination, à l'aide des paramètres d'obtention de l'utilisateur comme vous l'avez décrit. Ou stockez et récupérez via un cookie de sorte que les résultats de la recherche persistent jusqu'à ce que les utilisateurs ne puisse effacer ou sélectionner une nouvelle recherche.


3 commentaires

Le problème est que lorsque l'utilisateur temporaire quitte la page photo (par exemple pour le modifier), puis essaie de retourner pour afficher toutes les photos qu'il revient toujours à la première page :( pendant que je ne pense pas utiliser des cookies, c'est un bon chose pour le référencement.


@Collimarco Si vous souhaitez réutiliser les paramètres de recherche et de paginations entre les demandes, vous devrez alors les persister quelque part. C'est généralement quels cookies sont pour. Je ne sais pas quel impact cela aurait sur le référencement.


J'ai vu que de nombreux sites de photographie (tels que deviantArt.com) utilisent des cookies pour permettre aux utilisateurs de revenir en arrière.



8
votes
page = (25 / 20) + 1 = 2

9 commentaires

Cela peut être une solution, mais je me demande pourquoi ce code n'est pas implémenté par défaut dans le plugin. Peut-être parce que cela n'a pas de sens de faire ce que j'ai dit en termes de performance ..


Parce que cela n'a pas vraiment de sens pour un large public. Ce n'est pas une solution parfaite mais juste une solution de contournement pour votre besoin spécifique. En outre, Will_paginate fournit des installations de pagination, pas des fonctionnalités d'Activerecord supplémentaires.


Je n'aurais pas pensé que ce serait une énorme performance touchée. Lorsque vous utilisez une bibliothèque de pagination, il comptera toutes les tâches que vous faites une pagination pour obtenir le nombre total de pages. À condition que la colonne que vous commandez est indexée correctement, il ne devrait pas être trop douloureux pour obtenir un compte similaire pour trouver la page en cours.


Il vaut aussi la peine, si vous le pouvez, faire le compte pour trouver la page actuelle dans la même transaction que la requête pour trouver les éléments de la page - sinon un utilisateur peut se retrouver sur une page qui n'a pas la photo qu'ils attendaient sur parce que le nombre de photos a changé entre les requêtes.


Je suis d'accord Wutg Shadwell, c'est la raison pour laquelle j'ai commenté "Ce n'est pas une solution parfaite, mais juste une solution de contournement pour votre besoin spécifique" et l'une des meilleures raisons pour la raison pour laquelle cela n'a pas vraiment de sens dans Will_paginate. Si vous souhaitez une telle fonctionnalité, vous devez le coder de la manière dont il convient le mieux à votre application et à vos exigences.


Pratiquement, vous avez dit de revenir à la galerie quelque chose comme un paramètre d'obtention contenant l'ID de la photo à partir de laquelle l'utilisateur provient et de celui-ci extraire la page en cours. Ou peut-être avez-vous dit d'utiliser un cookie pour stocker l'identifiant de la photo avec la requête de recherche? Je ne peux pas vraiment comprendre ce que vous avez suggéré ..


Vous n'avez pas besoin de passer l'identifiant Ni Via Get ni via Cookie, car vous savez que la valeur: c'est l'identifiant de l'enregistrement en cours.


Donc, vous avez simplement dit de déterminer le numéro de page de l'élément lorsque j'affiche la photo unique. Ok, c'est une solution .. mais j'ai toujours besoin de suivre la trace de la requête de recherche, sinon je ne pourrai pas déterminer la bonne page. Où est la meilleure façon de le stocker?


Cette formule doit être un nombre d'enregistrements par page et non de pages, j'ai soumis une modification.



0
votes

Voici une autre solution: Will_paginate utilise simplement les paramètres de la chaîne de requête 'Search_field' et "page"; Vous pouvez les extraire des paramètres des rails Hash. Si vous gardez une trace de ceux qui utilisent Session State, vous pouvez les réappliquer dans votre code de contrôleur, en cas de besoin.

exactement comment vous gérez cela dépend de votre application. Dans l'application, je travaille, le flux est tel que je peux distinguer un contexte général et un contexte membre. L'utilisateur entre dans le contexte des membres de la page d'index de numéro de membre. Donc je viens de définir la session [: membre_context] à l'entrée dans le contexte des membres; par exemple. dans les membres # éditer. Ensuite, dans l'index # des membres, j'ai le code suivant: xxx

Cela fonctionne très bien dans mon application.


0 commentaires