Aller au contenu

Sujets conseillés

Posté

Bonjour, j'aimerai avoir plusieurs conditions dans une view.

J'utilise les filters, et sur le titre du node je voudrais dire :

NOT LIKE 'A%' AND NOT LIKE 'B%' AND NOT LIKE 'C%' etc.

afin d'avoir tous les nodes qui commencent par autre chose qu'une lettre.

Dans les filters je ne trouve que BEGINS WITH ou ENDS WITH mais pas DOES NOT BEGIN WITH

Comment puis-je faire pour arriver à ce résultat ?

Posté

merci c'est une bonne idée je n'y avais pas pensé car cela voudrait dire faire du code spécial pour ces nodes qui ne commencent pas par une lettre, et en plus j'aimerai bien savoir comment arriver à résoudre ce problème avec view car c'est un problème général (comment avoir conditions qui vont plus loin que les filters fournis) dont la solution pourrait me servir dans le futur au fur et à mesure que j'utilise views de plus en plus dans mes sites.

Posté

Une expression régulière irait certainement très bien et mieux que pleins de NOT LIKE ... mais je ne sais pas justement comment l'utiliser dans une view, comment faire un filter personnalisé en somme..

Posté (modifié)

Lorsque les filtres standards de views ne sont pas suffisants (et pourtant il y en a bcp), on peut créer soit même un module qui va créer ce nouveau filtre avec une expression régulière par exemple, et le rendre disponible via l'api du module views.

Je ne l'ai jamais fait, mais a priori en prenant exemple sur l'un des filtres existants on doit pouvoir s'en tirer.

Mon conseil est de bien s'assurer qu'il n'y a pas un moyen standard avant de se lancer tête baisser dans la tache (sauf à but pédagogique...).

Modifié par Inéation
Posté

Toi Inéation tu es une référence Drupal sur ce forum, tu vois ce que je veux dire dans mon premier message?

Je voudrais une view qui me liste tous mes nodes d'un certain type, qui ne commence pas par A..Z

C'est pour mes extensions de fichiers, j'ai fais des view pour chaque lettre, mais j'aimerai regrouper tous les chiffres et symboles dans une seule view car elles ne sont pas nombreuses.

Il n'existe pas en standard de filter "Does not begin with" et je n'arrive pas à trouver comment faire pour mettre ce que je veux dans la partie WHERE de la requete SQL finale.

Sinon merci pour la piste de la création d'un module qui ajoute un filter supplémentaire, je sais au moins quoi rechercher.

Posté (modifié)

Sinon tu peux ruser... ;)

Tu peux créer un custom field CCK, tu y stockes une formule qui récupère la première lettre et fait les traitements de regroupement et après tu crées une views avec ce champ comme filtre...

Mais là c'est quand même pas très beau... Oouh honte à moi...

[EDIT] Je voulais dire un "computed field" (il était tard).

Modifié par Inéation
Posté

Je connais ce genre de ruse avec modx j'en use et j'en abuse, l'important c'est le Getting Things Done, le résultat est là l'élégance n'est pas toujours la solution la plus efficiente :P

Posté (modifié)

Merci pour la sugegstion de Computed Field, j'ai regardé la page module et quelques snippets PHP, mais là dedans j'ai lu qu'il fallait ensuite mettre à jour les nodes pour que le champ CCK calcule la valeur (et le mette dans la base de données)

Je ne sais pas si les concepteurs ont prévu un bouton ou autre pour rapidement mettre à jour la valeur du champ CCK, car cela peut devenir impossible à faire à la main à partir de plusieurs centaines de nodes, et si par exemple on veut changer au bout d'un an la formule qui génère la valeur du champ.

Je pense, j'espère qu'ils ont prévu un bouton pour mettre à jour tout d'un coup mais je ne suis pas allé plus loin car j'ai procédé d'une autre façon :

Je me suis farci la liste complète des modules ayant un rapport avec Views et je suis tombé sur le module Views OR http://drupal.org/project/views_or

Cela répond au besoin d'insérer des OR au lieu des AND dans la partie WHERE de la requête SQL, ils disent bien que quand Views proposera l'option en standard, le module ne servira plus à rien et les views devront être refaites.

Dans mon cas, je ne souhaite finalement afficher que les nodes dont le titre commence par un chiffre ou un symbole, donc en utilisant ce module j'ai pu obtenir cette requete :

WHERE (node.type in ('extension_de_fichier'))
AND (((node.title) LIKE ('0%')) OR ((node.title) LIKE ('1%')) OR ((node.title) LIKE ('2%')) OR ((node.title) LIKE ('3%')) OR ((node.title) LIKE ('4%')) OR ((node.title) LIKE ('5%')) OR ((node.title) LIKE ('6%')) OR ((node.title) LIKE ('7%')) OR ((node.title) LIKE ('8%')) OR ((node.title) LIKE ('9%')) OR ((node.title) LIKE ('!%')) OR ((node.title) LIKE ('$%')))
ORDER BY node_title ASC

et la liste des filtres est comme ça :

Node: Type = Extension de fichier
Views: Views Or begin alternatives =
Node: Titre begins 0
Views: Views Or next alternative =
Node: Titre begins 1
Views: Views Or next alternative =
Node: Titre begins 2
Views: Views Or next alternative =
Node: Titre begins 3
Views: Views Or next alternative =
Node: Titre begins 4
Views: Views Or next alternative =
Node: Titre begins 5
Views: Views Or next alternative =
Node: Titre begins 6
Views: Views Or next alternative =
Node: Titre begins 7
Views: Views Or next alternative =
Node: Titre begins 8
Views: Views Or next alternative =
Node: Titre begins 9
Views: Views Or next alternative =
Node: Titre begins !
Views: Views Or next alternative =
Node: Titre begins $
Views: Views Or end alternatives =

Comme symboles je n'ai mis que ! et $ et je pourrais simplement en rajouter le cas échéant.

Et voilà le résultat : http://www.lire-fichier.com/liste-extensio...res-et-symboles :-)

Merci pour l'aide apportée, on a pas pu résoudre le problème de "DOESN'T BEGIN WITH" mais comme je n'avais pas beaucoup de cas à traiter, j'ai pu faire autrement.

Au niveau du temps de génération de cette requête, c'est pas beaucoup :

Query build time 7.28 ms

Query execute time 27.47 ms

View render time 237.37 ms

Modifié par LiFi

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...