Plusieurs parametres de BALISE

Bonjour à tous :slight_smile:

Je m'arrache les cheveux depuis un moment déjà :frowning:

Je suis en train d'essayer de réaliser ma première balise pour Spip, et vu le manque de documentation complète et détaillé à ce sujet, je patôge grâve dans la semoule :-///

J'arrive donc à créer ma petite balise, mais je n'arrive pas à gérer plus d'un parametre, et encore moins quand un de ces parametres est une autre balise Spip... bref, je cale totalement là...

Donc, pour l'exemple, je voudrais utilser quelque chose comme ceci dans les pages du squelette :

#MA_BALISE{'parametre1', #BALISE_SPIP, 'parametre2', etc.}

Mais, comment faire, dans le code Php de déclaration de #MA_BALISE (qui se trouve dans le fichier "mes_fonctions.php"), pour récupérer les valeurs de ces différents parametres ???

Si quelqu'un avait une quelconque piste qui pourrait m'aider un peu, je serais vraiment heureux...

Enfin, à défaut, toute documentation un peu plus complète que celle qu'on trouve dans le carnet Spip (Créer sa balise : <http://www.spip-contrib.net/CreerSaBalise>)... serait la bienvenue !

Merci à tous de vos lumières... à+ :slight_smile:
--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

#MA_BALISE est une fonction qui renvoie soit une valeur soit un tableau de
valeur, c'est cette information renvoyée qui sera passée à ta seconde balise.

Xavier BUROT

Selon Fredo Mkb <fredomkb@free.fr>:

Bonjour à tous :slight_smile:

Je m'arrache les cheveux depuis un moment déjà :frowning:

Je suis en train d'essayer de réaliser ma première balise pour Spip, et
vu le manque de documentation complète et détaillé à ce sujet, je
patôge grâve dans la semoule :-///

J'arrive donc à créer ma petite balise, mais je n'arrive pas à gérer
plus d'un parametre, et encore moins quand un de ces parametres est une
autre balise Spip... bref, je cale totalement là...

Donc, pour l'exemple, je voudrais utilser quelque chose comme ceci dans
les pages du squelette :

#MA_BALISE{'parametre1', #BALISE_SPIP, 'parametre2', etc.}

Mais, comment faire, dans le code Php de déclaration de #MA_BALISE (qui
se trouve dans le fichier "mes_fonctions.php"), pour récupérer les
valeurs de ces différents parametres ???

Si quelqu'un avait une quelconque piste qui pourrait m'aider un peu, je
serais vraiment heureux...

Enfin, à défaut, toute documentation un peu plus complète que celle
qu'on trouve dans le carnet Spip (Créer sa balise :
<http://www.spip-contrib.net/CreerSaBalise&gt;\)... serait la bienvenue !

Merci à tous de vos lumières... à+ :slight_smile:
--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : http://www.spip-contrib.net/spikini/FaQ

Fredo Mkb a écrit :

Bonjour à tous :slight_smile:

Je m'arrache les cheveux depuis un moment déjà :frowning:

Je suis en train d'essayer de réaliser ma première balise pour Spip, et vu le manque de documentation complète et détaillé à ce sujet, je patôge grâve dans la semoule :-///

J'arrive donc à créer ma petite balise, mais je n'arrive pas à gérer plus d'un parametre, et encore moins quand un de ces parametres est une autre balise Spip... bref, je cale totalement là...

Donc, pour l'exemple, je voudrais utilser quelque chose comme ceci dans les pages du squelette :

#MA_BALISE{'parametre1', #BALISE_SPIP, 'parametre2', etc.}

Pourquoi faire une balise qui doit prendre une balise en parametre ?
Autant faire un filtre (sauf pour les balsies dynamiques bien sur) :
#BALISE_SPIP|mon_filtre{'parametre1', 'parametre2', etc.}

@++

Re...

Le 30 avr. 2007, à 08:42, Xavier BUROT a écrit :

#MA_BALISE est une fonction qui renvoie soit une valeur soit un tableau de
valeur, c'est cette information renvoyée qui sera passée à ta seconde balise.

Merci beaucoup Xavier pour ta réponse.

En effet, j'avais déjà remarqué des différences dans les valeurs retournées par certaines balises, mais ceci, bien qu'instructif, n'est pas, à mon humble avis, le coeur du problème dans mon développement... enfin, je pense.

En fait, je déclare une nouvelle balise, nommée par exempe "#MA_BALISE".

Cette balise doit effectuer un certain nombre de traitements, mais sur quelques données différentes qui doivent lu être fournies.

Or, tout le problème est là pour moi, je ne sais pas comment passer ces données et, pire encore, je ne trouve absolument aucune solution pour les récupérer ensuite dans le code même de la balise, hormis, pour l'instant, un seul paramètre de type texte.

Et ceci se corse singulièrement lorsque je tente d'utiliser une balise déjà existente propre à Spip.
Donc, si par exemple je souhaite passer un paramètre, j'inscrirais dans le squelette le code suivant :

#MA-BALISE{''parametre'}

Là ça fonctionne, j'arrive donc à passer le paramètre et à le récupérer dans le code de la balise.
Mais, si je souhaite passer plusieurs paramètres, j'inscrirais dans le squelette le code suivant :

#MA-BALISE{''parametre1', ''parametre2', ''parametre3'}

Et là, plus rien ne fonctionne, je n'arrive même pas à récupérer le premier paramètre, c'est dire...
Alors bon, comme j'arrive à récupérer un seul paramètre, j'ai essayé de passer une balise Spip :

#MA-BALISE{#BALISE_SPIP}

Et bien... nada, ça ne fonctionne pas :frowning:

Bref, je coince péniblement depuis plusieurs heures... là j'abandonne, au moins pour un moment, ça me dépasse cette histoire :frowning:

Merci en tout cas Xavier pour ta réponse... à+ :slight_smile:
--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Re...

Le 30 avr. 2007, à 10:27, spipcarto a écrit :

#MA_BALISE{'parametre1', #BALISE_SPIP, 'parametre2', etc.}

Pourquoi faire une balise qui doit prendre une balise en parametre ?
Autant faire un filtre (sauf pour les balsies dynamiques bien sur) :
#BALISE_SPIP|mon_filtre{'parametre1', 'parametre2', etc.}

Bonjour Spipcarto et merci pour ta réponse :slight_smile:

Et bien, disons que le filtre existe déjà, et je souhaite justement en faire une balise, mais dans le but, plus tard, de convertir tout ça en plugin (mais là ça dépasse largement mes compétences actuelles)...

En fait, tu soulèves une question intéressante, quelles sont les différences entre une balise et un filtre ?
Laquelle des deux solutions et la plus efficace, rapide, etc. ?

J'ai cru comprendre, au detour d'une lecture sur internet (je ne retrouve plus le lien, j'en ai tellement vu dans mes recherches, que c'est un peu mission impossible de le retrouver), que les balises avaient un petit avantage au niveau de la vitesse d'exécution, une histoire de cache si mes souvenirs sont bons, mais je ne suis pas sûr... quelqu'un peut affirmer ou infimer ?

Merci en tout cas... à+ :slight_smile:
--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Fredo Mkb a écrit :

Re...

Le 30 avr. 2007, à 10:27, spipcarto a écrit :

#MA_BALISE{'parametre1', #BALISE_SPIP, 'parametre2', etc.}

Pourquoi faire une balise qui doit prendre une balise en parametre ?
Autant faire un filtre (sauf pour les balsies dynamiques bien sur) :
#BALISE_SPIP|mon_filtre{'parametre1', 'parametre2', etc.}

Bonjour Spipcarto et merci pour ta réponse :slight_smile:

Et bien, disons que le filtre existe déjà, et je souhaite justement en faire une balise, mais dans le but, plus tard, de convertir tout ça en plugin (mais là ça dépasse largement mes compétences actuelles)...

Aucune difference pour transformer ca en plugin, que ca soit un filtre ou une balise, il suffit de mettre la fonction correspondante dans un fichier xxx_fonction.php et de declarer ce fichier dans plugin.xml (<fonctions>xxx_fonction.php</fonctions>)

En fait, tu soulèves une question intéressante, quelles sont les différences entre une balise et un filtre ?

La balise est initialement faite pour les champs de la base de données, mais on peut personnaliser comme on veut, donc avoir des balises sans accès en base.
La grosse difference en programmation, c'est que la balise a accès à la boucle alors que le filtre n'a accès qu'au resultat de la balise sur laquel il est appelé.

Laquelle des deux solutions et la plus efficace, rapide, etc. ?

Pour ce que tu veux faire, je dirais le filtre

J'ai cru comprendre, au detour d'une lecture sur internet (je ne retrouve plus le lien, j'en ai tellement vu dans mes recherches, que c'est un peu mission impossible de le retrouver), que les balises avaient un petit avantage au niveau de la vitesse d'exécution, une histoire de cache si mes souvenirs sont bons, mais je ne suis pas sûr... quelqu'un peut affirmer ou infimer ?

La balise est transformée en code PHP au moment de la compilation du squelette, alors que le fitre est executé au recalcul du cache.

Mais si tu passes des balises en parametres, c'est que la balise produit une fonction que sera executée à chaque recalcul du cache.
Bref, amha, autant fournir directement la fonction...

Pour le passage en plugin par contre, la question des perfs se posera.
Si chaque petite fonction est developpée sous forme de plugin, on se retrouve avec 25 repertoires dans le path, ce qui ralentira Spip dans son ensemble.
Ca va s'ameliorer dans la prochaine version, mais pour des petits ajouts dans le genre, il y a le plugin "couteau suisse" (ex Tweaks).

@++

J'avais pas bien compris la question, voila ce que j'utilise comme code pour
récupérer les paramètres d'une balise :

if ($p->param && !$p->param[0][0]) { // Verifie si il y a des parametres
  $p1->code = calculer_liste ($p->param[0][1], // recuperation du premier
parametre
                        $p->descr,
           $p->boucles,
           $p->id_boucle);
  $p2 = calculer_liste ($p->param[0][2], // recuperaction du second parametre
        $p->descr,
       $p->boucles,
       $p->id_boucle);
// autres filtres
  array_shift($p->param);
}

Voilà j'espère que cela t'aidera.

Xavier BUROT

Selon Fredo Mkb <fredomkb@free.fr>:

Re...

Le 30 avr. 2007, à 08:42, Xavier BUROT a écrit :

> #MA_BALISE est une fonction qui renvoie soit une valeur soit un
> tableau de
> valeur, c'est cette information renvoyée qui sera passée à ta seconde
> balise.

Merci beaucoup Xavier pour ta réponse.

En effet, j'avais déjà remarqué des différences dans les valeurs
retournées par certaines balises, mais ceci, bien qu'instructif, n'est
pas, à mon humble avis, le coeur du problème dans mon développement...
enfin, je pense.

En fait, je déclare une nouvelle balise, nommée par exempe "#MA_BALISE".

Cette balise doit effectuer un certain nombre de traitements, mais sur
quelques données différentes qui doivent lu être fournies.

Or, tout le problème est là pour moi, je ne sais pas comment passer ces
données et, pire encore, je ne trouve absolument aucune solution pour
les récupérer ensuite dans le code même de la balise, hormis, pour
l'instant, un seul paramètre de type texte.

Et ceci se corse singulièrement lorsque je tente d'utiliser une balise
déjà existente propre à Spip.
Donc, si par exemple je souhaite passer un paramètre, j'inscrirais dans
le squelette le code suivant :

#MA-BALISE{''parametre'}

Là ça fonctionne, j'arrive donc à passer le paramètre et à le récupérer
dans le code de la balise.
Mais, si je souhaite passer plusieurs paramètres, j'inscrirais dans le
squelette le code suivant :

#MA-BALISE{''parametre1', ''parametre2', ''parametre3'}

Et là, plus rien ne fonctionne, je n'arrive même pas à récupérer le
premier paramètre, c'est dire...
Alors bon, comme j'arrive à récupérer un seul paramètre, j'ai essayé de
passer une balise Spip :

#MA-BALISE{#BALISE_SPIP}

Et bien... nada, ça ne fonctionne pas :frowning:

Bref, je coince péniblement depuis plusieurs heures... là j'abandonne,
au moins pour un moment, ça me dépasse cette histoire :frowning:

Merci en tout cas Xavier pour ta réponse... à+ :slight_smile:
--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : http://www.spip-contrib.net/spikini/FaQ

Re...

Le 30 avr. 2007, à 11:10, spipcarto a écrit :

Fredo Mkb a écrit :

Re...

Le 30 avr. 2007, à 10:27, spipcarto a écrit :

#MA_BALISE{'parametre1', #BALISE_SPIP, 'parametre2', etc.}

Pourquoi faire une balise qui doit prendre une balise en parametre ?
Autant faire un filtre (sauf pour les balsies dynamiques bien sur) :
#BALISE_SPIP|mon_filtre{'parametre1', 'parametre2', etc.}

Bonjour Spipcarto et merci pour ta réponse :slight_smile:

Et bien, disons que le filtre existe déjà, et je souhaite justement en
faire une balise, mais dans le but, plus tard, de convertir tout ça en
plugin (mais là ça dépasse largement mes compétences actuelles)...

Aucune difference pour transformer ca en plugin, que ca soit un filtre
ou une balise, il suffit de mettre la fonction correspondante dans un
fichier xxx_fonction.php et de declarer ce fichier dans plugin.xml
(<fonctions>xxx_fonction.php</fonctions>)

Oui, à te lire ça semble enfantin, mais je n'ose pas encore franchir le pas, car j'ai beaucoup d'interrogations et lacunes quant à la manière de bien concevoir et réaliser un tel projet...

J'attends encore de trouver quelque part un vrai didacticiel, qui aborde la conception et la réalisation d'un plugin pas à pas, étape par étape, et qui propose des explications claires couplées à des exemples pratiques... bref, le Saint-Graal de la doc quoi :wink:

Bref, comme je ne suis pas un vrai développeur, mais plutôt un bidouilleur du dimanche, j'hésite à me lancer dans un truc que je n'arriverais pas à aboutir, rien qu'à voir comment je bataille avec cette foutue balise, ça me dissuade pas mal à m'attaquer aux plugiins...

En fait, tu soulèves une question intéressante, quelles sont les
différences entre une balise et un filtre ?

La balise est initialement faite pour les champs de la base de données,
mais on peut personnaliser comme on veut, donc avoir des balises sans
accès en base.
La grosse difference en programmation, c'est que la balise a accès à la
boucle alors que le filtre n'a accès qu'au resultat de la balise sur
laquel il est appelé.

Ha, c'est très intéressant ça, j'ignorais cette particularité des balises, qui ont accès aux boucles, mais en te lisant, je trouve ça assez logique en fait, à l'image du rôle et de l'utilisation de la plupart des balises Spip... c'est très clair maintenant, merci :slight_smile:

Laquelle des deux solutions et la plus efficace, rapide, etc. ?

Pour ce que tu veux faire, je dirais le filtre

C'est fort possible en effet, mais je suis incapable de trancher pour le moment... faut que tout ça mûrise un peu plus dans mon esprit encore...

J'ai cru comprendre, au detour d'une lecture sur internet (je ne
retrouve plus le lien, j'en ai tellement vu dans mes recherches, que
c'est un peu mission impossible de le retrouver), que les balises
avaient un petit avantage au niveau de la vitesse d'exécution, une
histoire de cache si mes souvenirs sont bons, mais je ne suis pas
sûr... quelqu'un peut affirmer ou infimer ?

La balise est transformée en code PHP au moment de la compilation du
squelette, alors que le fitre est executé au recalcul du cache.

Ha d'accord, c'est intéressant, du coup, on peut dire que la balise est déjà connue de Spip, puisque chargée à la compilation, avant qu'elle ne soit utilisée dans le squelette, tandis que le filtre reste inconnu de Spip tant qu'il n'est pas trouvé dans le squelette... c'est bien ça ?

Désolé de reformuler ton explication avec mes mots, ça m'aide à essayer d'y voir plus clair... n'hésites pas à me corriger si je me trompe.

Mais si tu passes des balises en parametres, c'est que la balise produit
une fonction que sera executée à chaque recalcul du cache.
Bref, amha, autant fournir directement la fonction...

Fournir directement la fonction ?
Sous forme de filtre tu veux dire ?

Pour le passage en plugin par contre, la question des perfs se posera.
Si chaque petite fonction est developpée sous forme de plugin, on se
retrouve avec 25 repertoires dans le path, ce qui ralentira Spip dans
son ensemble.
Ca va s'ameliorer dans la prochaine version, mais pour des petits ajouts
dans le genre, il y a le plugin "couteau suisse" (ex Tweaks).

Oui, je connais un peu Tweaks, pas en tant qu'utilisateur (pour l'instant du moins), mais l'auteur de ce plugin a eu la bonne idée d'adapter un de mes filtres pour son projet.

Disons que mon développement actuel n'est pas, pour ainsi dire, un petit filtre qui pourrait facilement s'intégrer dans un plugin multifonctions, mais il mériterait, àmha, d'exister comme une contribution autonome...

Enfin, vu que je rame comme un vrai galérien pour l'instant avec cette "simple" balise, je crois que je vais laisser mon projet en état de filtre...

De toutes façons, il fonctionne plutôt bien en l'état, même si j'aurais souhaité qu'il soit un peu plus réactif... c'était un peu l'idée de départ de vouloir le transformer en balise, mais si tu dis que dans mon cas ce n'est pas garantie que ça devienne plus rapide, je préfère arrêter les frais, et passer à autre chose...

On verra un peu plus tard si j'arrive à en faire un plugin...

En tout cas, merci beaucoup Spipcarto pour toutes tes explications et précisions, ça m'aide bien à y voir plus clair...

Merci encore... à+ :slight_smile:
--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Re...

Le 30 avr. 2007, à 11:23, Xavier BUROT a écrit :

J'avais pas bien compris la question,

Y'a pas de mal, c'est vrai aussi que ma demandé n'était pas un modèle de clareté non plus...

voila ce que j'utilise comme code pour
récupérer les paramètres d'une balise :

if ($p->param && !$p->param[0][0]) { // Verifie si il y a des parametres
  $p1->code = calculer_liste ($p->param[0][1], // recuperation du premier
parametre
                        $p->descr,
           $p->boucles,
           $p->id_boucle);
  $p2 = calculer_liste ($p->param[0][2], // recuperaction du second parametre
        $p->descr,
       $p->boucles,
       $p->id_boucle);
// autres filtres
  array_shift($p->param);
}

Voilà j'espère que cela t'aidera.

Merci beaucoup Xavier :slight_smile:

J'ai déjà testé un peu cette syntaxe, récupérée d'autres filtres Spip, mais malheuresement, ce qui en dit long sur mon incompétence, je n'ai pas su m'en servir pour mon projet...

Dans quelle variable se trouvent les paramètres ainsi récupérés ?
Comment faire pour les afficher, histoire de visualiser les résultats ?
Comment faire pour récupérer d'autres paramètres supplémentaires ?
Comment faire pour récupérer la valeur d'une autre balise ?

Bref, c'est bien trop complèxe tout ça pour moi... je reste avec mon filtre pour l'instant, j'aboderais sérieusement le développement d'un plugin un peu plus tard... lorsque je serais un peu plus à l'aise avec les particularités du développemnt pour Spip.

Un Grand Merci en tout cas Xavier pour tes réponses éclairées...

à+ :slight_smile:
--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Fredo Mkb a écrit :

Oui, à te lire ça semble enfantin, mais je n'ose pas encore franchir le pas, car j'ai beaucoup d'interrogations et lacunes quant à la manière de bien concevoir et réaliser un tel projet...

J'attends encore de trouver quelque part un vrai didacticiel, qui aborde la conception et la réalisation d'un plugin pas à pas, étape par étape, et qui propose des explications claires couplées à des exemples pratiques... bref, le Saint-Graal de la doc quoi :wink:

Si il n'y a pas un bouqin ecrit la dessus, c'est peut etre parce que ca n'en merite pas un...

1)créer un fichier plugin.xml :

<plugin>
  <nom><multi>Nom du plugin</nom>
  <auteur>toi et la licence / le copyright(peut etre multi)</auteur>
  <version>0.1</version>
  <etat>test</etat>
  <description>
   <multi>[fr]blablabla [en]blebleble</multi>
  </description>
  <prefix>nomduplugin</prefix>
  <fonctions>nomduplugin_fonction.php</fonctions>
  <chemin dir='' />
