Formation PUB010 : PHP, 2025 Éditer une page Web en ligne

49.2 Éditeur HTML gratuit - TinyMCE


TinyMCE est un éditeur HTML tout à fait gratuit. Il permet d'éditer du texte et d'ajouter des images, des tableaux, de la couleur et toute autre fonctionnalité HTML.

Il fonctionne autant en mode visuel (What You See Is What You Get - wysiwyg) qu'en mode HTML.

Il est possible de le configurer afin d'y ajouter différentes barres d'outils. Les boutons de ces barres d'outils sont paramétrables.

Je vous présente ici les instructions pour travailler avec la version 7 de TinyMCE. Il y aura possiblement quelques ajustements à apporter si vous travaillez avec une version différente.

Dans cette fiche :

Installation de TinyMCE

Il est possible de travailler avec TinyMCE avec un lien CDN (en mode cloud) ou de télécharger son code directement dans notre application.

Les instructions sont indiquées sur leur site : http://www.tinymce.com.

Voici un résumé des étapes à suivre pour utiliser le mode cloud.

  • Rendez-vous sur le site de TinyMCE.
  • Cliquez sur Start for free.
  • Après vous être enregistrés, cliquez sur le lien Get your Cloud API Key.

    Sans cette clé (et l'étape suivante qui consiste à enregistrer vos domaines), l'éditeur affichera le message le message « This domain is not registered with Tiny Cloud. Please review your approved domains. » ou « The API key you have entered is invalid. Please review your API key here » ou encore « The domain is not supported by your API key. Please review your domain settings here. ».

    This domain is not registered with Tiny Cloud. Pleas review your approved domains.

  • Rendez-vous ensuite dans le menu Approved Domains pour configurer le ou les noms de domaine des sites qui utiliseront TinyMCE.

    Pour un site Web, vous aurez au moins deux domaines à enregistrer :

    • un pour la version locale : localhost ou, si vous travaillez avec un nom de domaine local, domainelocal.suffixe
    • un pour la version en ligne : mondomaine.com
  • Une fois les noms de domaine correctement enregistrés, vous pouvez commencer à utiliser TinyMCE.

Balises <script>

Pour indiquer à votre programme que vous désirez utiliser TinyMCE, vous devez entrer des balises <script> dans la zone <head> de chacune des pages qui utilisent TinyMCE.

Dans la première balise, il est important de bien inscrire votre clé d'accès à la place de la série de x. L'URL exact à utiliser avec votre enregistrement vous est fourni sur le site de TinyMCE dans la section Integrate TinyMCE.

N'oubliez pas l'attribut defer.

Attendez avant de copier cet extrait dans votre code. Je vous suggère des options intéressantes plus bas.

HTML

<script src="https://cdn.tiny.cloud/1/xxxxxxxxxxxxxxxxxxxxxxxxxx/tinymce/7/tinymce.min.js" referrerpolicy="origin" defer></script>
<script>
    document.addEventListener("DOMContentLoaded", function(event) {
        tinymce.init({
            selector:'textarea'   // voir plus loin pour des options plus intéressantes!
        });
    });
</script>

Dans cet extrait de code, on indique que chaque balise <textarea> sera convertie en éditeur visuel. Il ne vous reste qu'à ajouter une balise <textarea> sur la page désirée.

Dès le chargement de la page, le <textarea> prendra l'apparence suivante :

Apparence par défaut de TinyMCE

Comment intégrer les balises <script>

Si vous utilisez un découpage standard sur un site PHP vanille, différentes techniques sont à votre disposition pour insérer ces balises :

  • Si vous copiez ces balises dans la zone <head> du fichier entete.inc, TinyMCE sera disponible sur toutes les pages du site (ce qui est rarement nécessaire).
  • Il est possible de charger TinyMCE seulement sur certaines pages en plaçant les balises <script> dans la ou les pages concernées, juste avant l'appel à pied-page.inc. La structure du code ne sera pas optimale mais le tout sera fonctionnel.
  • Grâce à la fonction inclureJsPropreALaPageActuelle(), il est possible de placer les balises <script> dans la zone <head> de pages ciblées. 

    Par exemple, voici comment charger automatiquement TinyMCE sur la page une-page.php à l'aide de inclureJsPropreALaPageActuelle().

    • La première balise, qui contient l'URL de tinymce.min.js, sera placée dans le fichier include/scripts-pages/une-page.inc.
      Fichier include/scripts-pages/une-page.inc

      <script src="https://cdn.tiny.cloud/1/xxxxxxxxxxxxxxxxxxxxxxxxxx/tinymce/7/tinymce.min.js" referrerpolicy="origin" defer></script>

    • Le contenu de la seconde balise, qui contient l'appel à tinymce.init(), sera placé dans le fichier js/scripts-pages/une-page.js.

      Les balises <script> et </script> ne doivent pas faire partie du fichier, elles seront générées par la fonction.

      Fichier js/scripts-pages/une-page.js

      document.addEventListener("DOMContentLoaded", function(event) {
          tinymce.init({
              selector:'textarea'   // voir plus loin pour des options plus intéressantes!
          });
      });

Mieux cibler les balises à transformer en éditeur visuel

Avec la configuration précédente, toutes les balises <textarea> d'une page Web seront converties en éditeur visuel. Il est possible de changer ce comportement, par exemple ne transformer que les <textarea> qui ont la classe tinymce (ou toute autre classe de votre choix).

JavaScript

document.addEventListener("DOMContentLoaded", function(event) {
    tinymce.init({
        selector:'textarea.tinymce'
    });
});

Et dans le code HTML :

HTML

<textarea class="tinymce">...</textarea>

Configurer TinyMCE

Un des gros avantages de TinyMCE, c'est qu'il est hautement configurable.

Les configurations disponibles sont bien documentées sur le site de TinyMCE. Aussi, je vous présente ici seulement quelques éléments que j'utilise régulièrement.

Pour ajouter des boutons à TinyMCE, il faut ajouter une configuration toolbar dans le tinymce.init().

Certains boutons nécessitent l'ajout d'un plugin, d'où la nécessité d'ajouter les informations requises dans la configuration plugins.

Pour connaître les plugins disponibles : https://www.tiny.cloud/docs/tinymce/latest/plugins/#open-source-plugins

Configuration de base

Voici une configuration de base intéressante.

J'ai choisi ici de cacher le menu textuel puisqu'il apparaît par défaut en anglais.

J'aurais aussi pu choisir de redéfinir ce menu avec des options en français ou encore de localiser TinyMCE en français.

Remarquez l'ajout du bouton code Icône code, qui nécessite le plugin code, pour permettre de consulter le texte en format HTML, ce qui offre toutes les possibilités d'édition.

JavaScript

document.addEventListener("DOMContentLoaded", function(event) {
    tinymce.init({
        selector:'textarea.tinymce',
        menubar: false,
        plugins: 'link, image, lists, code, table',
        toolbar: 'bold italic | link image | bullist numlist | table | pastetext removeformat | code'
    });
});

Fenêtre TinyMCE avec moins d'options

Configuration plus élaborée

Pour les sites nécessitant plus d'options, j'ajoute quelques boutons.

Cette configuration permet notamment d'utiliser mes propres classes CSS dans l'éditeur.

JavaScript

document.addEventListener("DOMContentLoaded", function(event) {
    tinymce.init({
        selector:'textarea.tinymce',
        menubar: false,
        plugins: 'paste, charmap, link, image, media, lists, code, table',
        style_formats: [
            {title: 'Important', inline: 'span', classes: 'important'},
            {title: 'Paragraphe important', block: 'p', classes: 'important'},
            {title: 'Barré', inline: 'span', classes: 'barre'},
            {title: 'Couleur 1', inline: 'span', classes: 'couleur1'},
            {title: 'Couleur 2', inline: 'span', classes: 'couleur2'},
            {title: 'Couleur 3', inline: 'span', classes: 'couleur3'}
        ],
        toolbar: 'undo redo | bold italic | bullist numlist | table tableinsertrowbefore tableinsertcolbefore tabledeleterow tabledeletecol | pastetext removeformat | code | charmap link image media | styles blocks',
        content_css: [
            '/css/tinymce.css'
        ]
    });
});

TinyMCE avec plus d'options

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre