A window similar to Drupal WYSIWYG editor with "CKEditor" and "Drupal" and Drupal logo visible on screen

Comment ajouter un nouveau bouton (plugin) à CKEditor pt. II

Dans l'un de nos articles précédents, nous vous avons montré comment configurer CKEditor dans Drupal 8. Utiliser l'interface utilisateur disponible est génial, mais parfois les clients nécessitent des fonctionnalités supplémentaires. Les grands sites Web d'entreprise avec des équipes éditoriales doivent pouvoir réaliser des choses uniques rapidement et nécessitent donc souvent des fonctions personnalisées.

Nous allons vous montrer comment vous pouvez étendre la fonctionnalité de l'éditeur par vous-même.
 
Dans le cas de nombreux sites Web, les fonctions de base de CKEditor sont plus que suffisantes. 
Cependant, il existe des projets où les clients exigent d'étendre la fonctionnalité de l'éditeur de contenu.
Avec CKEditor, vous pouvez le faire à l'aide de plug-ins – tous sont disponibles sur le site officiel.
http://ckeditor.com/addons/plugins/all 
Ajouter un nouveau plug-in au site basé sur Drupal 8 est très simple comparé à la façon dont c'était fait dans la version précédente de Drupal. Vous n'avez besoin que de créer un module simple.
 
Comme notre exemple, j'ai choisi un plug-in qui nous permettra de publier un clip YouTube à l'aide d'un code intégré ou de son URL.
 

L'arbre du catalogue avec la structure du module


Le plug-in en question : https://ckeditor.com/cke4/addon/youtube 
Créez un module nommé cke_youtube (ou choisissez votre propre nom).
 
La structure du module est la suivante :
 
cke_youtube.info.yml
contient les données standard du module.
cke_youtube.module est un fichier PHP vide, nous n'avons pas besoin de code ici.
 
La structure contient deux répertoires supplémentaires :
Répertoire du plug-in - js. 
Là, vous trouverez un autre répertoire nommé "plugins".
Décompressez les fichiers téléchargés depuis https://ckeditor.com/cke4/addon/youtube  là.
 
 Le catalogue du plug-in -js. visible dans l'arbre du catalogue du module


Créer un nouveau plug-in dans Drupal se fait dans un nouveau fichier de classe, que nous devons créer puis configurer correctement.
Dans notre cas, ce sera Youtube.php, et la structure entière doit ressembler à ceci.
 

structure complète du module


Code :

<?php

namespace Drupal\cke_youtube\Plugin\CKEditorPlugin;

use Drupal\ckeditor\CKEditorPluginInterface;
use Drupal\ckeditor\CKEditorPluginButtonsInterface;
use Drupal\Component\Plugin\PluginBase;
use Drupal\editor\Entity\Editor;

/**
 * Définit le plug-in "Youtube", avec un CKEditor.
 *
 * @CKEditorPlugin(
 *   id = "youtube",
 *   label = @Translation("Plug-in Youtube")
 * )
 */
class Youtube extends PluginBase implements CKEditorPluginInterface, CKEditorPluginButtonsInterface {

  /**
   * {@inheritdoc}
   */
  public function getDependencies(Editor $editor) {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getLibraries(Editor $editor) {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function isInternal() {
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function getFile() {
    return drupal_get_path('module', 'cke_youtube') . '/js/plugins/youtube/plugin.js';
  }

  /**
   * @return array
   */
  public function getButtons() {
    $iconImage = drupal_get_path('module', 'cke_youtube') . '/js/plugins/youtube/images/icon.png';

    return [
      'Youtube' => [
        'label' => t('Ajouter une vidéo YouTube'),
        'image' => $iconImage,
      ]
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getConfig(Editor $editor) {
    return [];
  }

}


La classe YouTube utilise deux interfaces -  CKEditorPluginInterface, CKEditorPluginButtonsInterface
Regardez de plus près son commentaire. La variable “id” doit contenir le même nom que le nom du plug-in que vous installez. 
Dans ce cas, le nom est “youtube”.
Pour d'autres plug-ins, vous trouverez le nom dans le fichier plugin.js.

Fichier Plugin.js. Le nom entre parenthèses est le nom de votre plug-in. Ici : le nom Youtube est visible


Ci-dessous, je vais discuter brièvement de toutes les méthodes et de ce qu'elles font :
getDependencies()
Ici, vous mettrez tous les noms des plug-ins requis pour que votre plug-in fonctionne.
S'ils ne sont pas nécessaires, vous laissez la méthode vide, et notre plug-in YouTube est l'un de ces cas.
Vous trouverez les plug-ins requis dans le fichier plugin.js.
Exemple pour le plug-in Layout Manager :
 

Liste des plugins nécessaires à l'installation du plugin "layout manager" depuis le fichier plugin.js


Dans ce cas, vous auriez dû d'abord installer basewidget, puis ajouter layoutmanager.


getLibraries()
Spécifie les bibliothèques supplémentaires.


getFile()
Emplacement du plug-in.


getButtons()
Ajoute un nouveau bouton à l'éditeur.
 
Veuillez garder à l'esprit que vous devez utiliser un nom correct dans le tableau de retour :
Dans le cas de ce plug-in, le nom correct est “Youtube”.

 

Le bon nom utilisé dans le tableau. Dans ce cas, c'est "Youtube"


Vous pouvez trouver le nom requis dans le fichier plugin.js.

 

Fichier Plugin.js. Le nom après .addbutton est le nom de votre plug-in.


À cet endroit où la structure entière et les noms sont corrects, vous pouvez activer votre nouveau module.
Allez dans Extension (/admin/modules/)
 

Étendre/admin/modules avec le nouveau plugin disponible


Maintenant, allez aux formats de texte et à la configuration de l'éditeur

Configuration → Rédaction de contenu → Formats et éditeurs de texte (/admin/config/content/formats/)


Ajoutez un nouveau bouton à l'éditeur pour un format sélectionné.

 

Un nouveau bouton est ajouté à CKEditor


Après avoir appliqué les modifications, ajoutez un nouveau contenu et sélectionnez le format de texte pour lequel vous venez de configurer le bouton Ajouter une vidéo YouTube.
Si tout fonctionne bien, une fenêtre s'ouvrira après avoir cliqué sur le bouton, vous permettant d'entrer votre code intégré ou l'URL de votre clip.

Fenêtre "Incorporer une vidéo YouTube" qui permet à l'utilisateur d'ajouter des films YouTube à la page qui est apparue après avoir utilisé le nouveau bouton de CKEditor.

3. Best practices for software development teams