JoomlaFCK adaptation du plugin jlink

Appréciation moyenne:  / 0
Très mauvaisTrès bien 

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.