Section: Éditeur HTML
« Captcha | ^ Créer un fichier jforms 1.1 | Datepicker » |
− Table des matières
Pour utiliser un éditeur HTML wysywg dans vos formulaire, il faut utiliser la
balise <htmleditor>
.
<htmleditor ref="description">
<label>Description du produit</label>
</htmleditor>
Vous pouvez changer l'apparence de l'éditeur, la configuration de l'éditeur, et
même le moteur de l'éditeur, via les attributs skin
, et config
de la balise
<htmleditor>
Par défaut, jForms utilise le moteur CKEditor.
Configuration générale des éditeurs ¶
L'attribut config
indique le nom d'une configuration d'un éditeur. Sa
valeur par défaut est default
.
Les configurations sont déclarées dans la section [htmleditors] de la configuration générale de jelix. Voici ce qu'elle contient par défaut :
[htmleditors]
default.engine.name=ckeditor
ckdefault.engine.name=ckeditor
ckfull.engine.name=ckeditor
ckbasic.engine.name=ckeditor
Comme vous pouvez le voir, plusieurs configuration sont possibles, puisqu'il y en a
4 de définit. Ainsi, pour chaque configuration, il peut y avoir une ou plusieurs
paramètres, commençant par le nom de la configuration : default
, ckdefault
etc.
Ici il n'y a qu'une propriété définit, engine.name
, qui indique le nom de l'éditeur
à utiliser, et qui est en fait un nom utilisé dans une fonction Javascript de chargement.
Voir plus bas.
Pour chaque configuration, il faut également spécifier les fichiers JS et CSS à utiliser.
On utilise pour cela les les webassets. Le groupe de webassets pour une
configuration doit prendre le nom de la configuration (ici default
), préfixé
par jforms_htmleditor_
. Le groupe de webassets pour la configuration default
est celui-ci :
[webassets_common]
;...
jforms_htmleditor_default.js[]="$jelix/ckeditor5/ckeditor.js"
jforms_htmleditor_default.js[]="$jelix/js/jforms/htmleditors/ckeditor_default.js"
Vous remarquerez que l'on inclus, en plus du fichier JS de CKEditor, ckeditor.js
,
un fichier ckeditor_default.js
fourni par Jelix. Ce code Javascript permet d'instancier
correctement CKEditor pour un textarea donné. Voir la section suivante.
Il est aussi possible de définir un groupe de webassets pour chaque "skin" utilisé
pour l'éditeur, quand celui dispose d'un système de theme. Pour cela le nom
du groupe a la forme jforms_htmleditor_<nom configuration>.skin.<nom skin>
.
Par exemple, pour déclare les assets de la skin default
de la configuration default
,
on va déclarer le groupe suivant (qui ne comporte qu'une feuille CSS) :
jforms_htmleditor_default.skin.default.css="somewhere/skins/default/skin.css"
Pour pouvoir utiliser la "skin" silver
, on aura :
jforms_htmleditor_default.skin.silver.css="somewhere/skins/silver/skin.css"
Si vous voulez utiliser la config default
avec la skin silver
, dans votre fichier
jForms vous devez avoir :
<htmleditor ref="description" config="default" skin="silver">
<label>Description du produit</label>
</htmleditor>
Créer un script d'instanciation d'un éditeur ¶
La plupart des éditeurs HTML wysiwyg permettent de les configurer au moyen de paramètres divers et variés. Cette configuration se fait en javascript.
jForms a donc besoin de savoir comment instancier et paramétrer l'éditeur.
Pour cela un script doit être fourni. Il doit contenir une fonction javascript qui
se chargera de paramétrer l'éditeur selon vos besoins. Cette fonction doit se trouver
dans un fichier, dont vous indiquez le chemin dans un groupe de webassets (comme
wymeditor_default.js
plus haut).
Par exemple, on veut créer une nouvelle configuration "ckfancy" pour CKEditor. On
crée par exemple un fichier dans www/js/ckeditor_ckfancy.js
(l'endroit et le
nom du fichier n'a aucune importance). Ensuite on le déclare dans la
configuration :
[htmleditors]
ckfancy.engine.name=ckeditor
[webassets_common]
;...
jforms_htmleditor_ckfancy.js[]="$jelix/ckeditor5/ckeditor.js"
jforms_htmleditor_ckfancy.js[]="js/ckeditor_ckfancy.js"
La fonction dans ce fichier doit se nommer d'une manière précise :
jelix_<engine name>_<nom configuration>()
, où <engine name>
est l'identifiant de
l'éditeur, qui est inscrit dans le paramètre *.engine.name, et
<nom configuration>
l'identifiant de la configuration. Donc pour notre
exemple, le nom doit être jelix_ckeditor_ckfancy()
. Cette fonction reçoit
en paramètre l'id du textarea qui contient le contenu HTML, l'id du formulaire jForms,
le nom de la skin et un objet de configuration.
Cet objet de configuration contient les propriétés suivantes
locale
: le code de langue (valeur de jApp::config()->locale)basePath
: le basePath de l'applicationjqueryPath
: le chemin URL vers le répertoire de jqueryjelixWWWPath
: le chemin URL vers le répertoire de jelix-www
Exemple de cette fonction, qui ajoute ici une feuille de style spécifique pour le contenu à éditer (à ne pas confondre avec la skin) :
function jelix_ckeditor_ckfancy(textarea_id, form_id, skin, config){
var ckConfig = {
toolbar: [ 'bold' ],
language: config.locale.substr(0,2).toLowerCase()
};
ClassicEditor
.create( document.querySelector( '#'+textarea_id ), ckConfig )
.then( function(editor) {
jQuery('#'+form_id).bind('jFormsUpdateFields', function(event){
editor.updateSourceElement();
});
} )
.catch( function(error) {
console.error( error );
});
)}
Utiliser un autre moteur que CKEditor ¶
Il faut déclarer les fichiers javascript et css à charger, dont l'un doit être un script de chargement comme expliqué précédement.
Voici un exemple avec TinyMCE . Attention aux noms de fichiers JS des éditeurs en question, ils peuvent être différents.
TinyMCE ¶
[htmleditors]
tinymceconf.engine.name = tinymce
[webassets_common]
;...
jforms_htmleditor_tinymceconf.js[]="tinymce/tinymce.js"
jforms_htmleditor_tinymceconf.js[]="js/tinymce_default.js"
jforms_htmleditor_tinymceconf.skin.default.css="tinymce/skins/default/full.css"
Dans js/tinymce_tinymceconf.js
, créer une fonction
jelix_tinymce_tinymceconf()
comme indiqué dans la section précédente. Tous les
formulaires avec des éléments <htmleditor>
qui ont config="tinymceconf"
utiliseront cet éditeur.