Question

J'ai développé un site au cours des dernières semaines en utilisant CodeIgniter comme framework. J'ai réfléchi à la meilleure façon d'accomplir quelque chose qui, dans beaucoup d'autres cadres dans d'autres langues, est relativement simple: les tableaux triables. CodeIgniter désactive les chaînes de requête par défaut, car vos URL contiennent des paramètres de méthode. Donc, une URL peut ressembler à:

/controller/method/param1/param2

Vous pourriez penser que vous pourriez simplement ajouter sortBy et sortOrder en tant que paramètres supplémentaires à la méthode du contrôleur. Je ne veux pas particulièrement faire cela, principalement parce que je veux un contrôleur réutilisable. Lorsque vous utilisez des paramètres de chaîne de requête, PHP peut facilement vous indiquer s’il existe un paramètre appelé sortBy . Cependant, lorsque vous utilisez des paramètres basés sur une URL, cela varie avec chaque contrôleur.

Je me demandais quelles étaient mes options. Autant que je sache, il s’agit de quelque chose comme:

  • Transmettez mes paramètres sortBy et sortOrder , contentez-vous de le sucer et développez un composant qui ne soit pas réutilisable.
  • Avoir un contrôleur supplémentaire, qui stockera le sortBy et le sortOrder dans la session (bien qu'il faudrait qu'il sache d'où vous venez, et vous renverra au page d'origine).
  • Avoir une sorte de fonction AJAX, qui appelle le contrôleur ci-dessus; puis rechargez la page.
  • Hack CodeIgniter pour réactiver les chaînes de requête. En fait, si c’est la seule option possible, nous vous saurions gré de créer des liens.

Je ne peux tout simplement pas croire qu'une tâche aussi simple poserait un tel problème! Est-ce que je manque quelque chose? Quelqu'un a-t-il des recommandations?

Modifiez pour clarifier: j'aime jQuery et je l'utilise déjà sur le site. TableSorter est donc une bonne option. Toutefois, je souhaiterais effectuer un tri côté serveur car certaines pages peuvent comporter un grand nombre de résultats, y compris la pagination.

Était-ce utile?

La solution

J'utilise cette méthode: http://codeigniter.com/forums/viewthread/45709/#217816

Je l'ai également développé pour que les cookies soient basés sur le tri afin que, lorsque quelqu'un revient, le tableau soit trié comme avant.

Autres conseils

Si vous êtes prêt à effectuer un tri côté client, le plug-in Tablesorter pour jQuery est plutôt sympathique.

Je me suis heurté à cela avec un tableau assez complexe. La partie difficile était que la table pourrait augmenter / diminuer en fonction de certaines variables !! Grosse douleur: (

Voici comment je l'ai géré ..

Système / application / config / config.php ajusté pour autoriser le caractère de virgule dans l'URI:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';

Régler mon contrôleur avec une fonction de tri:

function sorter() {
  //get the sort params
  $sort = explode(",",$this->uri->segment(3)); //the 3rd segment is the column/order
  //pass the params to the model
  $data = $this->model_name->get_the_data($sort[0],$sort[1]);
  $this->_show($data);
}
function _show($data) {
  //all the code for displaying your table
}

J'ai trop simplifié, mais vous voyez l'idée. Le but est d'avoir une url comme ceci:

/ controller / sorter / nomcolonne, ordre de tri

La fonction de tri appelle une autre fonction interne pour gérer la logique d'affichage / modèle / vue. Son travail consiste à traiter l'appel de tri et à extraire les données appropriées du modèle.

Bien sûr, cela pourrait être réduit à votre fonction actuelle:

function showGrid() {
  $sort = $this->uri->segment(3);
  if ($sort) {
    //get the data sorted
  } else {
    //get the data the default way
  }
  //rest of your view logic
}

De cette façon, vous n’avez même pas besoin d’une fonction distincte - vous pouvez utiliser le troisième segment pour définir votre tri.

J'utilise ceci: http : //net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/

de net.tutsplus.com

Malheureusement, il utilise ce que vous n'aimez pas (/ controller / method / param1 / param2) mais j'ai ajouté ceci (la fonction d'affichage) pour chaque contrôleur lorsque j'ai besoin de pagination. Ou faites-en un assistant.

Vous trouverez un autre exemple: http: //www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/

J'ai récemment ajouté ce Trieur de tables (qui utilise Prototype) à un tas de mes pages. C'est rapide et assez facile à mettre en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top