Où placer les noisettes
Une noisette est un fichier HTML placée dans un sous-répertoire noisettes
situé dans le répertoire d’un plugin ou dans le répertoire squelettes
.
Pour être utilisée par le noiZetier, une noisette doit impérativement être accompagnée d’un fichier de configuration au format YAML [1].
Nommage des noisettes
Une noisette pouvant s’insérer sur n’importe quelle page sera nommée tout simplement nom_noisette.html
. Par convention, seuls les lettres minuscules et l’underscore (_) sont autorisés pour nom_noisette.
L’usage du tiret (-) est réservé pour spécifier les noisettes ne pouvant être incluses que sur une page spécifique et qui sont nommées nom_page-nom_noisette.html
. Ainsi, une noisette spécifique à la page article sera nommée article-nom_noisette.html
et le noiZetier ne la proposera que sur la page article et les compositions de la page article.
Au cas où une noisette ne devrait être proposée que sur une composition spécifique, elle sera nommée type-composition-nom_noisette.html
Décrire une noisette au format YAML
Pour bénéficier de toutes les possibilités offertes par le plugin Saisies ainsi que des vérifications offertes par le plugin Vérifier, il est nécessaire de décrire la noisette au format YAML.
Le fichier de configuration sera nommé de la même manière que la noisette. Seule son extension sera modifiée en .yaml
.
Exemple :
nom: '<:aveline:nom_menu:>'
description: '<:aveline:description_menu:>'
icon: 'images/menus-24.png'
necessite:
- 'menus'
contexte:
- 'id_rubrique'
- 'page'
parametres:
-
saisie: 'menu'
options:
nom: 'identifiant'
label: '<:aveline:label_identifiant_menu:>'
cacher_option_intro: 'oui'
obligatoire: 'oui'
-
saisie: 'oui_non'
options:
nom: 'afficher_titre_menu'
label: '<:aveline:label_afficher_titre_menu:>'
defaut: 'on'
nom
est obligatoire. Il indique le nom de la noisette à afficher dans l’interface de configuration. Peut être une chaîne de langue.
description
est facultatif. Permet de détailler ce que fait la noisette. Peut être une chaîne de langue.
icon
est facultatif. Il s’agit du chemin relatif à une image qui sera utilisée comme icône de la noisette.
parametres
est optionnel et permet de spécifier les paramètres configurables que l’on souhaite passer à la noisette.
Les paramètres sont dès lors décrits en suivant les spécifications du plugin Saisies. Il est alors possible de décrire finement un formulaire de configuration de la noisette.
Il est possible d’ajouter des vérifications à effectuer sur les valeurs des paramètres. Exemple :
-
saisie: 'input'
options:
nom: 'pas_pagination'
label: '<:aveline:label_pas_pagination:>'
defaut: 5
verifier:
type: 'entier'
options:
min: 1
contexte
permet de spécifier les variables de contexte à transmettre à la noisette. Si l’on ne doit transmettre qu’une seule variable, on pourra écrire
contexte: 'une_variable'
[2]. Si plusieurs variables doivent être transmises, on optera pour l’écriture suivante :
contexte:
- 'variable_1'
- 'variable_2'
- 'variable_3'
Si contexte
n’est pas spécifié, toutes les variables d’environnement seront transmises à la noisette. Il est également possible de spécifier explicitement que toutes les variables d’environnement doivent être transmises avec contexte: 'env'
.
Si aucune variable d’environnement ne doit être transmise à la noisette, on indiquera contexte: 'aucun'
.
necessite
est facultatif et permet de spécifier que cette noisette ne doit être proposée que si un plugin spécifique est activé. Cela peut être utilisé pour des noisettes fournies par un squelette compatible avec certains plugins sans les imposer.
Récupérer les paramètres de la noisette
Lors de l’inclusion de la noisette, le noiZetier transmet les paramètres en tant que variable d’environnement. Ceux-ci se récupèrent donc très facilement avec #ENV{param}
.
Le noiZetier transmet systématiquement à la noisette les variables d’environnement bloc
, type
et composition
.
Inclusion AJAX
Le noiZetier inclut les noisettes avec le critère {ajax}
. Il est donc possible d’utiliser des liens avec la classe ajax
. Voir la documentation de SPIP pour plus de détails.
Il est possible de spécifier au noiZetier qu’une noisette ne doit pas être inclue en AJAX. Pour cela, il suffit d’ajouter au YAML de la noisette la ligne suivante :
ajax: 'non'
Inclusion dynamique
Le noiZetier inclut par défaut les noisettes de manière statique. Elles n’ont donc pas de cache autonome mais le cache de la page englobante.
À partir de la version 0.12.0, il est cependant possible d’inclure dynamiquement une noisette. Cette dernière aura alors sa propre durée de cache définie avec la balise #CACHE
au début du fichier HTML de la noisette. Cela est notamment utilise pour des noisettes nécessitant un cache nul.
Pour indiquer au noiZetier d’inclure dynamiquement la noisette, il faut ajouter la ligne suivante au YAML de la noisette :
inclusion: 'dynamique'
Utilisation des noisettes en dehors du noiZetier
Une noisette restant un squelette inclus, elle peut être utilisée par simple inclusion dans un squelette : <INCLURE{fond=noisettes/nom-complet-noisette}{param=val}>
.
Le cache des noisettes
Afin d’améliorer la rapidité du noiZetier, les descriptions des noisettes, des variables de contexte à transmettre aux noisettes et l’inclusion en AJAX ou non sont mises en cache.
De fait, lorsque vous développez une noisette et testez en même temps comment se présente le formulaire de configuration dans le noiZetier, il est possible que vos dernières modifications ne soient pas affichées à moins que vous ne rajoutiez &var_mode=recalcul
dans l’URL de la page.
Aperçu de la noisette
À partir de la version 2 du noizetier, vous pouvez définir un aperçu de la noisette. Il s’agit d’un squelette nommé noisettes/nom_noisette-preview.html
qui recevra les paramètres de la noisette et qui permettra de produire un résumé de ce que fera la noisette.
Voici par exemple le contenu du fichier noisettes/article-filariane-preview.html
du plugin Aveline :
[(#SET{ariane_separateur, #ENV{ariane_separateur}|is_null|non|?{#ENV{ariane_separateur},'>'}})]
[(#SET{longueur_max_titres, #ENV{longueur_max_titres}|sinon{80}})]
[(#ENV{afficher_lien_accueil}|oui)<:accueil_site:>]
[(#ENV{afficher_secteur}|oui) [(#GET{ariane_separateur})] <:aveline:secteur:>]
[(#GET{ariane_separateur})] <:rubriques:> [(#ENV{afficher_secteur}|non) (<:aveline:secteur_exclu:>)]
[(#ENV{afficher_titre_article}|oui) [(#GET{ariane_separateur})] <:article:>]
Discussions par date d’activité
14 discussions
Bonjour,
J’essaie (en vain) de passer une chaine de langue avec variable dans le label d’une saisie :
Les accolades ne passent pas, normal, mais y a t’il un moyen d’y remédier.
J’ai essayé les solutions proposées ici https://symfony.com/doc/current/components/yaml/yaml_format.html
ou là https://stackoverflow.com/questions/11301650/how-to-escape-indicator-characters-i-e-or-in-yaml, sans succès.
Une idée ?
Cordialement
Répondre à ce message
Hello,
j’aimerais créer une noisette permettant de charger un fichier (une image en l’occurence, mais cela pourrait être n’importe quoi : pdf, etc.).
Avec le plugin CVT Upload et la déclaration YAML suivante…
…j’ai bien un formulaire d’upload de fichier qui apparait, mais rien ne s’enregistre en BdD.
Une idée ?
Répondre à ce message
Bonjour,
Dans un yaml construisant le formulaire de paramétrage d’une noisette, dans mon cas présent l’objet grappe, je conditionne l’affichage d’une saisie avec l’option afficher_si, je n’arrive pas a récupérer ou transmettre le résultat de ma saisie 1 a ma saisie 2 , pourtant d’après les docs que j’ai pu trouver il me semble que cela devrait fonctionner non ?
exemple :
Merci de vos idées ou explications
Je ne comprends pas la dernière ligne ?
identifiant: '@identifiant@'
On peut en effet conditionner l’affichage d’une saisie en fonction des valeurs des autres saisies (en fait cela génère un javascript pour afficher/masquer la saisie en fonction des autres valeurs). Par contre, on ne peut pas récupérer la valeur d’une saisie comme paramètre d’une autre saisie.
Justement donc, ça repond a ma question : ce n’est pas possible.
En fait ma première saisie devrait lister les grappes et retourner l’identifiant
la seconde quand a elle devrait en fonction de l’identifiant lister les objets LIAISONS de la grappe en question.
en fait il faut que je fasse une saisie qui fasse les deux en une pour que ça fonctionne il me semble.
tout à fait
Répondre à ce message
Question toute bête : le titre et le descriptif de mes noisettes n’apparaissent pas dans le back-office. Le logo, lui apparaît. J’ai eu beau tout retourner, et vider et re-vider le cache, quelque chose m’échappe.
Voici le yaml :
Et en image jointe, ce qui s’affiche dans le back-office.
Merci !!
Dans la description, il y a une apostrophe alors que l’apostrophe est utilisée pour délimiter le texte. Essayez d’utilisez des guillemets doubles :
"Affiche un player audio si fichier MP3 joint à l'article"
J’ai mis des guillemets typographiques, voici mon fichier yaml :
Mais ça n’y change rien...
Euhhh vous avez utilisez des guillemets typographiques français ou de simples guillemets doubles droits ? (
"
). Seuls les guillemets droits sont reconnus comme délimiteurs de texte.Par aileurs, combien d’espaces avez avant
- 'id_article'
en début de ligne ? YAML est très strict en matière d’identation. Il doit y avoir exactement 2 espaces.Merci !
Alors, les guillemets doubles ne changent rien. Concernant l’espace double, il est à mettre en début de ligne, j’ai fait ceci :
Pour le moment, ça ne change rien. Mais je sens que vous avez raison, cela doit être dans la rédaction du YAML.
Attention : il y a un cache du descriptif des noisettes. Il faut mettre ce cache à jour après mise à jour du YAML d’une noisette. Trois possibilités :
&var_mode=recalcul
à l’URL ;Bien cordialement
Merci !
J’ai fait ces trois opérations, mais toujours pas de titre à mes noisettes....
Je précise que mes noisettes sont dans le dossier squelettes, dans un sous-dossier noisettes.
J’ai mis le fichier YAML ici : http://we.tl/paF8QeZL69, si vous voulez aller voir l’original...
J’ai quasiment réglé le problème : je créais mes fichiers de noisettes en encodage UTF-8 (croyant bien faire), et, en regardant les autres noisettes, j’ai constaté que les fichiers étaient encodés en ANSI. j’ai donc encodé en ANSI mes fichiers de noisettes, et, ô miracle, les titres apparaissent ! (les caractères accentués ne passent pas, c’est un détail)
Mais, par contre, les descriptifs n’apparaissent pas (c’est un peu embêtant), et je ne me l’explique pas non plus. Voici le code :
Avez-vous essayé l’encodage « UTF-8 sans BOM » ? De mémoire, je crois que ça doit passer (à vérifier).
Vous avez toujours la solution de passer par des chaînes de langue personnalisées. (ce qui est utiliser pour Aveline même si c’est un peut lourd pour des noisettes perso).
Concernant le descriptif, il n’est visible que dans la colonne de gauche (en haut) des pages de configuration d’une noisette (exec=noisette_edit). Sur exec=page qui liste les noisettes installées sur une page donnée, les descriptions des noisettes ne sont pas affichées. Par contre, si la noisette dispose d’un aperçu (voir ci-dessus) alors l’aperçu sera affiché.
Je vais essayer UTF8 sans bom. L’aperçu, qu’est-ce ?
En fait, quand je parlais de descriptif, je voulais évoquer ce texte là (image jointe). Mais, en fait, ça doit venir de la configuration. Mais comment fait-on pour faire apparaître un petit texte à cet endroit là ?
Ce texte correspond à l’aperçu de la noisette. Voir la fin de l’article ci-dessus. Il est généré à partir d’un petit squelette qui reçoit en variables d’environnement les paramètres de la noisette, ce qui lui permet d’afficher un texte différent selon la configuration de la noisette.
On peut aussi faire un petit squelette simple avec un texte fixe. Il doit être nommé
noisettes/nom_noisette-preview.html
.Cordialement
Bonjour,
C’est parfait !
Ca marche !
Merci beaucoup.
Benoît
Répondre à ce message
Bonjour,
J’ai besoin d’aide SVP. J’utilise :
Toutes les fonctionnalités sont utilisables sans problème. Cela se complique lorsque je souhaite ajouter des noisettes. J’utilise en effet un fichier planchecontact.html chargé de récupérer une image au hasard pour les 5 derniers articles modifiés et les afficher en très petites vignettes. Ce code fonctionne très bien dans un squelette complet. Je souhaite ici l’utiliser comme une noisette.
Ensuite je définie le fichier planchecontact.yaml de la manière suivante :
Dans ce cas, j’obtiens bien la noisette dans le noizetier.
Mais :
1) si le fichier contient le caractère ’_’ comme par exemple planche_contact, impossible de récupérer le fichier dans le noizetier. D’ailleurs la mise à jour des noizettes (qu’on ajoute ou qu’on modifie) n’est pas faite par l’interface même avec le &var=recalcul ou le cache désactivé. Il est nécessaire de vider le cache complètement par ftp pour l’obtenir.
2) lorsque je souhaite paramétrer le code html pour choisir le nombre de vignettes à afficher en modifiant :
<BOUCLE_art (ARTICLES){0,5}{par date_modif}{inverse}{doublons art}>
par
<BOUCLE_art (ARTICLES){0,#ENV{param}}{par date_modif}{inverse}{doublons art}>
Avec le fichier yaml suivant, rien ne va plus.
Dès lors que j’ajoute les parametres dans le fichier yaml, la noisette disparaît du noizetier.
J’avoue qu’un peu d’aide à ce niveau me rendrait des couleurs. Ou peut on trouver des informations sur la syntaxe des paramètres des fichiers yaml ?
Merci d’avance
Information syntaxe YAML : http://yaml.org/refcard.html
Je me réponds à la question 2)
Yaml étant sensible aux tabulations, il est important d’utiliser un éditeur de texte qui permette de les visualiser (notepad++ par exemple). C’était la cause de mes ennuis.
Attention aussi à utiliser le nom du parametre dans
#ENV{param}
, dans l’exemple ce sera donc#ENV{nb_vignettes}
pour la question 1) , la mise à jour des noisettes reste toujours subordonnée à la suppression totale du cache par ftp.
Bonjour,
YAML est effectivement très sensible à l’indentation (utiliser des espaces et non des tabulations).
Le nom du paramètre doit bien sur correspondre entre le YAML et le squelette.
Le caractère _ (underscore) est bien autorisé dans les noms de noisette. Attention néanmoins à ce que les noms des fichiers .html et .yaml soient bien identiques. Surtout, il ne faut pas confondre avec - (tiret) qui lui sert à indiquer qu’une noisette ne peut être utilisée que sur certaines pages.
Pour recalculer le descriptif des noisettes, il faut ajouter
&var_mode=recalcul
et non&var=recalcul
à l’URL.Sachez également que le cache des noisettes est également vidé à chaque passage sur la page de gestion des plugins.
Bien cordialement
Pour information, la désactivation du cache des squelettes ne désactive pas le cache du descriptif des noisettes. Il faut donc bien passer par var_mode=recalcul ou par la page ?exec=admin_plugin ou par vidage du cache.
Répondre à ce message
Bonjour,
A partir du moment où les noisettes sont présentes sur le site public, ne peut-on pas imaginer (quand un admin est connecté sur le site public) des petites icônes en haut de chaque bloc pour simplement déplacer la noisette dans un autre bloc, de Navigation à Extra par exemple ? Comme avec Moodle...
Si vous savez le programmer en javascript, c’est tout à fait envisageable. Pour ma part, c’est en dehors de mon domaine de compétence. Mais je suis persuadé qu’il y a aurait beaucoup à faire pour améliorer l’interface tant privée que publique du noizetier.
Bien cordialement
Répondre à ce message
Bonjour,
Comment passe-t-on les apostrophes dans les nom et description de noisettes ?
Merci
Simplement on met des guillemets doubles autour de la chaine.
Salut,
Et avec de vrais apostrophes :
'
Cela ne serait pas mieux ?
;)
Répondre à ce message
Bonjour à toutes et tous,
Je viens de migrer de SPIP 1.9 avec Maguzine à Spip 2.1 et je découvre Aveline et le noiZetier.
Excellent travail. Le principe est un peu le même entre Maguzine et les noisettes du couple Aveline-noiZetier. Je m’étais frotté à la personnalisation de certains blocs à l’époque et je me dis que je ferais bien de même avec certaines noisettes. Et en particulier la création d’une qui pourrait s’installer n’importe où (mais surtout sur la page-sommaire, ...) et qui afficherait une image prise au hasard dans pièces joints des articles d’une rubrique bien précise.
Croyez-vous que le travail soit compliqué ? Pour ne pas ré-inventer la roue complètement il vaudrait mieux partir de quel base dans la collection de noisettes existantes ?
Bonne nuit ou bonne journée, je ne sais pas quand vous me lirez.
Nicolas
Bonjour,
il y a une certaine parentalité entre magusine et le noizteier, même si le squelette initial à la réflexion de ce long projet est en fait BliP.
La difficulté pour créer une noisette dépend du niveau de sophistication recherché. Celles d’Aveline comportent de nombreux paramètres et leurs propres surcouches de balises filtres et inclusions dédiées ce qui ne le rends pas facile à comprendre.
Concernant la noisette qui que vous souhaitez faire, il n’y a pas encore de noisette équivalente, mais elle peut être facilement réalisée si vous avez déjà une connaissance de la syntaxe des squelettes SPIP et que vous avez compris le format YAML et la description de saisies.
Grosso modo, votre noisette ne nécessite qu’un seul paramètre, la rubrique dans laquelle chercher l’image. Il faut ensuite construire la bonne boucle pour sélectionner l’image voulue.
Cordialement
Répondre à ce message
Bonjour,
je continue mon apprentissage de ce nouveau dispositif, et c est vraiment très chouette...
Je rencontre une petite difficulté, je n arrive pas a faire fonctionner un formulaire CVT à partir d une noisette...
dans mon dossier « noisettes » j ai :
monform.html
monform.yaml
qui me permet d afficher et d administrer le formulaire en tant que noisette
Par contre, je ne sais ou coller le fichier :
monform.php pour qu il effectue les traitements... En toute logique spip les fichiers monform.html et php devrait se situer dans un dossier « formulaires ».
L idée c est de pouvoir configurer les champs du formulaire CVT a partir du fichier yaml, je ne peux donc pas faire juste une noisette avec dedans un appel a #MONFORM (comme pour le form de rechercce aveline par ex)... bref, je ne sais pas trop comment organiser la structure des repertoires..
Merci bien
triton
On est dans un contexte particulier. Pour fonctionner correctement, il faut que ton formulaire soit déclaré comme un formulaire classique, donc dans le répertoire
formulaires
. Attention : un formulaire s’appelle avec la balise#FORMULAIRE_MONFORM
et non#MONFORM
.Par contre tu souhaites que ton formulaire soit paramétrable. Ce qui est possible (voir http://programmer.spip.org/Passage-...).
Tu auras donc un formulaire qui doit être appelé avec différents paramètres :
#FORMULAIRE_MONFORM{parma1, param21, param3}
.Dans un premier temps, créer ton formulaire de manière classique en le testant dans un squelette classique où tu lui passeras les paramètres en dur.
Ensuite, une fois ton formulaire finalisé, tu peux créer une noisette qui proposera les différents paramètres. Et le code html de la noisette contiendra :
#FORMULAIRE_MONFORM{#ENV{param1},#ENV{param2},#ENV{param3}}
.ok... j ai compris.... je vais tester....
Merci beaucoup
j ai testé... ca marche, mais alors c est un petit peu monstrueusement lourd a mettre en place... bon, faut dire que j ai une vingtaine de valeurs a faire transiter entre le .yaml le .html de la noisette, la fonction charger du .php jusqu au html du formulaire.... le tout dans le bon ordre et sans se rater sur un espace..
J ai vu qu il y avait une contrib sur les formulaires CVT en YAML :
http://www.spip-contrib.net/Un-formulaire-C-V-T-avec-Saisies-par-l-exemple
peut etre qu il y a quelque chose a faire avec ca....
triton
Il faut distinguer la description du formulaire (qui peut être fait en YAML avec Saisies) des paramètres de personnalisation du formulaire (ce qui est moins fréquent et forcément plus lourd à mettre en place). De toute façon, dès lors que l’on a de nombreuses personnalisations possibles, les choses sont plus lourdes à gérer.
Répondre à ce message
Bonjour,
J ai crée une nouvelle noisette assez simple, qui semble fonctionner sauf que...
si je mets plusieurs fois cette noisette sur une même page, lorsque j administre la configuration d’une noisette, cela modifie également la configuration des autres (en administration et en affichage site public)... Ce n’est pas systématique, c est assez difficile a reproduire, tous les champs de la noisette ne sont pas concernés, c est assez déroutant....
Noizetier Version : 0.10.1 [46170]
le contenu du yaml :
/////////////////////////
nom : ’encart cliquable’
description : ’un encart avec titre logo descriptif lien’
icon : ’img/ic_article.png’
contexte : ’aucun’
parametres :
-
saisie : ’selecteur_rubrique_article’
options :
nom : ’id_objet_01’
label : ’rubrique article’
obligatoire : ’oui’
-
saisie : ’input’
options :
nom : ’largeur_logo’
label : ’largeur_logo’
obligatoire : ’non’
-
saisie : ’input’
options :
nom : ’hauteur_logo’
label : ’hauteur_logo’
obligatoire : ’non’
-
saisie : ’input’
options :
nom : ’squelette_destination’
label : ’squelette_destination’
obligatoire : ’non’
-
saisie : ’selecteur_rubrique_article’
options :
nom : ’id_objet_destination’
label : ’Objet (article, rubrique...) affiché par defaut’
obligatoire : ’non’
///////
Ca fait pareil avec un input a la place du selecteur_rubrique_article (c est bien chouette ce truc)...
Merci beaucoup
triton
Est-ce possible d’avoir une URL des test (par mail) ?
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |