Problèmes avec <$set> widget et les conditions

Bonjour, en parcourant le site de tw je suis tombé là dessus:
http://tiddlywiki.com/languages/fr-FR/index.html#SetWidget

Affectation conditionnel d’une variable

Cette forme du widget set variable choisit une des deux valeurs spécifiées selon que le résultat du filtre soit une liste vide ou pas. Voici un exemple affectant une variable selon que le tiddler courant se nomme “monTitreMagique” ou pas :

<$set name=“maVariable” filter="[all[current]field:title[monTitreMagique]]" value=“C’est magique” emptyValue=“Ce n’est pas magique”>
<$text text=<>/>
</$set>

J’ai donc tenté de l’adapter à mes besoins qui était de savoir si un tiddler nommé “Test” existait:

<$set name="maVariable" filter="[[Test]]" value="existe" emptyValue="n'existe pas">
<$text text=<<maVariable>>/>
</$set>

seulement apparement je n’ai pas compris le principe puisque si j’essai avec un nom qui n’existe pas tel “aze” il m’affiche tout de même “existe” ! Étrange…

Pour résumé il me faudrait une condition du genre si le tiddler existe -> affiche “existe”, sinon -> affiche “n’existe pas”

D’avance merci pour votre aide

Bonjour Spangenhelm,

En effet ce filtre répond toujours vrai.
Je pense que c’est lié à TW qui crée automatiquement un lien (en italique) vers un tiddler qui n’existe pas. (donc en fait il existe toujours )

Du coup, j’ai testé un expression de filtre , en évitant les raccourcis. Ce qui donnerait :

 filter="[field:title[Test]]"    

De mon coté, ça a l’air de fonctionné.

<$set name="maVariable" filter="[field:title[Test]]" value="existe" emptyValue="n'existe pas">
<$text text=<<maVariable>>/>
</$set>    

–> donne “existe”

et

    <$set name="maVariable" filter="[field:title[aze]]" value="existe" emptyValue="n'existe pas">
   <$text text=<<maVariable>>/>
    </$set>

–> donne “n’existe pas”

En espérant que ça fonctionne pour toi aussi…

Bonjour @fab13n et merci de t’être penché sur la question!

Je viens de me rendre compte après des heures de recherches que le problème est en fait qu’il semblerait que ce widget ait un soucis de rafraichissement (avec Tw version 5.1.9 du moins) qui fasse qu’il ne réagit pas en « temps réel » et qu’il faut le forcer « à la main » (par exemple en éditant le tiddler ou en le sauvegardant ce genre de chose sinon il ne change pas d’état.) voilà pourquoi il m’affichait toujours la même chose!!

J’ai fait l’essai avec ta solution cela fonctionne comme prévu (si je force le rafraichissement)

Une discussion est ouverte sur google group et github (tiens apparement un lien github affiche un extrait de celui-ci, je ne suis pas sur que ça soit utile mais ça rend bien !):

https://groups.google.com/forum/#!searchin/tiddlywiki/$24set/tiddlywiki/uNeLW76wmWM/BWTfpAraAgAJ

Je vais suivre ces deux discussions et je reviendrais publier si j’ai du nouveau.

Edit: quelqu’un pense avoir trouvé une solution au problème et cette solution sera peut-être incluse dans la prochaine version, en attente…

+++ Spangenhelm +++

Je ne pense pas que ça soit un bug (en dehors du souci de rafraîchissement, je parle bien du fait que [[Test]] soit toujours évalué comme non vide). Un filtre rend une liste de titres… quels qu’ils soient. Ca permet, par exemple, de prendre le contenu du champ texte et de le séparer en liste de mots pour les compter… évidemment les mots n’existent pas en tant que tiddlers, mais le résultat est là néanmoins. Et puis, il faut bien ça pour pouvoir construire la liste des Tiddlers manquants.

Une autre solution pour vérifier l’existence d’un tiddler est d’utiliser:

filter="[[Test]!is[missing]]"

ou

filter="[[Test]is[tiddler]]"

Merci pour ces précisions c’est toujours bon à savoir!

Edit: il me reste un problème j’ai un tiddler appelé ‘test 1’ contenant le champ ‘draft.title’ et je souhaiterais me servir du widget afin de savoir si le contenu de ce champ est un tiddler existant seulement je ne parviens pas à “écrire” ce filtre.

Par exemple avec filter="[[{{test 1!!draft.title}}]is[tiddler]]"" cela ne fonctionne pas.
D’avance merci du coup de main !

Solutions (merci à @Evolena) :

Avec le widget $list:

  • <$list filter="[{Test 1!!draft.title}is[tiddler]]">Attention, le tiddler <$link><<currentTiddler>></$link> existe déjà!</$list>

Avec le widget $set:

  • <$set name="myVariable" filter="[{Test 1!!draft.title}is[tiddler]]" value="existe" emptyValue="n'existe pas"> <$text text=<<myVariable>>/> </$set>