De filtre, de tri et la pagination dans Codeigniter
Ive a récemment commencé à utiliser CodeIgniter que je cherchais un très léger cadre et il semble venir comme l'un des meilleurs choix.
Je suis nouveau à l'ensemble de la MVC chose, de l'apprécier, mais je suis coincé avec quelque chose qui semble très simple.
Je suis le codage d'un CMS et ont besoin d'un moyen de filtrer, trier et de paginer les résultats. J'ai l'habitude de le faire avec querystrings, donc j'aurais quelque chose le long des lignes de:
articles.php?order=title&sort=desc&filter=articletitle&page=5
Je n'ai aucune idée de comment je pourrais faire dans CI donc j'ai juste tourné sur le EnableQueryStrings dans la config et il fonctionne très bien, mais je reçois le sentiment de sa probablement pas la solution la plus élégante.
Je suppose que je pourrais avoir
index.php/articles/index/order/title/sort/desc/filter/articletitle/page/5
mais cela me semble très rigide, ce que si par exemple je n'ai pas besoin de trier, comment pourrais-je m'assurer que je suis en train de regarder le bon uri segment?
des idées?
OriginalL'auteur Babak | 2010-03-11
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de mise en œuvre de la
_remap
fonction? Il va rediriger toutes les requêtes au contrôleur de la fonction vous permettant de mettre en oeuvre autant (ou aussi peu) de ceux que vous aimez.Vous pourriez faire quelque chose comme ceci:
OriginalL'auteur cwallenpoole
J'ai rencontré ce problème d'une tonne de fois et finalement décidé d'essayer de le résoudre correctement.
Ma solution implique un combo chemin/chaîne de requête approche (il faut une solution comme celle de Stephen lié à).
Les URLs sont formatées comme suit:
http://www.myapp.dev/controller/index/10?order_by=id+asc&status=open
Ces optionnel $_GET paramètres peuvent ensuite être utilisés comme conditions de la requête, et vous pouvez en utiliser autant que vous le voulez sans vissage CI la pagination de l'offset.
Par défaut, CodeIgniter la Pagination de bibliothèque n'a pas d'appui de placer le décalage avant la fin de l'URI. L'astuce pour obtenir CI à l'appui de cette est d'étendre la pagination de la bibliothèque de la sorte: http://pastie.org/1393513
Puis, dans votre contrôleur, vous pouvez initialiser la pagination de la sorte:
Noter qu'aucune
uri_segment
est nécessaire, parce que la coutume de la Pagination::initialiser la méthode détecte fonction de l'endroit où{offset}
tombe dans leurl_format
chaîne.Liens qui sont construites avec des
$this->pagination->create_links()
va insérer le décalage dans l'endroit approprié, et de préserver la filature de la chaîne de requête.OriginalL'auteur Lou Kosak
Je n'aime pas le fait que CodeIgniter détruit la chaîne de requête. La chaîne de requête est idéal pour les paramètres facultatifs. En essayant de le mettre en option paramètres dans URI segments et les choses commencent à devenir bizarre.
Une URL comme ceci semble être un peu un hack :
Pour cette raison que j'ai configurer CodeIgniter d'utiliser un mélange d'URI et segments de la chaîne de requête. Cette réponse vous montre comment vous pouvez atteindre cet objectif.
OriginalL'auteur Stephen Curran
Il est un peu maladroit que vous ne pouvez pas utiliser des chaînes de requête par défaut. J'ai surmonter ce dans mon projet actuel, dans quelques domaines, par envoyer le tri de préférence dans un post de formulaire, puis stocker de préférence dans la session de l'utilisateur.
OriginalL'auteur someoneinomaha
Vous pouvez toujours faire quelque chose comme:
en supprimant index.php avec .htaccess. Puis juste exploser sur le "-" pour chaque URI Segment.
ou même Supprimer l'ensemble exploser hors de l'équation, et il suffit de faire:
C'est la façon dont la plupart des grandes entreprises qui utilisent le Code de l'Allumeur ne leur tri et la pagination.
OriginalL'auteur David Lawrence
Personnellement je suis un grand fan ou le chemin d'accès/chaîne de requête de liste déroulante que Lou a suggéré, mais je pense que j'ai une méthode plus simple que la sienne.
Ma solution met le par page de paramètre dans la chaîne de requête, ainsi que vos paramètres de filtrage par exemple
Il fonctionne grâce à la page_query_string possibilité de la pagination de la classe. Ici, il est:
OriginalL'auteur Chris Rowe