</plugin>

2) mettre ton filtre ou ta balise dans un fichier nomduplugin_fonction.php (ici à la racine de ton plugin, à coté du plugin.xml)

3)mettre ca dans /plugins/nomduplugin/

4) activer le plugin

Le mieux, c'est de prendre l'habitude de prefixer les noms des fichiers et des fonctions pour eviter les collisions entre plugins

Bref, comme je ne suis pas un vrai développeur, mais plutôt un bidouilleur du dimanche, j'hésite à me lancer dans un truc que je n'arriverais pas à aboutir, rien qu'à voir comment je bataille avec cette foutue balise, ça me dissuade pas mal à m'attaquer aux plugiins...

une balise c'est plus compliqué car il faut faire du code qui produit du code, et on se fait vite piégé sur les quotes.
Pour comprendre comment ca marche, la balise #EDIT du plugin crayons est un bon exemple

(...)

Ha d'accord, c'est intéressant, du coup, on peut dire que la balise est déjà connue de Spip, puisque chargée à la compilation, avant qu'elle ne soit utilisée dans le squelette, tandis que le filtre reste inconnu de Spip tant qu'il n'est pas trouvé dans le squelette... c'est bien ça ?

non, le filtre et la balises sont de toutes facons chargés à la compilation du squelette et à son execution (au rechargement du cache).
Par contre, ils n'ont pas à etre chargés quand la page vient du cache.

Désolé de reformuler ton explication avec mes mots, ça m'aide à essayer d'y voir plus clair... n'hésites pas à me corriger si je me trompe.

Mais si tu passes des balises en parametres, c'est que la balise produit
une fonction que sera executée à chaque recalcul du cache.
Bref, amha, autant fournir directement la fonction...

Fournir directement la fonction ?
Sous forme de filtre tu veux dire ?

oui, en gros, la balise va générer du code qui sera dans le squelette compilé (pour les champs, c'est un simple appel à la variable dans la pile) alors qu'avec un filtre, l'appel de la fonction sera dans le squelette compilé (avec comme premier parametre la balise, cad la variable dans la pile) et la fonction dans un xxx_fonctions.php qui sera chargé.
Au niveau perf, c'est quasi pareil (sauf à multiplier les fichiers et le path, ce qui in fine ralentira tout le Spip), alors pourquoi se prendre la tete à generer ce code, autant charger la fonction et l'appeler comme filtre.

Pour le passage en plugin par contre, la question des perfs se posera.
Si chaque petite fonction est developpée sous forme de plugin, on se
retrouve avec 25 repertoires dans le path, ce qui ralentira Spip dans
son ensemble.
Ca va s'ameliorer dans la prochaine version, mais pour des petits ajouts
dans le genre, il y a le plugin "couteau suisse" (ex Tweaks).

Oui, je connais un peu Tweaks, pas en tant qu'utilisateur (pour l'instant du moins), mais l'auteur de ce plugin a eu la bonne idée d'adapter un de mes filtres pour son projet.

Disons que mon développement actuel n'est pas, pour ainsi dire, un petit filtre qui pourrait facilement s'intégrer dans un plugin multifonctions, mais il mériterait, àmha, d'exister comme une contribution autonome...

A discuter sur spip-zone ca ...
elle fait quoi cette fonction ?

@++

  De: fredomkb@free.fr
  Objet: Rép : [Spip] Plusieurs parametres de BALISE
  Date: 7 mai 2007 04:43:45 GMT+02:00
  À: spipcarto@gmail.com

Bonjour Spipcarto, et pardon pour cette réponse aussi tardive, je n'avais pas vu ton dernier message...

Le 30 avr. 2007, à 13:41, spipcarto a écrit :

Fredo Mkb a écrit :

Oui, à te lire ça semble enfantin, mais je n'ose pas encore franchir le
pas, car j'ai beaucoup d'interrogations et lacunes quant à la manière
de bien concevoir et réaliser un tel projet...

J'attends encore de trouver quelque part un vrai didacticiel, qui
aborde la conception et la réalisation d'un plugin pas à pas, étape par
étape, et qui propose des explications claires couplées à des exemples
pratiques... bref, le Saint-Graal de la doc quoi :wink:

Si il n'y a pas un bouqin ecrit la dessus, c'est peut etre parce que ca
n'en merite pas un...

Oui, peut-être pas un bouquin, mais un tuto ou didacticiel qui aborderait cette question de manière évolutive, jusqu'à un niveau plutôt avancé, ce ne serait pas du luxe à mon avis, au vu des avantages et personnalisations diverses que les plugins peuvent apporter aux sites sous Spip.

1)créer un fichier plugin.xml :

<plugin>
  <nom><multi>Nom du plugin</nom>
  <auteur>toi et la licence / le copyright(peut etre multi)</auteur>
  <version>0.1</version>
  <etat>test</etat>
  <description>
   <multi>[fr]blablabla [en]blebleble</multi>
  </description>
  <prefix>nomduplugin</prefix>
  <fonctions>nomduplugin_fonction.php</fonctions>
  <chemin dir='' />
</plugin>

2) mettre ton filtre ou ta balise dans un fichier
nomduplugin_fonction.php (ici à la racine de ton plugin, à coté du
plugin.xml)

3)mettre ca dans /plugins/nomduplugin/

4) activer le plugin

Le mieux, c'est de prendre l'habitude de prefixer les noms des fichiers
et des fonctions pour eviter les collisions entre plugins

Ok ok... encore une fois, en te lisant ça paraît enfantin à faire, et à ce niveau, il est vrai que c'est à la porté de presque tout le monde, mais...

Et oui, il y a un "mais", ou plusieurs devrais-je dire, car, ce que tu présentes là est pratiquement ce qu'on trouve dans les quelques docs en ligne qu'on arrive à dénicher (trop peu à mon goût)...

Mais, si on a quelques questions, ou si on désire aller plus loin que ton exemple, on est coincé, en tout cas les petits bidouilleurs du dimanche comme moi, qui ne sont pas des vrais développeurs, et qui, tant bien que mal, tentent de faire de petites choses, sont rapidement bloqués en absence de toute documentation digne de ce nom...

Par exemple, on ne trouve nulle part des explications sur les quelques points suivants (en vrac et non exhaustif) :

- Comment organiser le répertoire du plugin et quelles sont les contraintes à respecter ?

- Quelles sont les conventions d'écriture, de nommage et de développement à respecter ?

- Comment localiser un plugin, ou comment produire un code capable de supporter les sites multilingues ?

- Comment interroger la base de données et utiliser ces données dans le plugin ?

- Comment associer une ou plusieurs balises personnalisées au plugin ?

- Comment, et sous quelles conditions, utiliser les variables globales de Spip ?

- Comment utiliser les modèles dans un plugin ?

- Comment appliquer le plugin sur un objet ou sur des données non prévues par les pipelines ?

- Comment faire pour afficher une page de configuration sur la partie privée ?

- Comment faire pour mémoriser des options de configuration choisies par l'utilisateur ?

- Comment intégrer et utiliser des codes JavaScrip, Ajax et/ou Css avec les plugins ?

- Comment profiter et utiliser les solutions techniques déjà intégrées à Spip ? (inutile de réinventer la roue)

- Quelles solutions adopter pour améliorer l'intégration et les performances du plugin ?

Evidemment, j'en ai d'autres, certaines peut-être un peu "bêtes" pour les spécialistes, et d'autres bien plus complexes, mais bon, avoue qu'il n'y a pas de doc sur ces sujets, pourtant, en clarifiant ces quelques questions, avec des explications et des exemples clairs, ça peu déjà pas mal aider les uns et les autres à évoluer...

Je ne sais pas combien de temps j'ai passé à regarder et étudier comment d'autres s'y sont pris, "il n'y a rien de mieux que voir comment les autres font pour apprendre" paraît-il, mais ce n'est pas évident, car on ne peut pas dire que tout le monde utilise les mêmes schémas, la même architecture, les mêmes techniques, etc...

Et puis, on trouve un peu de tout, du plugin super simple en quelques fichiers (ce qui n'enlève rien à son efficacité), et d'autres à ce point perfectionnés et complexes, qu'un oeil néophyte comme le mien s'y perd dès la première page de code affichée...

Enfin, ce qui manque, ou que je n'ai pas su trouver, c'est un petit "guidline", expliquant ce qu'on peut faire et ce qui est interdit, ce qu'on doit faire et ce qu'il n'est pas conseillé d'envisager... bref, un mini guide à l'attention des développeurs de plugins, balises, etc.

Pour conclure, je dirais que je me sens un peu frustré, car j'ai envie d'apprendre et évoluer et, pourquoi pas, arriver à réaliser et proposer à la communauté mes propres petits projets, mais là, ça devient pratiquement impossible lorsqu'on ne maîtrise pas les subtilités du développement sous Spip, on y perd beaucoup trop de temps à essayer de comprendre comment les autres ont fait, alors qu'un ou deux didacticiels bien sentis, avec des pas-à-pas clairs et des exemples pratiques, pourraient aider pas mal de personnes, qui seraient dans mon cas de figure, à concrétiser leurs idée et à enrichir les outils compatibles avec Spip, pour le plus grand bénéfice de l'ensemble de la communauté d'utilisateurs... non ?

une balise c'est plus compliqué car il faut faire du code qui produit du
code, et on se fait vite piégé sur les quotes.
Pour comprendre comment ca marche, la balise #EDIT du plugin crayons est
un bon exemple
(...)

Ha d'accord, c'est intéressant, du coup, on peut dire que la balise est
déjà connue de Spip, puisque chargée à la compilation, avant qu'elle ne
soit utilisée dans le squelette, tandis que le filtre reste inconnu de
Spip tant qu'il n'est pas trouvé dans le squelette... c'est bien ça ?

non, le filtre et la balises sont de toutes facons chargés à la
compilation du squelette et à son execution (au rechargement du cache).
Par contre, ils n'ont pas à etre chargés quand la page vient du cache.

Ok, merci beaucoup pour ces précisions, c'est un peu plus clair désormais...
Je vais regarder cette balise #EDIT, en espérant comprendre quelque chose... :slight_smile:

Fournir directement la fonction ?
Sous forme de filtre tu veux dire ?

oui, en gros, la balise va générer du code qui sera dans le squelette
compilé (pour les champs, c'est un simple appel à la variable dans la
pile) alors qu'avec un filtre, l'appel de la fonction sera dans le
squelette compilé (avec comme premier parametre la balise, cad la
variable dans la pile) et la fonction dans un xxx_fonctions.php qui sera
chargé.
Au niveau perf, c'est quasi pareil (sauf à multiplier les fichiers et le
path, ce qui in fine ralentira tout le Spip), alors pourquoi se prendre
la tete à generer ce code, autant charger la fonction et l'appeler comme
filtre.

Oui bon... là, tu vois, on arrive vite à la limite des choses que je peux comprendre, c'est dire si mon niveau est pour le moins modeste, pour ne pas dire carrément faible... j'espère pouvoir un jour relire cette phrase et la comprendre du premier coup... (y'a du boulot, je sais :wink:

Disons que mon développement actuel n'est pas, pour ainsi dire, un
petit filtre qui pourrait facilement s'intégrer dans un plugin
multifonctions, mais il mériterait, àmha, d'exister comme une
contribution autonome...

A discuter sur spip-zone ca ...
elle fait quoi cette fonction ?

Suivant le conseil amical et sous l'impulsiion de quelques personnes, dans les forums d'échange du squelette MiniGriSpip, il est fort probable que je propose mon projet sur la Spip-Zone dans les semaines qui viennent, car je tente de le faire évoluer en lui ajoutant quelques fonctionnalités et en améliorant quelques autres... mais n'ayant pas suffisamment de temps, et mes compétences étant bien trop limitées, il serait peut-être bon que ce projet puisse bénéficier du savoir-faire des spécialistes de la Spip-Zone...

Enfin, on verra dans les prochaines semaines...

En tout cas, merci beaucoup Spipcarto pour tes messages, les uns plus instructifs que les autres, et encore désolé pour cette réponse tardive...

À bientôt :slight_smile:

PS. Je viens de me rendre compte que j'ai fais une fausse manipe et que je t'ai envoyé ce message en privé... donc le voici sur la liste, pour ne pas priver d'autres colistiers de ma réponse sur cet échange instructif... à+ :slight_smile:

--
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)