Comment passer des filtres contextuels à une vue via des services

11

J'ai une vue qui accepte un filtre contextuel afin de retourner les résultats corrects. J'utilise Services 3 et Drupal 7. Je peux créer un point de terminaison et récupérer la vue via les services. Mais il semble qu'il n'y ait aucun moyen de passer le filtre contextuel, car services_views n'a qu'une méthode de récupération (qui utilise GET). Quelqu'un sait-il si cela est possible et, dans l'affirmative, comment le faire?

user379468
la source

Réponses:

14

passez votre filtre comme suit: votreendpoint? args [0] = valeur & args [1] = valeur

Bonne chance

Bassel Alkhateeb
la source
3

Tant que les filtres sont exposés dans la vue, les noms de champs sont disponibles en tant que filtres contextuels. Par exemple, exposez NID dans la liste des filtres et vous pouvez faire

GET /endpoint?nid=5
cybertoast
la source
1
Cette solution fonctionne pour les critères de filtre exposés. À ma connaissance, les filtres contextuels ne fonctionnent pas, mais il s'agit d'une solution de contournement exceptionnelle.
Brent
3

Il s'agit d'une question à laquelle il a déjà été répondu, mais pour les autres personnes qui naviguent ici à l'avenir, je recommanderais d'utiliser et de consulter la documentation dans Vues des services . Il explique comment passer des filtres contextuels avec un tas d'autres arguments possibles, et il a une vidéo de démonstration et montre des exemples.

cdmo
la source
1
Après avoir fait d'autres recherches, il semble que cela ne soit pas possible sans modification de services_views.
user379468
2

Si vous devez utiliser plusieurs valeurs dans votre filtre contextuel, je vous suggère de procéder comme suit:

  • Créez votre filtre contextuel (dans mon cas: nid)
  • Cliquez sur "Fournir une valeur par défaut" et définissez le type comme filtre contextuel PHP attendez-vous à une chaîne avec plusieurs valeurs séparées par un + ou une virgule.

return str_replace("|", "+", $_GET['nid']);

  • Dans la section "Plus", cochez "Autoriser plusieurs valeurs".

Maintenant, lorsque vous appelez votre service, fournissez vos filtres contextuels de cette façon: ... / mon_service? Nid = 1 | 2 | 3

Ebpo
la source
2

Pour ceux d'entre vous qui ont encore des problèmes, assurez-vous que lorsque vous ajoutez un filtre à la vue, sous les paramètres du champ spécifié, il y a un identificateur de filtre. Il doit s'agir de l'argument transmis à la chaîne de requête dans les deux formats répertoriés dans la documentation des vues de services.

marque
la source
Je me débattais là-dessus, pas du tout intuitif depuis que j'imaginais le titre à utiliser comme touche de filtre. Je vous remercie!
donnadulcinea
1

J'ai pu obtenir un filtre contextuel avec Drupal Services en: 1) activant le module `` Vues Contextual Filter Query '' ( https://drupal.org/project/views_contextual_filter_query ) 2) en passant le filtre contextuel via l'URL comme chaîne de requête.

Dans le filtre contextuel, vous devrez sélectionner 'QUAND LA VALEUR DU FILTRE N'EST PAS DISPONIBLE' -> 'Paramètre de requête dans l'URL. Vous pourrez alors ajouter le nom du paramètre que vous utiliserez dans l'URL. Cela vous permet également d'utiliser les + et | caractères pour sélectionner plusieurs critères de filtrage.

thomaschall
la source