Déclarer des noisettes au noiZetier

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},'&gt;'}})]
[(#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:>]

Notes

[1Avant la version 0.8, le noiZetier acceptait de décrire des noisettes au format XML. Pour faciliter la maintenance, seul le format YAML est maintenant accepté.

[2L’écriture

contexte:
  - 'une_variable'

est également valide.

Discussion

14 discussions

  • 3

    Bonjour, j’aimerai pouvoir créer une sorte de filtre de test dans une noizette pour modifier l’apparence de celle-ci en fonction du bloc dans laquelle elle se trouve (il s’agit de modifier le redimensionnement d’un logo d’article en fonction de la largeur du bloc.).

    Existe t’il une sorte de balise #ID_BLOC que l’on puisse insérer dans une noizette ?

    Cela m’embêterait de modifier le redimensionnement par CSS....

    • Normalement, vous devriez avoir accès au nom du bloc avec #ENV{bloc}.

      Cordialement

    • Merci pour la réponse.

      Malheureusement, cette variable n’est pas passée.

    • Normalement, la variable bloc est bien passée à l’environnement sauf si dans le YAML de la noisettes vous avez spécifié une liste restreinte de variables d’environnement et que bloc n’en fait pas partie.

    Répondre à ce message

  • 6

    Je continue mon exploration du noiZetier...

    N’ayant pas pu faire de manière satisfaisante l’appel des pages uniques (faut dire je suis pas doué en codage non plus...), j’ai contourné la difficulté en faisant des modèles et en les appelant via une noiZette « contenu textuel libre ». C’est pas la panacée, mais ça marche :D

    J’avais une question, car impossible de trouver la réponse : y a t il moyen de faire un gabarit spécifique à une série d’articles comme on pouvait avoir avant un squelette unique pour tous les articles de la rubrique X ? Car autant on peut faire un gabarit pour une rubrique, ou un article, autant je n’ai pas trouvé comment faire un gabarit pour les articles d’une rubrique. Je prend le cas d’une rubrique « News » (rubrique que j’ai déclinée depuis le gabarit rubrique du noiZetier) qui regroupe bien sûr toutes les « news ». Or les news ne sont pas des articles comme les autres et nécéssitent donc une présentation spéciale (notamment les zones navigation et exta). Or là je suis obligé de créer un contenu article-news que je dois appliqué à chaque news... ça risque d’être fastidieux...

    Enfin, j’ai remarqué un bug, je sais pas si je suis le seul :
    Quand j’appelle une page spécifique (comme login, contact, plan...), j’ai un redoublement des infos contenues dans la zone « extras » (il me double tout ce qui est dans Pre extras et Post extra)...

    • Concernant un gabarit différent pour certains objets, il s’agit des Compositions. Aucunement le rôle du noiZetier, même si le noiZetier peut être utilisé pour définir différentes compositions.

      La lecture de http://joseph.larmarange.net/A-prop... pourra vous être utile.

      A toute fin utile, je rappelle qu’une noisette n’est qu’un morceau de contenu s’insérant dans un bloc.

      Ensuite, le noiZetier ne fournit pas de noisettes. Voulez-vous dire l’utilisation du noiZetier avec le squelette Aveline ?

      Concernant le bug rencontré, je peux essayer de regarder ça demain. Question : utilisez-vous la toute dernière version du noiZetier ?

    • Je voulais parler du noizetier avec Aveline oui.

      Aveline version 0.6.1 [42303]
      NoiZetier version 0.8.1 [42302]

      Je vais jeter un oeil sur l’article en lien merci.

    • Je me permet de relancer car malgrè mes recherches je n’ai pas trouvé pourquoi j’avais un redoublement de « avant extra » et « après extra » quand j’appelle une page du tupe page=plan, page=contact, etc...

    • Up... toujours pas trouvé pourquoi j’avais un redoublement des infos avant-extra et apres-extra dans les pages du style « page-contact », « page-plan », etc...

    • Bonjour,

      cela se produit-il en utilisant en même temps le squelette Aveline ?

      Si oui, ce problème est normalement réglé dans la dernière version (0.6.5) d’Aveline.

      Voir http://zone.spip.org/trac/spip-zone....

      Cordialement

    • Yes !!! Merci.

    Répondre à ce message

  • 12

    Bonjour,

    Je souhaiterai ajouter au noizetier une noisette qui afficherait le contenu d’un article dont je pourrais définir l’id.

    J’ai créé un fichier article_specifique.html et un fichier article_specifique.yaml que j’ai placés dans /plugins/auto/noiZetier/noisettes, mais elle n’apparait pas dans la liste lorsque je veux l’ajouter au contenu de ma page d’accueil.

    Je patauge un peu. Est-ce qu’une bonne âme pourrait me guider dans la démarche ?

    • Bonjour,

      le noiZetier, pour des raisons de performance, utilise un cache de la description des noisettes (ficher tmp/cache/noisettes_descriptions.php. Dès lors, lorsque vous créez ou modifiez le fichier yaml d’une noisette, vous devez vider le cache de SPIP. Vous pouvez également ajouter &var_mode=recalcul à l’url de configuration du noiZetier pour reclaculer ce cache. Votre noisette devrait dès lors être disponible.

      Par ailleurs, si vous créez votre propre noisette, il est préférable que vous la placiez dans le répertoire squelettes/noisettes plutôt que dans le répertoire du plugin. En effet, les modifications effectuées dans le répertoire du plugin seront perdues en cas de mise à jour du plugin.

      Bien cordialement

    • Bonsoir et merci pour votre réactivité !
      Mais rien à faire, je dois mal faire quelque chose, ma noisette n’apparaît pas même avec un cache vide.
      D’autre part, je ne sais pas si c’est un comportement normal, mais la page de config du noizetier est pleine de triangles, ce qui rend difficile la lecture des textes... Je joins une copie d’écran.

    • Il ne devrait pas y avoir tous ces triangles. Il y a un souci CSS. Quel navigateur ? Quel version de SPIP et quels plugins installés ?

      Tout d’abord, utilisez-vous bien la dernière version du plugin ?

      Concernant votre fichier de description yaml, avez-vous vérifiez qu’il est correctement écrit ? qu’il n’y a pas d’erreurs d’indexation (espace en trop par exemple) ? Les deux fichiers (html et yaml) portent-ils bien le même nom ? (parfois on peut tourner en rond plusieurs heures pour une simple faute de frappe).

      Cordialement

    • Bon, tout est rentré dans l’ordre, après deux vidages de cache. Je suis très fier de voir ma noisette, et je n’ai plus les affreux triangles.
      Par contre, je ne vois pas bien quoi mettre dans mon fichier html pour afficher le texte de mon article dont je peux choisir l’id dans la page de config de ma noisette...
      Pour l’instant, j’ai ça, mais je ne suis carrément pas sur de moi (et ça marche pas, ça n’affiche rien ;-))

      article_specifique.html

      nom: 'Article spécifique'
      
      description: 'Affiche un article spécifique'
      
      icon: 'img/ic_bloctexte.png'
      
      parametres:
      
        -
      
          saisie: 'input'
      
          options:
      
            nom: 'id_article_specifique'
      
            label: 'ID de l''article'
      
      contexte: aucun

      article_specifique.html

      <div class="noisette_article_pecifique">
      <B_articles>
          <BOUCLE_articles(ARTICLES){id_article=[(#GET{id_article_specifique})]}>
                      <div class="texte">#TEXTE</div>
              </BOUCLE_articles>
      </B_articles>
      </div>
    • Bon, problème réglé : il manquait le contexte à la fin du yaml, et il fallait utiliser #ENV dans le html. Conclusion, c’est finalement plus simple que ce que je pensais, terriblement puissant et modulable cette petite chose :-) MERCI !

      article_specifique.yaml

      nom: 'Article spécifique'
      
      description: 'Affiche un article spécifique'
      
      icon: 'img/ic_bloctexte.png'
      
      parametres:
      
        -
      
          saisie: 'input'
      
          options:
      
            nom: 'id_article_specifique'
      
            label: 'ID de l''article'
      
      contexte: 'id_article_specifique'

      article_specifique.html

      <div class="noisette_article_pecifique">
      <BOUCLE_articles(ARTICLES){id_article=#ENV{id_article_specifique}}>
      	<h2 class="h2 #EDIT{titre}">#TITRE</h2>
      	<div class="#EDIT{texte} texte">#TEXTE</div>
      </BOUCLE_articles>
      </div>
    • Bonjour,
      effectivement il faut utiliser #ENV et non #GET. Par contre, il est inutile de spécifier contexte: id_article_specifique. En effet, id_article_specifique n’est pas une variable récupérée dans le contexte au-dessus de la noisette mais un paramètre transmis systématiquement à la noisette. Autrement dit, vous pouvez garder contexte: aucun.

      En fait, contexte sert à spécifier des variables de contexte (autres que les paramètres de la noisette toujours transmis) à transmettre à la noisette, par exemple un id_rubrique pour une noisette affichant les articles de la rubrique.

      Bien cordialement

    • Petite précision, normalement vous devez pouvoir utiliser la saisie selecteur_article à la place de la saisie input pour profiter du sélecteur d’article de Bonux.

      Attention, vous devez utiliser une des dernières versions de saisies pour que le javascript s’exécute correctement.

    • J’ai essayé d’utiliser le script « Article Spécifique », mais apparemment on ne peut l’utiliser qu’une seule fois dans le site, après il balance une erreur.

    • Re,

      en fait, une fois installé un « ArticleSpecifique », j’ai un plantage si j’essaye de mettre une autre noizette.

      Le message d’erreur est :

      Fatal error : Call to undefined function : array_intersect_key() in /homepages/38/d141572498/htdocs/newsite/plugins/noiZetier/inc/noizetier.php on line 532

      ce qui correspond dans le fichier à :

      if ($contexte_noisette) {
      		return array_intersect_key($contexte_entrant, $contexte_noisette);
      	}
    • Vous fonctionnez avec quelle version de PHP ?

      array_intersect_key n’est disponible qu’à partir de la version 5.1

    • Je suis chez 1and1.fr et apparemment les serveurs sont en mysql 5.0 :(

    • je parlais de la version de PHP et non de celle de MySQL.

      je vais essayer de faire une compatibilité en PHP 4 mais pas avant un mois (je pars en voyage demain)

    Répondre à ce message

  • 20

    Bonjour,

    ce noiZetier a l’air méchamment puissant ! Je l’ai installé et commence à m’enservir avec les nombreuses noisettes natives, mais j’aimerais bien en coder une ou deux spécifiques. Le soucis est que je ne sais pas trop par ou démarrer. par exempe, j’aimerais faire une noisette pour inclure un lecteur mp3 dans mes pages, que ce soit la page sommaire (en allant piocher dans tous les mp3 dispos sur le site, en faisant mon marché quoi) ou alors dans les pages rubriques ou articles en pouvant soit faire mon marché soit décider de mettre en liste tous les mp3 de la rubrique / article. De même je souhaite créer une noizette permettant de lancer un genre de ticker d’articles (un peu comme sur la page d’accueil de plugins.spip.net) pour mettre en avant certaines news ou n’importe quel article. Je me doute que celà est possible à réaliser, mais par ou commencer ??? Merci en tout cas pour ce plugin fabuleux.

    • Bonjour,
      les noisettes sont des morceaux de squelettes SPIP comme les autres.

      Questions préalables :

      • connaissez-vous le HTML ?
      • connaissez-vous les boucles et les balises de SPIP ?

      Bien cordialement

    • Oui, je connais ça, je fais des sites SPIP depuis un petit moment, mais là j’avoue que le noiZetier / ZSpip / Aveline, autant ça a l’air puissant, autant je patauge méchamment :D. J’ai quand même réussi à faire une déclinaison de squelette avec Compositions, mais c’est parce que je n’ai pas trouvé le moyen de faire via le noiZetier un affichage conditionnel « si un seul article dans la rubrique, afficher directement l’article »... à moins que celà soit configurable dans le menu, mais j’ai pas trouvé.

      Pour dire, je n’arrive pas à modifier l’affichage de certains élements de mon site (par exemple, faire apparaitre le logo du document devant les docs téléchargeables, ou mettre le forum de l’article dans un bloc depliable)... Alors pour faire des noiZettes, c’est carrément la folie :P

    • D’accord. C’était juste pour situer votre niveau.

      Dans le cadre d’Aveline, les noisettes fournies par défaut sont complexes car elles proposent une multitude de paramètres ce qui rend leur code difficile à saisir.

      Mais dans le cadre d’une personnalisation d’un site particulier, il est possible de faire des noisettes avec très peu de paramètres.

      Prenons l’exemple d’une noisette qui affiche directement le contenu d’un article dans une page rubrique si jamais il y a un seul article dans la rubrique.

      Nous allons donc créer un fichier rubrique-article_complet_si_seul.html dans le répertoire squelettes/noisettes/. Le début du nom de la noisette commence par rubrique- pour indiquer que cette noisette ne doit être proposée que sur les pages du type rubrique.

      On fera tout d’abord une noisette sans paramètres de personnalisation. C’est plus simple. On remarquera qu’on aura besoin de connaître la variable d’environnement id_rubrique pour savoir où on se trouve.

      Pour le code de la noisette, on va s’inspirer de http://www.guiderdoni.net/Afficher-....

      Voilà le code de la noisette :

      <BOUCLE_deux(ARTICLES){id_rubrique}{1,1}>
      <BOUCLE_sommaire(ARTICLES){id_rubrique}{par date}{inverse}{"<br />"}>
      <a href="#URL_ARTICLE">#TITRE</a>
      </BOUCLE_sommaire>
      </BOUCLE_deux>
      <BOUCLE_unseul(ARTICLES){id_rubrique}>
      <h1>#TITRE</h1>
      #TEXTE
      </BOUCLE_unseul>
      <//B_deux>

      Il faut ensuite faire le fichier de description de la noisette au format YAML. Il va être simple car on n’a pas de paramètres de personnalisation. Il va s’appeler rubrique-article_complet_si_seul.yaml et sera rangé dans le même répertoire que précédemment.

      nom: 'Articles de la rubrique (affichage personnalisé)'
      description: "S'il y a un seul article dans la rubrique, affiche le texte de l'article, sinon liste les articles de la rubrique."
      contexte:
        - 'id_rubrique'

      Il ne reste plus qu’à aller dans le noizetier ajouter notre noisette sur la page rubrique. Il faut penser au préalable à vider le cache puisque le noizetier utilise un cache poru la liste des noisettes.

      On vérifie que tout marche bien.

      Ensuite, on peut améliorer notre noisette pour reproduire la syntaxe HTML de notre site. Ajout de css, ajout du chapo, de sliens hyeprtextes, éventuellement des auteurs, etc... en fonction de ce que l’on veut faire.

      Si on souhaite pouvoir paramétrer plus finement la noisette, on viendra alors complexifier la noisette en déclarant les paramètres désirés dans le fichier YAML. Ces paramètres seront récupérables dans la noisette avec #ENV. Il faudra alors faire des tests sur la valeur des paramètres pour afficher non tel ou tel élément.

      Dans un premier temps, je vous déconseille vivement d’essayer de surcharger la noisette liste_article du squelette Aveline car elle est vraiment très complexe, son YAML de description faisant 606 lignes.

      J’ai bien en projet d’améliorer le code des noisettes d’Aveline en regroupant des ensembles de paramètres et en créant des critères et des balises dédiées, mais je n’ai pas encore eu le temps de me lancer dans ce chantier.

      Bien cordialement

    • Ok merci pour ces précisions.
      En fait ça ne fait qu’augmenter mes questions :D
      En effet, l’idéal serait que la rubrique embranche directement sur l’article s’il n’y en a qu’un, et donc qu’on se retrouve directement au niveau Article afin de beneficier du contexte de l’article et non de la rubrique (et du coup récupérer les réglages par défaut de l’article dans le noizetier...).

    • Cela se joue à un autre niveau.

      Dans ce cas là, s’il n’y a qu’un seul article dans une rubrique, il s’agirait de rediriger directement vers l’article.

      Ca ne se passe plus au niveau du noiZetier mais au niveau du squelette rubrique.html racine. On teste la présence d’un ou plusieurs articles dans la rubrique, et on redirige.

      A vue de nez, créez un fichier rubrique.html dans squelettes (je suppose que vous utilisez Zpip et/ou Aveline :

      <BOUCLE_principale_rubrique(RUBRIQUES){id_rubrique}>
      	<BOUCLE_deux(ARTICLES){id_rubrique}{1,1}>
      		<INCLURE{fond=structure}{env}{id_secteur=#ID_SECTEUR}{type=rubrique}{composition} />
      	</BOUCLE_deux>
      		<BOUCLE_article_unique(ARTICLES){id_rubrique}>
      			<?php header("Location: [(#URL_ARTICLE|url_absolue)]");
      			exit; ?>
      		</BOUCLE_article_unique>
      			[(#REM) cas où aucun article ]
      			<INCLURE{fond=structure}{env}{id_secteur=#ID_SECTEUR}{type=rubrique}{composition} />
      		<//B_article_unique>
      	<//B_deux>
      </BOUCLE_principale_rubrique>
    • Ok merci ça marche nickel :D

      A noter que j’ai remarqué un bug, mais je sais pas si ça vient du noiZetier, ou du squelette Aveline. Quand on fait la liste des rubriques et qu’on affiche « Lire la suite » via la noiZette dédiée, le lien généré est faux. On obtient un truc, toujours le même, qui est « spip.php ?rubriqure0 ». Cela ne se fait qu’avec le lien « lire la suite » des sous rubriques.

      Bon maintenant je vais essayer de faire une noiZette pour faire un lecteur multimedia en donnant l’ID d’un article (qui contniendra les mp3).

    • Une simple erreur de frappe dans Aveline. Merci pour le coup d’oeil.

      C’est corrigé en version 0.6.1 (Aveline). Le zip devrait être disponible d’ici moins d’une heure.

      Cordialement

    • De rien :D

      Question bête : comment appeler un article spécifique dans une page ?
      Je pose la quetion car j’ai commencé à réfléchir à mon envie d’appeler notamment dans la page sommaire des éléments « hors menu » avec des contenus spéciaux. Pour celà j’ai installé le pugin « pages uniques » qui permet de créer des articles situés hors de toute rubrique pour ne pas les avoir dans le menu, et aussi pour pouvoir faire des modèles de page (car lors de la création de ces articles hors menu, on remplit un champ « page ») comme autant d’objets spécifiques. L’idée etant d’appeler ces « pages » via une noiZette intégrable dans n’importe quel page du site.

      D’après l’exemple fourni plus haut, j’ai comme dans l’idée qu’il faut que je crée une noiZette du style slider.html dans laquelle je collerais un truc du genre

      <BOUCLE_slider(ARTICLES){page=slider}>
      #MON CODE D'AFFICHAGE
      </BOUCLE_legal>

      et son pendant slider.yaml

      nom: 'Slider'
      description: "Afficher un slider"
      contexte:
        - 'page'

      J’ai bon ou je me gourre total ?

      Ca c’est dans un premier temps car cette technique ne permet de faire qu’un seul slider et oblige à créer une noisette pour chaque nouveau slider. De plus on ne peut paramétrer les slides qu’une seule fois pour toute, vu que les parametres se trouvent dans le squelette du slide, en dur (parametres du plugin « imagerotator »), mais disons que ce serait un debut...

    • Tout d’abord, le contexte : ’page’ est inutile.

      Si on veut une noisette plus générique, on va ajouter un paramètre slider à la noisette. Dans le YAML :

      nom: 'Slider'
      description: "Afficher un slider"
      contexte: 'aucun'
      parametres:
        -
          saisie: 'input'
          options:
            nom: 'slider'
            label: 'Quel slider voulez-vous afficher ?'

      et dans le HTML :

      <BOUCLE_slider(ARTICLES){page=#ENV{slider}}>
      #MON CODE D'AFFICHAGE
      </BOUCLE_legal>

      Maintenant, si on veut améliorer le formulaire de saisies de la noisette, il faudrait une saisie qui propose la liste des pages uniques.

      On va donc créer un fichier squelettes/saisies/pages_uniques.html pour créer notre saisie et cette saisie va contenir :

      [(#REM) 
        Saisie permettant de sélectionner une page unique par son nom de page
        
        Parametres :
        - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
        - cacher_option_intro : pas de premier option vide  (defaut:"")
        - class : classe(s) css ajoutes au select
        
        Exemple d'appel :
      	[(#SAISIE{pages_uniques,nom,
      		label=<:plugin:label:>,
      	})] 
      ]
      
      <select name="#ENV{nom}" id="champ_#ENV{nom}"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"]>
      [(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
      <BOUCLE_selection(ARTICLES){par titre}{id_rubrique<0>
      	<option value="#PAGE" [(#PAGE|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>#TITRE (#PAGE)</option>
      </BOUCLE_selection>
      </select>

      Il faut aussi prévoir une vue pour cette saisie, soit un fichier squelettes/saisies-vues/pages_uniques.html contenant :

      <BOUCLE_article(ARTICLES){page=#ENV{valeur}}>
      <p>#TITRE (#PAGE)</p>
      </BOUCLE_article>
      <p><:saisies:vue_sans_reponse:></p>
      <//B_article>

      Deux petites remarques :

      • Il faut bien vérifier au préalable que les pages uniques ont un id_rubrique négatif (jsute faire un test)
      • Idéalement, la saisie pages_uniques pourrait directement intégrer le plugin pages.

      Il ne reste plus qu’à modifier notre fichier YAML :

      nom: 'Slider'
      description: "Afficher un slider"
      contexte: 'aucun'
      parametres:
        -
          saisie: 'pages_uniques'
          options:
            nom: 'slider'
            label: 'Quel slider voulez-vous afficher ?'
    • La saisie pages_uniques a été ajoutée au plugin pages.

      Cela sera disponible en Zip après le passage de 16h

    • Ok ok... bon là ça commence à etre rude pour moi qui suit quand meme que graphiste au départ :P Mais bon, si j’arrive bien à suivre ton exemple, je dirais que le fichier yaml final devrait plutot contenir :

      nom : « Page unique »
      description : « Afficher un contenu Page Unique »
      contexte : ’aucun’
      parametres :
      -
      saisie : ’pages_uniques’
      options :
      nom : ’page unique’
      label : ’Quelle type de page unique voulez-vous afficher ?’

      car du coup, d’après le code que tu as fourni, on peut choisir n’importe quelle page unique (que ce soit le slider, ou le jukebox) non ?

    • Ben c’est génial, je vais tester ça ce week end tranquille alors :P

    • Oui oui tout à fait

    • Bonjour,

      j’ai installé la nouvelle version de « Pages Uniques », mais il n’apparait toujours pas dans le noiZetier. J’ai vidé le cache plusieurs fois pourtant :(

    • re,

      bon en fait je dois manquer une étape car je ne comprend pas comment faire apparaitre « Pages Uniques » dans le noiZetier, et qu’il me propose la liste des pages uniques à ma disposition.

      -  J’ai installé le plugin mis à jour « Pages Uniques ».
      -  J’ai créé deux pages uniques dans mon site : slider et jukebox
      -  J’ai un squelette pour chacun d’eux : slider.html et jukebox.html (en fait des bouts de page puisqu’ils ne font qu’une fonction bien précise... des noisettes ?)

      Et voilà.. j’ai rien dans l’admin du noiZetier :D

      J’ai bien essayé de mettre slider.html et jukebox.html dans le sous dossier noisettes de mon dossier squelettes, en créant en même temps les fichiers yaml correspondants, mais même si j’arrive à faire apparaitre slider et jukebox dans le noiZetier, ils ne se retrouvent pas dans une noiZette « Page uniques », seulement en vrac, et surtout inutilisables...

      Je me dis qu’il faut en fait faire un noiZette pages_uniques.html / pages_uniques.yaml (et garder slider.html ainsi que jukebox.html au niveau des squelettes comme n’importe quelle page), mais autant je vois quoi mettre dans le fichier yaml (ce que j’ai écris plus haut), autant je ne vois pas ce que je peux mettre dans le fichier html...

      Bref je patauge grave :P

    • Bonjour,

      seule la saisie pages_uniques a été ajouté au plugin pages uniques.

      Il faut encore que vous fassiez votre noisette.

      Cordialement

    • Euh oui, d’accord :D
      Mais c’est une noisette pages_uniques ou slider que je dois faire au final ??? Je suis largué total :P
      Car l’idée c’est bien de lister dans une noiZette « pages_uniques » les différentes pages uniques du site et de choisir laquelle appeler non ?
      Donc au final, mon fichier pages_uniques.html devrait contenir qu’un appel du fond choisi ?
      Un truc du genre

      <INCLURE{fond=page{#ENV{nom}}}>

      Ou je me gourre ?

    • La réponse est plus haut dans la discussion :

      un YAML pour la noisette :

      nom: 'Page Unique'
      description: "Afficher une page unique"
      contexte: 'aucun'
      parametres:
        -
          saisie: 'pages_uniques'
          options:
            nom: 'page'
            label: 'Quel page voulez-vous afficher ?'

      et le HTML de la noisette

      <BOUCLE_page(ARTICLES){page=#ENV{page}>
      Le contenu de la page mis en forme
      </BOUCLE_page>

      Ensuite, a vous de voir ce que vous souhaitez afficher, juste le titre et l’introduction, l’article complet, etc.

    • Oui j’avais déjà essayé mais ça ne marche pas. J’ai bien Pages Uniques qui apparait dans le noiZetier, mais il ne se charge qu’une fois sur deux quand on le selectionne, et une fois chargé, je n’ai aucune valeur dans le menu déroulant pour choisir la page unique voulue :(

      De plus, avec la noisette « pages_uniques.html » créée renvoie forcément le contenu formaté de la meme façon quelle que soit la page unique appelée, alors que chaque page unique a son propre gabarit (l’un renvoie du texte, l’autre un player, ect...". D’ou mon idée evoquée plus haut de passer par un inclure...

    • Encore moi,

      ça viendrait pas d’un probleme dans saisies/pages_uniques.html ?

      En effet on peut y trouver ça :

      <cadre class='spip'>
      <BOUCLE_selection(ARTICLES){par titre}{id_rubrique<0>
      	<option value="#PAGE" [(#PAGE|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>#TITRE (#PAGE)</option>
      </BOUCLE_selection>
      </cadre>

      Or les articles de page unique n’ont pas un id_rubrique inférieur à 0, ils n’ont pas de rubrique attachée du tout ! Donc la aleur devrait etre null non ?

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom