J'ai essayé d'implémenter des données de filtrage (base de liste sur la catégorie sélectionnée) en utilisant une liste déroulante avec pagination observfield et ajax. J'utilise la session pour mémoriser la catégorie sélectionnée afin de garder la pagination.Filtrage des données à l'aide du champ d'observation ajax
Voici mon code (CakePHP 1.2)
Vu:
echo $form->select('Category.id', $categories, null, array('id' => 'categories'),'Filter by Categories')
echo $ajax->observeField('categories' ,array('url' =>'update_category','update' => 'collectionDiv'));
Contrôleur:
if(!empty($this->data['Category']['id']))
{
$cat_id=$this->data['Category']['id'];
$filters=array('Collection.category_id' => $cat_id);
$this->set('collections', $this->paginate('Collection', $filters));
$this->Session->write($this->name.'.$cat_id', $category_id);
}
else
{
$cat_id=$this->Session->read($this->name.'.cat_id');
$filters=array('Collection.category_id' => $cat_id);
$this->set('collections', $this->paginate('Collection'));
}
Le travail de filtre comme je le voulais, mais le problème est lorsque je sélectionne vide value ('Filtrer par catégorie') il se souvient toujours de la dernière session de la catégorie, donc je ne peux pas revenir à la liste par défaut (Toutes les listes d'enregistrements sans filtre).
J'ai essayé de faire certaines conditions mais toujours pas de succès. Y a-t-il un autre moyen? S'il vous plaît, j'apprécie votre aide. merci
Hermawan
merci pour la réponse. J'ai essayé votre conseil mais ne fonctionne toujours pas. Disons que je prends la «catégorie de peinture», puis le DIV changer le contenu que je veux, mais si vous cliquez sur le numéro de page le DIV va contenter des données entières non seulement «Catégorie de peinture». – hermawan
Il me semble que la pagination ajax n'est pas configurée correctement, bien que je commence à penser que cela pourrait être une limitation de la pagination. Je me souviens d'avoir eu un problème similaire lorsque j'ai modifié la requête d'origine comme ceci - cela ne se poursuit pas sur les pages suivantes. Je l'ai résolu en écrivant une méthode de pagination personnalisée sur le modèle approprié. La pagination est bonne pour prendre une requête, paginer et trier les résultats. Au-delà, il a besoin d'aide. – Leo
Remerciez Leo, La pagination est réglée correctement. Le problème est, nous devrions différer où la demande de est? Quand ajax observefield il va vérifier la catégorie "id", mais si la pagination Ajax il devrait se souvenir de la catégorie. J'observe quand ajax vient de la pagination, $ this-> passedArgs retournera le numéro de la page, mais vide quand il est déclenché par Ajax. J'explique ma solution. Merci pour le partage – hermawan