This site uses cookies and similar technologies.

If you don't change browser settings, you agree to it.

I understand
45 Posts
jeromehej
6 years ago
9
Topic

Bonjour,

Comment dans Seblod 3 on peut filtrer une liste de recherche sur des champs dynamiques à choix multiple s'il vous plait ?

Je crois que dans Seblod 2 c'était via un plugin mais je ne le trouve pas dans Seblod 3.

Cordialement.

Get a Book for SEBLOD
6 years ago
6
Level 1

Bonsoir,

il n'y a pas 2 SEBLOD mais bien un seul, par consequent vous pouvez appliquer tous ce que vous avier pris l'habitude de faire.

Pour trier une liste  avec un champ dynamique multiple il suffit de mettre votre champ dans le formulaire de recherche. Par contre comme toute recherche avec des champs à choix multiple, vous devez fixer le match a "any word" ou  "any word exact" ou "each word", ou ... et surtout en clickant sur le + a coté de la correspondance il faut preciser le separateur des données multiples, en general la virgule.


Cordialement.

Lionel

45 Posts
jeromehej
6 years ago
5
Level 2

En fait, je n'ai pas trop utiliser Seblod 2. J'ai surtout parcouru l'ancien forum sur lequel je récolte les info pour comprendre Seblod 3 ;-)

Par contre, j'ai toujours la liste de vide après avoir sélectionné un chose dans la liste à choix multiple du filtre (pour précision, la totalité des articles s'affichent bien lorsque je n'ai rien sélectionné).

Dans l'onglet "Recherche" j'ai en position "Mainbody" le CCK masqué qui à en "Valeur dynamique" le nom du formulaire et j'ai aussi  le champs "genres de jeu" (qui est la liste à choix multiples) qui a un "Variation" : "Filtre" (cela permet de filtrer sans le bouton Submit. En "Correspondance" de ce champs j'ai "Au moins un mot" et dans le "+" j'ai la virgule sans le "Séparateur".

Est ce qu'il faut installer ce fameux plugin que j'ai lu sur l'autre forum SVP ?

6 years ago
4
Level 3

Bonsoir,

je ne vois pas de quel plugin vous voulez parler. Quoi qu'il en soit il n'y a besoin de rien de plus que le champ .

Si vous activé le debugger dans l'onglet configuration de la recherche, la requete effectuée va s'afficher avant le formulaire et nous donner des indications sur ce qui est recherché.


Cordialement.

Lionel

45 Posts
jeromehej
6 years ago
3
Level 4

Quand pas de filtre :

SELECT t0.id as pid, t0.pk as pk, t0.pkb as pkb,t0.cck as cck, t0.storage_location as loc,tt.id AS type_id, tt.alias AS type_alias FROM `#__cck_core` AS t0 LEFT JOIN `#__content` AS t1 ON t1.id = t0.pk LEFT JOIN `#__cck_core_types` AS tt ON tt.name = t0.cck WHERE t1.state = 1 AND t1.access IN (1,1,2,5) AND ( t1.publish_up = '0000-00-00 00:00:00' OR t1.publish_up <= '2013-05-20 20:25:00' ) AND ( t1.publish_down = '0000-00-00 00:00:00' OR t1.publish_down >= '2013-05-20 20:25:00' ) AND t0.cck LIKE '%js\_jeux\_fiche%' GROUP BY t0.pk ORDER BY t1.title ASC

0.014 seconds (+0.014); 7.01 MB (+7.010) - afterSearch [Cache=OFF]

0.047 seconds (+0.033); 7.61 MB (+0.603) - afterRender [Cache=OFF]


Quand le texte "FPS" sélectionné dans le filtre :

SELECT t0.id as pid, t0.pk as pk, t0.pkb as pkb,t0.cck as cck, t0.storage_location as loc,tt.id AS type_id, tt.alias AS type_alias FROM `#__cck_core` AS t0 LEFT JOIN `#__cck_store_form_js_jeux_fiche` AS t1 ON t1.id = t0.pk LEFT JOIN `#__content` AS t2 ON t2.id = t0.pk LEFT JOIN `#__cck_core_types` AS tt ON tt.name = t0.cck WHERE t2.state = 1 AND t2.access IN (1,1,2,5) AND ( t2.publish_up = '0000-00-00 00:00:00' OR t2.publish_up <= '2013-05-20 20:26:38' ) AND ( t2.publish_down = '0000-00-00 00:00:00' OR t2.publish_down >= '2013-05-20 20:26:38' ) AND t0.cck LIKE '%js\_jeux\_fiche%' AND ((t1.js-jeux-genres-de-jeux LIKE '%12%')) GROUP BY t0.pk ORDER BY t2.title ASC

0.120 seconds (+0.120); 7.01 MB (+7.010) - afterSearch [Cache=OFF]
0.120 seconds (+0.000); 7.01 MB (+0.001) - afterRender







6 years ago
2
Level 5

heu la je comprend même pas commment ça peux foncionner. 

=> AND t0.cck LIKE '%js\_jeux\_fiche%'   : votre type de contenu a un bien drole de nom. deja la il y a un probleme. mettre des nom pareil c'est vouloir se compliquer

=> t1.js-jeux-genres-de-jeux LIKE '%12%' : votre champ a aussi un drole de nom mais passe encore, il a plutot l'air de bien fonctionner, reste a savoir si vous avez des contenus avec la valeur 12 dans ce champ.


Je dirai que le probleme vient plutot du champ cck. je ne pense pas qu'un type de contenu puisse avoir des antislash dans son nom.


Cordialement.

Lionel

45 Posts
jeromehej
6 years ago
1
Level 6

Je nomme les alias de ce que je crée en mettant mes initiales + "_" + un mot concernant la partie concernée du site + "_" + le nom du type de contenu ou de la liste de recherche, etc. Cela donne par exemple "js_jeux_fiche". Quant aux champs, j'utilise le même procédé mais avec des "-" à la place des "_" car j'ai remarqué qu'avec les "_" Seblod effaçait systématiquement le nom de mes nouveaux champs lors de leur enregistrement. Tandis qu'avec "-", çà passe. Cette façon de faire me permet de repérer rapidement, même dans les tables de la bdd si un jour j'ai besoin d'y aller, ce que j'ai crée moi-même.

Par contre, je ne sais pas pourquoi dans la requête cela ajoute un "\" avant chaque "_".

Je suis allé dans les tables pour voir si le 12 était bien indiqué mais je ne vois pas trop comment Seblod gère ses données dans les tables.

Je vous donne un exemple de filtre qui fonctionne : J'ai enlevé le champs "Genre de jeux" ajouté dans l'onglet "Recherche" le champs "Article Title" avec "Correspondance" sur "Au moins un mot". En frontend, je tape dans le champs du filtre  un texte existant dans le titre d'un des articles et, là, le filtre fonctionne correctement.

SELECT t0.id as pid, t0.pk as pk, t0.pkb as pkb,t0.cck as cck, t0.storage_location as loc,tt.id AS type_id, tt.alias AS type_alias FROM `#__cck_core` AS t0 LEFT JOIN `#__content` AS t1 ON t1.id = t0.pk LEFT JOIN `#__cck_core_types` AS tt ON tt.name = t0.cck WHERE t1.state = 1 AND t1.access IN (1,1) AND ( t1.publish_up = '0000-00-00 00:00:00' OR t1.publish_up <= '2013-05-21 04:21:25' ) AND ( t1.publish_down = '0000-00-00 00:00:00' OR t1.publish_down >= '2013-05-21 04:21:25' ) AND t0.cck LIKE '%js\_jeux\_fiche%' AND ((t1.title LIKE '%battle%')) GROUP BY t0.pk ORDER BY t1.title ASC

Vous remarquerez que les "\" n'empêchent pas de faire fonctionner la requête dans ce cas. Les "\" sont peut-être ajouté car le "_" est un caractère spécial ?

Pour précision, j'ai une catégorie contenant les fiches jeux. Le titre des articles sont les noms des jeux (un article = une fiche jeu). J'ai ensuite une catégorie "Genre de jeux" et j'ai un article par genre de jeux. Le champs "js-jeux-genres-de-jeux" reprend la liste des articles de cette catégorie.

Au fait, vous avez parlé du CCK. Doit il être complété d'une certaine façon du fait que j'ai des champs à choix multiple ?

Espérant que tout cela puisse vous aider à m'aider ;-)

Cordialement.

45 Posts
jeromehej
6 years ago
0
Level 7

Bonjour,

De mon côté, malgré différents tests, je n'ai toujours pas trouvé comment faire pour que le filtre fonctionne correctement lorsqu'il interroge un champ multi-sélection.

Je suis dans l'obligation de stopper pour l'instant mon projet car cette sélection de champs multi-sélection est une fonction indispensable dans mon projet.

Suis-je le seul dans ce cas ? Est ce cela fonctionne chez d'autres personnes ? Est ce un bug du programme ?

Bien cordialement.

45 Posts
jeromehej
6 years ago
1
Level 1

Bonjour,

Pouvez vous juste me dire si le problème de filtre sur des champs multi-sélection est un bug ou une mauvaise utilisation de ma part svp ?

En effet, si c'est un bug, cela m'éviterait de passer de temps à trouver une solution pour rien.

Merci d'avance.

Bien à vous.

6 years ago
0
Level 2

Bonjour jermehej,

je confirme, la recherche sur les champs à choix multiple fonctionne correctement.

Après tous dépend de comment vous avez stocker vos champs. Si éventuellement vous changer le type de stockage en cours de route, vous devez bien entendu, revalider tous vos contenus pour (edit / save) pour que la modif soit prise en compte.


Normalement on stock un champ a choix multiple en "Standard | Article | mon_champ". Les différentes valeur sont stocker sous forme de chaine, les différentes valeurs étant séparées par des virgules. C'est pour cela que dans la correspondance de la recherche on spécifie le séparateur.


Je vous suggere de faire un test sur un type de contenu test avec simplement un ou deux champs en démarrant proprement.


Autre chose, mais la c'est que mon avis, il me semble que votre méthode de nommage des champs s'apparente beaucoup a "Pourquoi faire simple quand on peux faire compliqué !".


Bien cordialement.

Lionel

Get a Book for SEBLOD