Utilisation des pipelines
Pour utiliser l’un des deux points d’entrée, vous devez avoir un fichier mes_fonctions.php
dans votre répertoires squelettes/
(qui doit donc, lui aussi, avoir été précédemment créé).
Le contenu minimal [1] de ce fichier est :
<?php
function ckeditor_config_post($config) {
/* insérer ici votre code modifiant $config */
return $config ;
}
function ckeditor_json_encode($object) {
/* insérer ici votre code initialisant $result en fonction du contenu de $object
le résultat doit être json - encodé */
return $result ;
}
function ckeditor_html2spip_pre($texte) {
/* insérer ici votre code de modification de $texte */
return $texte ;
}
function ckeditor_html2spip_post($texte) {
/* insérer ici votre code de modification de $texte */
return $texte ;
}
function ckeditor_spip2html_pre($texte) {
/* insérer ici votre code de modification de $texte */
return $texte ;
}
function ckeditor_spip2html_post($texte) {
/* insérer ici votre code de modification de $texte */
return $texte ;
}
?>
ckeditor_config_post
Ce point d’entrée sert à modifier la configuration qui sera passée à CKeditor lors de son initialisation. La fonction ckeditor_config_post
reçoit en entrée un tableau $config
contenant la configuration et retourne ce même tableau en sortie (après y avoir apporté diverses modifications).
Par exemple, la configuration actuelle du plugin désactive l’onglet « avancé » de la boîte de dialogue de lien de ckeditor. Cela peut vous déplaire, pour l’activer, il suffit de créer une fonction ckeditor_config_post
qui supprimer de l’entrée removeDialogTabs
, le paramètre : link:advanced
. Par exemple :
function ckeditor_config_post($config) {
unset($config['removeDialogTabs']) ;
return $config ;
}
Autre exemple, vous voulez complètement modifier les menus proposés par CKeditor, la configuration par défaut est donc insuffisante, il suffit de créer, à la main, le menu SpipFull
ou SpipBasic
(plus utile car non modifiable par CFG), par exemple, en insérant dans votre mes_fonctions;php
la fonction :
function ckeditor_config_post($config) {
$config['toolbar_SpipFull'] =
array(
array('NewPage','Preview'),
array('Cut','Copy','Paste','PasteText','PasteFromWord','-','Scayt'),
array('Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'),
array('insertHtml','Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'),
'/',
array('Styles','Format'),
array('Bold','Italic','Strike'),
array('NumberedList','BulletedList','-','Outdent','Indent','Blockquote'),
array('Link','Unlink','Anchor'),
array('Maximize','-','About')
) ;
return $config ;
}
Le tableau $config
qui est passé en paramètre est l’équivalent php
du paramètre javascript
: CKEDITOR.config
décrit dans la documentation de CKeditor. Il faut juste penser que :
- si dans documentation on écrit :
[ ... ]
, il faudra taper :array( ... )
- si dans documentation on écrit :
{ ... }
, il faudra taper :array( ... )
- si dans documentation on écrit :
item : ...
, il faudra taper :"item" -> ...
- etc.
- si dans la documentation il est fait référence à une constante
CKEDITOR.NOM
, il faudra la remplacer par :CKEDITOR_NOM
Par exemple, dans la documentation de CKEditor, on peut lire qu’il est possible de modifier les raccourcis clavier utilisé par CKEditor, en passant comme configuration à CKEditor :
config.keystrokes =
[
[ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ],
[ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ],
[ CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ],
[ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ],
[ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ],
[ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ],
[ CKEDITOR.CTRL + 76 /*L*/, 'link' ],
[ CKEDITOR.CTRL + 66 /*B*/, 'bold' ],
[ CKEDITOR.CTRL + 73 /*I*/, 'italic' ],
[ CKEDITOR.CTRL + 85 /*U*/, 'underline' ],
[ CKEDITOR.ALT + 109 /*-*/, 'toolbarCollapse' ]
];
Dans la fonction ckeditor_config_post
cela se traduira par :
$config['keystrokes'] =
array(
array( CKEDITOR_ALT + 121 /*F10*/, 'toolbarFocus' ),
array( CKEDITOR_ALT + 122 /*F11*/, 'elementsPathFocus' ),
array( CKEDITOR_SHIFT + 121 /*F10*/, 'contextMenu' ),
array( CKEDITOR_CTRL + 90 /*Z*/, 'undo' ),
array( CKEDITOR_CTRL + 89 /*Y*/, 'redo' ),
array( CKEDITOR_CTRL + CKEDITOR_SHIFT + 90 /*Z*/, 'redo' ),
array( CKEDITOR_CTRL + 76 /*L*/, 'link' ),
array( CKEDITOR_CTRL + 66 /*B*/, 'bold' ),
array( CKEDITOR_CTRL + 73 /*I*/, 'italic' ),
array( CKEDITOR_CTRL + 85 /*U*/, 'underline' ),
array( CKEDITOR_ALT + 109 /*-*/, 'toolbarCollapse' )
);
Faites très attention à ce que ferez du tableau $config
: il sera passé tel quel à CKeditor, sans aucun contrôle. En particulier : cela peut empêcher CKeditor de se lancer.
Il faut savoir que le plugin modifie le paramètre $config['toolbar']
à la création de chaque éditeur, il vaut alors soit SpipFull
, soit SpipBasic
suivant la configuration prévu pour l’éditeur. Il ne sert donc à rien de donner une valeur à ce paramètre : il sera ignoré. C’est la seule modification qui sera faite à ce tableau.
Enfin, il y a une valeur que vous pouvez modifier et qui n’est pas dans la documentation de CKEditor : loadExtraPlugins
qui contient une liste de chemins vers un répertoire de plugin (au sens de plugin pour CKEditor - pas de plugin pour SPIP) indexé par les noms des plugins. Par exemple, vous pouvez mettre :
$config['loadExtraPlugins']['monPlugin'] = '/url/vers/mon/plugin/a/moi/' ;
Il est préférable (vu que ckeditor peut-être appelé depuis un contexte public ou privé) de préciser un chemin absolu vers le plugin.
ckeditor_json_encode
Si vous trouvez que la fonction json_encode fournie un mauvais résultat, vous pouvez utiliser votre propre fonction son_encode
.
Ceci est utile :
- soit pour pretty-printer le code javascript utiliser par le plugin (par exemple pour le lire ...)
- soit parce que la fonction json_encode n’est pas fournie par votre serveur et que celle intégrée au plugin ne vous convient pas.
Par défaut, le code de cette fonction est équivalent à :
function ckeditor_json_encode($object) {
return json_encode($object) ;
}
Mais, pour afficher un javacript
indenté, vous pouvez utiliser celui-là :
/**
*
* (c) http://recursive-design.com/blog/2008/03/11/format-json-with-php/
*
* Indents a flat JSON string to make it more human-readable.
*
* @param string $json The original JSON string to process.
*
* @return string Indented version of the original JSON string.
*/
function indent($json) {
$result = '';
$pos = 0;
$strLen = strlen($json);
$indentStr = "\t";
$newLine = "\n";
$prevChar = '';
$outOfQuotes = true;
for ($i=0; $i<=$strLen; $i++) {
// Grab the next character in the string.
$char = substr($json, $i, 1);
// Are we inside a quoted string?
if ($char == '"' && $prevChar != '\\') {
$outOfQuotes = !$outOfQuotes;
// If this character is the end of an element,
// output a new line and indent the next line.
} else if(($char == '}' || $char == ']') && $outOfQuotes) {
$result .= $newLine;
$pos --;
for ($j=0; $j<$pos; $j++) {
$result .= $indentStr;
}
}
// Add the character to the result string.
$result .= $char;
// If the last character was the beginning of an element,
// output a new line and indent the next line.
if (($char == ',' || $char == '{' || $char == '[') && $outOfQuotes) {
$result .= $newLine;
if ($char == '{' || $char == '[') {
$pos ++;
}
for ($j = 0; $j < $pos; $j++) {
$result .= $indentStr;
}
}
$prevChar = $char;
}
return $result;
}
function ckeditor_json_encode($object) {
if (is_array($object)) { ksort($object) ; }
return indent(json_encode($object)) ;
}
ckeditor_html2spip_pre et ckeditor_html2spip_post
Ces deux points d’entrée servent à modifier le texte édité par CKEditor et passé à SPIP.
Lors de la sauvegarde du texte créé par CKEditor dans la base de donnée SPIP, celui-ci passe dans un filtre qui permet transformer certains (voir tous) enrichissements HTML en enrichissement SPIP (en particulier les liens et les documents).
Avant d’appliquer ce filtre, la fonction ckeditor_html2spip_pre
est appelée. Une fois ce filtre appliqué, la fonction ckeditor_html2spip_post
est appelée, puis le texte est passé à SPIP.
Ces deux appels sont conçus pour fonctionner en parallèle avec la préservation de la typographie SPIP [2].
ckeditor_spip2html_pre et ckeditor_spip2html_post
Ces deux points d’entrée servent à modifier le texte stocké dans la base de donnée SPIP ou collé avant qu’il ne soit passé à CKEditor.
Lors de l’initialisation du texte du CKEditor ou du collage d’un texte dans CKEditor celui-ci passe dans un filtre qui permet transformer certains (voir tous) enrichissements SPIP en enrichissement HTML (en particulier les liens et les documents).
Avant d’appliquer ce filtre, la fonction ckeditor_spip2html_pre
est appelée. Une fois ce filtre appliqué, la fonction ckeditor_spip2html_post
est appelée, puis le texte est passé à CKEditor.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |