Version 9 — 3 weeks ago — jeanmarie
Ce tutoriel nécessite de passer par un plugin, il faut donc remplacer prefixe
dans les exemples suivants par le préfixe de votre plugin.
Comme le précise la documentation, il existe 2 pipelines qui permettent de manipuler les boutons d’une barre d’outil existante :
porte_plume_barre_charger
sert à afficher ou masquer certains boutonsporte_plume_barre_pre_charger
sert à ajouter des boutons à une barreIl faudra donc déclarer ces pipelines dans paquet.xml
en ajoutant :
<pipeline nom="porte_plume_barre_charger" inclure="prefixe_pipelines.php" />
<pipeline nom="porte_plume_barre_pre_charger" inclure="prefixe_pipelines.php" />
Il faudra également créer un fichier prefixe_pipelines.php
à la racine de votre plugin pour y ajouter les codes suivants.
Pour simplifier le barre d’édition du porte-plume de SPIP, il est possible de cacher certains raccourcis à partir de leurs classes.
Exemple : le bouton permettant d’ajouter des notes a la classe outil_notes
, il faut donc utiliser notes
.
Ajouter dans le fichier prefixe_pipelines.php
function prefixe_porte_plume_barre_charger($barres) {
$barre = &$barres['edition'];
// Masquer des boutons
$barre->cacher('notes');
$barre->cacher('indenter');
$barre->cacher('desindenter');
$barre->cacher('barre_poesie');
$barre->cacher('guillemets');
$barre->cacher('sepCode');
$barre->cacher('grpCode');
return $barres;
}
Note : Les styles CSS ne sont pas traités dans ce tutoriel, à vous de les gérer dans votre feuille de styles via les classes correspondantes. Idem pour les chaines de langues à déclarer dans votre fichier de langue.
Dans cet exemple, nous allons ajouter un raccourci <encadre>
permettant d’avoir un encadré (un élément div
avec une classe encadre
) dans le contenu d’un article et nous allons placer le bouton après le celui du lien dont la classe est outil_link
.
// Ajouter un bouton
function prefixe_porte_plume_barre_pre_charger($barres) {
$barre = &$barres['edition'];
$barre->ajouterApres('link', array(
'id' => 'encadre',
'name' => @@@SPIP_DIFF0@@@_T('prefixe:outil_encadre _T('prefixe:barretypo_encadre@@@SPIP_DIFF1@@@ '),
'className' => 'outil_encadre@@@SPIP_DIFF1@@@ @@@SPIP_DIFF4@@@'barretypo_encadre ',
'openWith' => '<encadre>',
'closeWith' => '</encadre>',
'display' => true,
'selectionType' => 'line',
));
return $barres;
}
Pour que notre nouveau raccourci soit utilisable, il doit être traité par SPIP via une wheel : créer un fichier /wheels/prefixe.json
(depuis SPIP 4) contenant :
{
"encadre":{
"_comment":"Traitement du raccourci <encadre>",
"match":[
"<encadre>",
"</encadre>"
],
"replace":[
"div class=\"encadre\"><p",
"div"
],
"priority":-50
}
}
Note : le <p>
en ouverture d’encadré est nécessaire.
Dans cet exemple, nous allons ajouter un raccourci {{** ... **}}
permettant d’avoir du gras de couleur (un élément strong
avec une classe emphase
) et nous allons placer le bouton sous celui du gras normal dont la classe est outil_bold
.
function prefixe_porte_plume_barre_pre_charger($barres) {
$barre = &$barres['edition'];
$barre->set('bold', array(
'dropMenu' => array(
array(
'id' => 'gras_emphase',
'name' => @@@SPIP_DIFF0@@@_T('prefixe:outil_gras_emphase _T('prefixe:barretypo_gras_emphase@@@SPIP_DIFF1@@@ '),
'className' => 'outil_gras_emphase@@@SPIP_DIFF1@@@ @@@SPIP_DIFF4@@@'barretypo_gras_emphase ',
'openWith' => '{{*',
'closeWith' => '*}}',
'display' => true,
'selectionType' => 'word',
),
),
));
return $barres;
}
{
"emphase":{
"_comment":"Traitement du raccourci {{* ... *}}",
"match":[
"/\\{\\{\\*/S",
"/\\*\\}\\}/S"
],
"replace":[
"<strong class=\"emphase\">",
"</strong>"
],
"priority":-50
}
}
Pour déclarer les wheels à SPIP, ajouter ce code à votre fichier fonctions prefixe_fonctions.php
:
$GLOBALS['spip_wheels']['raccourcis'][] = 'prefix';