JoomlaFCK adaptation du plugin jlink
- Détails
- Mis à jour le samedi 27 avril 2013 19:06
- Affichages : 2759
JoomlaFCK: adaptation du plugin Jlink
Le plugin Jlink de joomlaFCK sert à insérer un lien dans un article, ce lien pointant sur un autre article du même site.
Dans sa configuration de base, on positionne le curseur où l'on souhaite insérer le lien, puis on clique sur le bouton jlink, représenté par une chaine avec un fond coloré.
Une fenêtre s'ouvre, dans laquelle on va pouvoir entrer les premières lettres de l'article que l'on souhaite lier.
C'est pas forcément très pratique, mais on s'en contentera...
Par contre, il manque un paramètre que j'estime important, et qui donnerait la possibilité d'envoyer le lien cliqué dans une autre fenêtre, une popup ou ce que l'on veut, au choix.
J'ai donc décidé d'apporter cette modification mineure dans le code de jlink.
Adaptation de la fenêtre
tout d'abord, je vais insérer un champs de type select dans la fenêtre de sélection du lien.
Le fichier relatif à cette fenêtre est:
/plugins/editors/fckeditor/editor/plugins/jlink/fck_JLink.html
la modification consiste à rajouter ce code:
<tr> <td> Cible: </td> <td> <select id="cmbTarget"> <option value="_blank" selected="selected" fckLang="dbLinkTargetBlank">Nouvelle fenêtre</option> <option value="_self" fckLang="DlgLnkTargetSelf">Cadre courant</option> </select> </td> </tr>
Adaptation du fichier de langue
ce fichier se trouve ici:
/plugins/editors/fckeditor/editor/plugins/jlink/lang/fr.js
J'ai simplement rajouté deux lignes afin de faire correspondre les textes des deux options en français:
FCKLang.dbLinkTargetSelf = 'Cadre courant' ; FCKLang.dbLinkTargetBlank = 'Nouvelle fenêtre' ;
Je n'ai pas fait les modifs en anglais pour le moment, un jour peut-être lorsque je relirai cet article et que j'aurai du temps...
Adaptation du fichier d'initialisation du plugin
ce fichier se trouve ici:
/plugins/editors/fckeditor/editor/plugins/jlink/fckplugin.js
Il sert à initialiser le bouton de la barre d'outils et les fonctionnalités du plugin.
J'ai modifié cette fonction:
FCKdbLink.Add = function(linkname, caption) { if (linkname.substr(0, 4) != "http" && linkname.substr(0, 4) != "HTTP") linkname = "./" + linkname; FCK.InsertHtml("<a href='" + linkname + "'>" + caption + "</a>"); };
en rajoutant une partie pour la cible:
FCKdbLink.Add = function(linkname, caption, cible) { if (linkname.substr(0, 4) != "http" && linkname.substr(0, 4) != "HTTP") linkname = "./" + linkname; FCK.InsertHtml("<a href='" + linkname + "' target='" + cible + "'>" + caption + "</a>"); };
Adaptation du moteur du plugin
Il ne reste plus qu'à relier tout ça, en allant modifier le fichier suivant:
/plugins/editors/fckeditor/editor/plugins/jlink/suggest.js
la fonction d'origine:
function LoadSelected() { if (!eSelected) return; var txtHref = document.getElementById('txtHref'); var txtCaption = document.getElementById('txtCaption'); txtHref.value = eSelected.href.replace(/^https?.+\/index.php/, 'index.php'); txtCaption.value = (eSelected.innerText ? eSelected.innerText : eSelected.textContent)};
devient
function LoadSelected() { if (!eSelected) return; var txtHref = document.getElementById('txtHref'); var txtCaption = document.getElementById('txtCaption'); var cmbTarget = document.getElementById('cmbTarget'); txtHref.value = eSelected.href.replace(/^https?.+\/index.php/, 'index.php'); txtCaption.value = (eSelected.innerText ? eSelected.innerText : eSelected.textContent); cmbTarget.value = eSelected.target; };
et la fonction
function Ok() { var txtHref = document.getElementById('txtHref'); var txtCaption = document.getElementById('txtCaption'); if (document.getElementById('txtHref').value.length > 0) FCKdbLink.Add(txtHref.value, txtCaption.value); return true; };
devient
function Ok() { var txtHref = document.getElementById('txtHref'); var cmbTarget = document.getElementById('cmbTarget'); var txtCaption = document.getElementById('txtCaption'); if (document.getElementById('txtHref').value.length > 0) FCKdbLink.Add(txtHref.value, txtCaption.value, cmbTarget.value); return true; };
Voilà, ça fonctionne bien pour ce que je veux en faire...
Il faudrait maintenant faire en sorte que, lorsqu'on sélectionne un bout de texte dans l'éditeur afin d'y coller un lien dessus, Jlink récupère ce texte dans caption plutôt que de mettre le titre de l'article à lier...
En attendant, je sélectionne le texte sur lequel je dois faire le lien et je le copie via CTRL+C
Ensuite je clique sur jlink et colle dans caption mon texte par CTRL+V
Pour généraliser ces modifs sur tous mes sites, j'ai créé le plugin JlinkXav que j'installe à la place de Jlink, comme ceci:
D'abord je décompresse dans un dossier temporaire ce fichier zippé, puis je l'envoie sur mon site dans le dossier:
/plugins/editors/fckeditor/editor/plugins
ce qui me donne un sous-dossier jlinkxav dans plugins.
Ce plugin contient les modifications nécessaires pour que le remplacement de Jlink en JlinkXav ait lieu comme il faut, mais je ne vais pas détailler ici ce que j'ai modifié.
Ensuite, je vais modifier le fichier:
/plugins/editors/fckeditor/editor/jtoolbarsetconfig.xml
qui concerne le paramétrage des barres d'outil avec joomlaFCK, comme expliqué dans le document JoomlaFCK - Personnaliser la barre d'outils.
Je fais une recherche sur jlink, et pour chaque occurrence trouvée, je remplace par jlinkxav, comme ceci (attention à bien respecter les majuscules/minuscules):
<plugin name="JLinkXav" acl="*"> <params> <param name="KeyStrokes"> <item type="String"> CTRL </item> <item type="String"> SHIFT </item> <item type="Integer"> 76 </item> </param> </params> </plugin>
et vers la fin du fichier, cette ligne:
<add name="jlinkxav" lang="en,es,fr,it,ko,nl,pt,ru,za,zh"/>
Pour se convaincre que c'est ce plugin qui est entièrement utilisé, je renomme l'ancien dossier jlink en jlink.old et je teste l'insertion d'un lien interne au site avec le bouton jlink qui lui n'a pas changé d'aspect.
Voilà, normalement ça fonctionne correctement.