Question

J'ai / paiements interface où l'utilisateur doit être en mesure de filtrer par gamme de prix, la banque, et d'autres choses. Ces filtres sont des boîtes de sélection standard. Quand je soumets la forme de filtre, toutes les données de poste va à une autre méthode appelée paiements / recherche. Cette méthode effectue la validation, enregistre les valeurs postales dans une flashdata de session et redirige le dos de l'utilisateur à / paiements en passant le nom flashdata via l'URL.

Alors mes liens standard sans pagination filtres sont exactement comme ceci:

payments/index/20/
payments/index/40/
payments/index/60/

Et si vous soumettez le formulaire de filtre, l'URL de retour est:

payments/index/0/b48c7cbd5489129a337b0a24f830fd93

Cela fonctionne tout simplement génial. Si je change le zéro pour quelque chose d'autre, il pagine très bien. Le seul problème est cependant que les << 1 2 3 4 >> liens page wont garder le hachage après la pagination de décalage. CodeIgniter génère les liens de la page en ignorant ce segment uri supplémentaire.

Ma config uri_segment est déjà réglé sur 3:

$config['uri_segment'] = 3;

Je ne peux pas mettre uri_segment à 4 parce que hachage peut existe ou non. Toute idée de comment puis-je résoudre ce problème? Est-il obligatoire pour les CI d'avoir le décalage comme le dernier segment de la uri? Peut-être que je suis en train une approche incorrecte, donc je suis toutes les oreilles.

Merci les gens.

edit: Pourquoi suis-je passer le nom flashdata par uri vous pourriez demander? car il permet à l'utilisateur d'ouvrir plusieurs onglets du navigateur et faire différentes recherches dans chaque onglet. Pour chaque filtrage que vous faites, un nouveau flashdata var est généré.

Était-ce utile?

La solution

Juste pour les utilisateurs venant de Google, voici la solution:

Dans le tableau de configuration de pagination, j'ai changé base_url pour cela:

$config['base_url'] = site_url('payments/index/' . $this->uri->segment(3) . '/' . $this->uri->segment(4));

Où segment (3) est mon numéro de décalage et le segment (4) est la valeur de hachage. Donc, dans ce cas, le hachage peut existe ou non et la pagination sera toujours.

Une autre approche pourrait être ceci: Si vous allez aux paiements, et il n'y a pas d'ID flashdata dans l'URL, il redirige l'utilisateur de paiements / recherche et créer un tableau vide avec des filtres vides. redirige ensuite retour aux paiements / _NEW_FLASHDATA_ID_HERE_. De cette façon, l'URL sera toujours un ID flashdata dans l'URL et vous pouvez le décalage dans le pagination dernier segment URI comme d'habitude.

Autres conseils

Pourquoi ne pas le hachage comme un élément de la session?

$this->session->set_userdata('session_flashdata_hash', $hash);

Le hachage sera alors disponible jusqu'à ce que vous la désélectionner

$this->session->unset_userdata('session_flashdata_hash');

Ou jusqu'à ce que vous détruisiez la session.

$this->session->sess_destroy();

Pourquoi ne pas vous vérifier pour voir si le hachage existe et définir le uri_segment sur cette base?

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