Version 4 (modified by jcdubacq, 14 years ago) (diff) |
---|
stacker
Remplacement dynamique (côté serveur) d'une partie du contenu d'un article par quelque chose d'autre.
Auteurs/Contributeurs?
- Auteurs: jcdubacq
- Contributeurs:
Développement
Bugs et demandes de fonctionnalités
Dépôt
Changements récents
[2701] by franck on 10/02/10 14:24:19
Remise en place de l'auteur originale dans les entêtes de licence
[2697] by franck on 10/02/10 06:18:16
dc 2.2 compliance
[1807] by kozlika on 10/29/09 15:05:20
stacker: typo, suppression ligne vide en fin de fichier PHP.
Documentation
Le plugin stacker est une extension destinée à pallier dans Dotclear 2 un manque très précis : lorsque l'on veut redéfinir l'affichage des articles à la volée (sinon, il suffit de modifier l'article au moment où il est rédigé, pas où il est affiché), on doit redéfinir deux fonctions internes. Si on a deux extensions qui veulent modifier l'affichage à la volée, eh bien... une seule fonctionne. Sauf si l'on sait très précisément quels sont les plugins qui le font, etc, enfin bon, c'est compliqué. Le plugin stacker permet à ces extensions de se déclarer, et d'être appelées les unes après les autres. Voici des choses auxquelles j'ai pensées en concevant cette extension :
- une liste de mots spécifique à lier à leur définition (la liste de mots pouvant être enrichie a posteriori)
- changer des morceaux de texte par des images équivalentes (smileys, par exemple ; déjà fait en standard par Dotclear; mais aussi interprétation de formules mathématiques) :-)
- transformer radicalement tout le texte d'un article (traduction)
- changer des morceaux de texte par d'autres (censure, abréviations)
La page de maintenance de cette extension est à cette adresse : http://jean-christophe.dubacq.fr/post/stacker.
Installation
Utilisez le fichier zippé fourni dans la page de maintenance. Cette extension rajoute un panneau de commande pour activer ou désactiver telle ou telle modification à la volée de l'affichage. La zone d'administration est dans son propre onglet de Système > Extensions. Il est possible de cocher un transformateur pour l'activer ou le désactiver (les transformateurs désactivés sont en grisé).
Je n'ai pas trouvé d'extension concurrente à celle-ci. Les extensions LaTeXrender et dctranslations (écrites par moi) l'utilisent.
La version courante de cette extension est 0.4 (local svn 317).
Cette extension est sous la licence CC-BY.
Utilisation
Simple utilisateur
Dans le menu Système > Extensions de la zone d'administration, vous accédez à la liste des transformateurs enregistrés, dans l'ordre de leur application, les transformateurs désactivés étant en gris. Il est possible de les activer ou désactiver en cochant la case en en cliquant « modifier ». Par défaut, vous ne devriez rien faire à part désactiver le transformateur de test (qui remplace toutes les occurences de Dotclear par Dotcleår).
Développeur
Si vous avez une extension qui utilise stacker, il faut enregistrer
votre transf ormateur. Pour cela, créez un
fichier _prepend.php
qui contient:
$core->addBehavior('initStacker',array('tplStacker','initStacker'));
class tplStacker {
public static function initStacker(&$core) {
$core->stacker->addFilter('TestStackerFilter',
'tplStacker', // Class
'SwedishA', // Function
'textonly', // Context
100, // Priority
'stacker', // Origin
__('Test replacing Dotclear with Dotcleår'),
'/Dotclear/' // Trigger
);
}
}
(si vous avez plusieurs transformateurs, répétez
le addFilter
).
Le premier argument est le nom du transformateur, le deuxième et le
troisième sont le nom de la classe et la fonction à appeler pour faire
la transformation (le callback). Le quatrième, le contexte,
doit prendre une des quatre
valeurs: any
, excerpt
, content
ou textonly
. Un contexte de excerpt
fait que
le callback est appelé si le contenu d'un extrait d'article est généré,
un contexte de content
fait que le callback est appelé si
le contenu principal d'un article est généré, un
contexte any
fait que le callback est appelé dans les deux
cas. Enfin, un contexte de textonly
sépare le contenu (d'un
extrait ou d'un contenu principal) d'un article en plusieurs petits
bouts (uniquement les nœuds texte de l'arbre XHTML de l'article, c'est à
dire qu'il coupe entre les balises, et appelle le callback pour chaque
petit morceau de texte.
La cinquième position doit contenir le nom de l'extension qui fait l'ajout, et la sixième un texte explicatif sur ce que fait le transformateur. Ne pas oublier de traduire cette chaîne dans votre extension si vous voulez qu'elle soit traduite convenablement dans l'interface d'administration.
Enfin, le dernier et septième argument, qui ne sert que si le
contexte est textonly, est une expression qui dit si oui ou non on
déclenche un transformateur sur un bout de texte. Elle devrait être très
simple (votre transformateur peut faire des tests plus compliqués et au
besoin renvoyer la même chose qu'à l'origine). L'argument peut être mis
à null
si le contexte est différent de textonly.
Les prototypes des callback pour les trois premiers cas doivent être :
public static function modifyContent(&$rs,$text,$absolute_urls=false)
et pour le quatrième cas :
public static function SwedishA(&$rs,$text,$stack,$elements)
Dans tous les cas, ces fonctions de callback doivent renvoyer le
contenu modifié. $rs
représente l'extraction de la base de
donnée qui contient les caractéristiques entières de l'article.
Dans le quatrième cas, $stack
est un tableau qui
contient la liste de toutes les imbrications de balise (div > ul >
li > a > span par exemple), et $elements
un tableau
qui compte le nombre d'éléments d'un type dans $stack
(par
exemple, $elements['span']=1
). C'est utile, par exemple
pour ne pas transformer les éléments à l'intérieur d'un hyperlien en un
hyperlien.
Pour signaler un bug ou aider cette extension
Le mieux est de me contacter par courrier (pour un bug) ou de laisser un commentaire (pour dire que vous avez testé cette extension). En cas de mise à jour, je modifierai ce billet.
Liste des changements
Note : ce journal est non-exhaustif, généré automatiquement, en anglais, et sans doute non-informatif avant 2009.
- Local SVN release 302 (jcdubacq,2009-01-27)
- Fix locales
- Local SVN release 295 (jcdubacq,2009-01-26)
- Add a behavior to init stacker
- Fix examples
- Release version 0.3
- Local SVN release 234 (jcdubacq,2008-11-05)
- Fix disabled/enabled bug for stacker
- Local SVN release 194 (jcdubacq,2008-07-16)
- Reindent, and add frenchtypography, markup parsing capabilities
- Local SVN release 176 (jcdubacq,2008-06-23)
- Big fixes
- Local SVN release 172 (jcdubacq,2008-05-07)
- New plugin: stacker
Travail restant à faire
- Beaucoup de choses, sans doute.