LiFi Posté 5 Février 2009 Posté 5 Février 2009 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 ?
guix77 Posté 11 Février 2009 Posté 11 Février 2009 Je ne sais pas, mais pour ce genre de choses il vaudrait mieux associer un terme à ces nodes spéciaux non ?
LiFi Posté 11 Février 2009 Auteur Posté 11 Février 2009 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.
captain_torche Posté 11 Février 2009 Posté 11 Février 2009 Une expression régulière ne conviendrait-elle pas ? http://dev.mysql.com/doc/refman/5.1/en/regexp.html
LiFi Posté 11 Février 2009 Auteur Posté 11 Février 2009 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..
Inéation Posté 11 Février 2009 Posté 11 Février 2009 (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é 11 Février 2009 par Inéation
LiFi Posté 11 Février 2009 Auteur Posté 11 Février 2009 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.
Inéation Posté 12 Février 2009 Posté 12 Février 2009 (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é 13 Février 2009 par Inéation
davidm Posté 13 Février 2009 Posté 13 Février 2009 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
LiFi Posté 14 Février 2009 Auteur Posté 14 Février 2009 (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 fichierViews: Views Or begin alternatives =Node: Titre begins 0Views: Views Or next alternative =Node: Titre begins 1Views: Views Or next alternative =Node: Titre begins 2Views: Views Or next alternative =Node: Titre begins 3Views: Views Or next alternative =Node: Titre begins 4Views: Views Or next alternative =Node: Titre begins 5Views: Views Or next alternative =Node: Titre begins 6Views: Views Or next alternative =Node: Titre begins 7Views: Views Or next alternative =Node: Titre begins 8Views: Views Or next alternative =Node: Titre begins 9Views: 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é 14 Février 2009 par LiFi
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant