filtre sur balise "image"

Bonjour,
je voudrais pouvoir ajouter, à partir de la rédaction d’un article, un filtre permettant de modifier le modèle d’une image, par exemple en injectant une classe CSS supplémentaire quelque part. Il y a des choses floues dans le fonctionnement de SPIP, je m’explique :

Lorsque je l’applique dans un squelette, par exemple sur le modèle « image » :
[(#MODELE{image}|hello_world{ajouter du texte})]
je vois bien le texte s’ajouter.

En revanche, dans le contexte d’un article :
<image12|hello_world=ajouter du texte>
ne fonctionne pas.

Donc je me demandais si on pouvait se permettre de surcharger les modèles SPIP de base pour leur ajouter des fonctionnalités, et comment cela se passe si plusieurs packages font ce genre de surcharge ? Mon objectif est d’ajouter simplement une classe CSS supplémentaire quelque part. J’ai vu qu’il y avait des choses comme « inserer_attribut » mais de ce que j’ai pu tester, inserer_attribut appliqué à une «entrée » class » remplace le contenu de « class » par ce que l’on y met, or je voudrais que les attributs déjà existants y perdurent. Faire cela au niveau de la rédaction d’un article est un peu lourd, j’aurais aimé pouvoir écrire un filtre « ajouter_style » par exemple qui ferait un appel bien senti genre extraire l’attribut et le concaténer avec ce qui est nouveau.

J’aimerais votre avis sur la solution la plus propre à ce problème. Je peux toujours créer un nouveau modèle avec un nouveau nom mais ca me semble dommage.

Merci,
Mikhaël

Le 12/11/2017 à 18:57, Mikhaël MYARA a écrit :

Bonjour,
je voudrais pouvoir ajouter, à partir de la rédaction d’un article, un filtre permettant de modifier le modèle d’une image, par exemple en injectant une classe CSS supplémentaire quelque part. Il y a des choses floues dans le fonctionnement de SPIP, je m’explique :

- j’ai vu qu’avec « mes_fonctions.php » on pouvait créer des filtres. J’ai repris l’exemple ici :
Déclarer des fonctions - Programmer avec SPIP 4

Lorsque je l’applique dans un squelette, par exemple sur le modèle « image » :
[(#MODELE{image}|hello_world{ajouter du texte})]
je vois bien le texte s’ajouter.

En revanche, dans le contexte d’un article :
<image12|hello_world=ajouter du texte>
ne fonctionne pas.

Donc je me demandais si on pouvait se permettre de surcharger les modèles SPIP de base pour leur ajouter des fonctionnalités, et comment cela se passe si plusieurs packages font ce genre de surcharge ? Mon objectif est d’ajouter simplement une classe CSS supplémentaire quelque part. J’ai vu qu’il y avait des choses comme « inserer_attribut » mais de ce que j’ai pu tester, inserer_attribut appliqué à une «entrée » class » remplace le contenu de « class » par ce que l’on y met, or je voudrais que les attributs déjà existants y perdurent. Faire cela au niveau de la rédaction d’un article est un peu lourd, j’aurais aimé pouvoir écrire un filtre « ajouter_style » par exemple qui ferait un appel bien senti genre extraire l’attribut et le concaténer avec ce qui est nouveau.

J’aimerais votre avis sur la solution la plus propre à ce problème. Je peux toujours créer un nouveau modèle avec un nouveau nom mais ca me semble dommage.

Dans le contexte du source d'un squelette le caractère | demande à un appel de filtre
(que la balise à laquelle il s'applique soit, ou non, un #MODELE)

mais dans le contexte du texte d'un article ou d'un objet SPIP,
et lorsqu'il s'insère dans une inclusion de modèle <image12|etc>
ce n'est pas du tout un appel de filtre.

STP regarde la doc des modèles sur spip.net,
ça doit pas être trop mal foutu et c'est la base pour poursuivre avec ta recherche.

Tu peux faire <image12|hello_world=ajouter du texte> mais pour que ça signifie qqchose
il faut surcharger la définition du modèle image dans ton squelette,
et interroger #ENV{hello_world} pour en faire ce que tu veux.

Sinon, il me semble que <image12|maclasse> fait justement par défaut un ajout de la classe maclasse
mais je ne sais pas comment ça se combine avec le reste.
As tu essayé ?

JL

Bonjour et merci à nouveau :wink:

merci pour la clarifiaction au sujet de l’utilisation de « l’opérateur » | dans SPIP.

Au sujet de la surcharge : oui j’avais bien compris cela. Mais sait-on comment les choses se passent si plusieurs plug-ins réalisent une telle surcharge ? Par exemple, le plug-in « medias responsive et modifiés » surcharge lui aussi le modèle image. Existe-t-il un moyen de faire appel, comme dans les langages objets, à la « super-classe » en quelque sorte ? Comme je n’ai pas trouvé de réponse à ce sujet, je me suis dit que la bonne façon serait de créer un nouveau nom de balise. Qu’en pensez-vous ?

J’avais vu passer aussi ces histoires de <image1|maclasse> (je ne sais plus où) et je viens de tester, ca ne fonctionne pas, le code généré ne contient nulle part de référence à « maclasse » à ce que j’ai pu voir. Pour être sûr j’ai essayé pas mal de choses (emb doc img) et rien n’a fonctionné. Avec doc par exemple, j’obtiens :

«

Merci,
Mikhaël

Le 13 nov. 2017 à 16:14, JLuc <jluc@no-log.org> a écrit :

Le 12/11/2017 à 18:57, Mikhaël MYARA a écrit :

Bonjour,
je voudrais pouvoir ajouter, à partir de la rédaction d’un article, un filtre permettant de modifier le modèle d’une image, par exemple en injectant une classe CSS supplémentaire quelque part. Il y a des choses floues dans le fonctionnement de SPIP, je m’explique :

  • j’ai vu qu’avec « mes_fonctions.php » on pouvait créer des filtres. J’ai repris l’exemple ici :
    https://programmer.spip.net/Declarer-des-fonctions
    Lorsque je l’applique dans un squelette, par exemple sur le modèle « image » :
    [(#MODELE{image}|hello_world{ajouter du texte})]
    je vois bien le texte s’ajouter.
    En revanche, dans le contexte d’un article :
    <image12|hello_world=ajouter du texte>
    ne fonctionne pas.
    Donc je me demandais si on pouvait se permettre de surcharger les modèles SPIP de base pour leur ajouter des fonctionnalités, et comment cela se passe si plusieurs packages font ce genre de surcharge ? Mon objectif est d’ajouter simplement une classe CSS supplémentaire quelque part. J’ai vu qu’il y avait des choses comme « inserer_attribut » mais de ce que j’ai pu tester, inserer_attribut appliqué à une «entrée » class » remplace le contenu de « class » par ce que l’on y met, or je voudrais que les attributs déjà existants y perdurent. Faire cela au niveau de la rédaction d’un article est un peu lourd, j’aurais aimé pouvoir écrire un filtre « ajouter_style » par exemple qui ferait un appel bien senti genre extraire l’attribut et le concaténer avec ce qui est nouveau.
    J’aimerais votre avis sur la solution la plus propre à ce problème. Je peux toujours créer un nouveau modèle avec un nouveau nom mais ca me semble dommage.

Dans le contexte du source d’un squelette le caractère | demande à un appel de filtre
(que la balise à laquelle il s’applique soit, ou non, un #MODELE)

mais dans le contexte du texte d’un article ou d’un objet SPIP,
et lorsqu’il s’insère dans une inclusion de modèle <image12|etc>
ce n’est pas du tout un appel de filtre.

STP regarde la doc des modèles sur spip.net,
ça doit pas être trop mal foutu et c’est la base pour poursuivre avec ta recherche.

Tu peux faire <image12|hello_world=ajouter du texte> mais pour que ça signifie qqchose
il faut surcharger la définition du modèle image dans ton squelette,
et interroger #ENV{hello_world} pour en faire ce que tu veux.

Sinon, il me semble que <image12|maclasse> fait justement par défaut un ajout de la classe maclasse
mais je ne sais pas comment ça se combine avec le reste.
As tu essayé ?

JL


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

Est-ce que tu peux pas «tout simplement» appeler le #MODELE{img} dans un modèle perso du genre :

<mon_img

class=maclasse

et ton modeles/mon_img.html contiendrait (par exemple) :

<div[ class=« (#ENV{class}) »]>
#MODELE{img,env}

(C’est une suggestion non testée)

Merci pour votre réponse. C’est ce que je m’appretais à faire. Je me pose surtout la question d’utiliser les mots-clé de SPIP (par exemple le img de base) et de surcharger les modèles existant en faisant appel aux modèles déjà en place (au lieu de recopier/recoller tout le code par exemple), comme on le fait communément en prog objet (appel à la « superclasse »).
J’ai l’impression que ce mécanisme n’existe pas dans SPIP, c’est un peu l’objet de ma question.

Le 14/11/2017 à 09:59, Mikhaël MYARA a écrit :

Au sujet de la surcharge : oui j’avais bien compris cela. Mais sait-on comment les choses se passent si plusieurs plug-ins réalisent une telle surcharge ?

C'est pareil que pour toutes les surcharges de squelettes :

les plugins ayant spécifié leurs dépendances ("nécessite" ou "utilise") dans paquet.xml
ces dépendances décident des priorités des surcharges.
C'est la version prioritaire qui est utilisée, et elle seule.

S'il y a besoin que plusieurs plugins interviennent et disent leur mot,
alors c'est des pipelines qu'on se sert.

JL

ok merci !

Le 14 nov. 2017 à 13:43, JLuc <jluc@no-log.org> a écrit :

Le 14/11/2017 à 09:59, Mikhaël MYARA a écrit :

Au sujet de la surcharge : oui j’avais bien compris cela. Mais sait-on comment les choses se passent si plusieurs plug-ins réalisent une telle surcharge ?

C'est pareil que pour toutes les surcharges de squelettes :

les plugins ayant spécifié leurs dépendances ("nécessite" ou "utilise") dans paquet.xml
ces dépendances décident des priorités des surcharges.
C'est la version prioritaire qui est utilisée, et elle seule.

S'il y a besoin que plusieurs plugins interviennent et disent leur mot,
alors c'est des pipelines qu'on se sert.

JL

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Bonjour,
juste pour info : en fait « class=xxx » est une fonctionnalité (qui ne semble pas documentée, je m’en suis aperçu en regardant le code) des modèles de la classe img du plug-in media responsive.
Voilou !
Mikhaël