web-dev-qa-db-fra.com

Comment utiliser PHP pour filtrer une liste comme si l'utilisateur avait cliqué sur un élément de la liste de l'outil de recherche

En fonction de certaines conditions internes, je dois filtrer une liste et activer les "Outils de recherche" pour afficher l'élément sélectionné dans la liste de filtres. L’effet net que nous souhaitons est identique à l’ajout du filtre à l’URL comme ceci http:...&Itemid=161&filter[parent_id]=29, qui fait exactement ce que je veux.

Selon Définition et récupération de variables d'état utilisateur :

Il existe deux manières de définir des variables d'état utilisateur. La première est assez intuitive et est réalisée à l'aide de la méthode JApplication :: setUserState. La seconde est un peu moins évidente et utilise la méthode JApplication :: getUserStateFromRequest. Il existe également deux méthodes pour récupérer des variables d'état utilisateur. La première utilise la méthode JApplication :: getUserState et la seconde consiste à utiliser la méthode JApplication :: getUserStateFromRequest. JApplication :: getUserStateFromRequest peut être utilisé pour stocker et récupérer des variables d'état utilisateur.

C’est très bien pour récupérer les informations, mais je ne suis pas sûr de la méthode et du meilleur endroit pour définir une variable d’état afin d’accomplir ce que l’URL ci-dessus fait pour que la valeur soit sauvegardée là où toutes les pièces et tous les morceaux devraient la trouver le long du fichier. façon.

J'ai essayé des variantes de ce code à plusieurs endroits et je peux généralement filtrer la sortie, mais je ne parviens pas à afficher les outils de recherche. Il me semble donc que la partie qui définit les valeurs que ->getUserStateFromRequest et autres fonctions ultérieures utilisées.

// Load the filter state.
$search = $app->getUserStateFromRequest($this->context.'.filter.search', 'filter_search');
$this->setState('filter.search', preg_replace('/\s+/',' ', $search));

Le code a une boucle comme ci-dessous - comment puis-je "définir" tout ce que $app->getUserStateFromRequest va-t-il "obtenir" les filtres à parcourir?

if ($filters = $app->getUserStateFromRequest($this->context . '.filter', 'filter', array(), 'array')) {
    foreach ($filters as $name => $value) {
        $this->setState('filter.' . $name, $value);
    }
}
3
GDP

Dans la méthode display de votre classe de vue, placez cette ligne avant parent::display($tpl);:

$this->get('State')->filter = array('Foo'=>'Bar');

J'utilise toujours cette ligne pour filtrer les éléments featured de mes composants et cela fonctionne:

$this->get('State')->{'filter.featured'} = 1;

J'espère que ça aide.

2
Farahmand