Masquer les id des termes de taxonomie dans les champs autocompletion

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je débute sur Drupal et j'ai cherché pendant de nombreuses heures à masquer les ids qui apparaissent après les termes affichés dans les champs d'autocompletion.

J'ai utilisé les 2 sites suivants pour arriver à mes fins :

J'ai du modifier/créer les fichiers suivants du thème que j'utilise (Bartik) :

drupal/core/themes/bartik/

├── bartik.info.yml
├── bartik.libraries.yml

drupal/core/themes/bartik/js/
├── autocompletion-hideid.js

Contenu des fichiers

bartik.info.yml

Ajout de la ligne - bartik/global-scripts dans la section libraries :

# This theme is marked as @internal. It is intended to evolve and change over
libraries:
  - bartik/classy.base
  - bartik/classy.messages
  - core/normalize
  - bartik/global-styling
######## AJOUT ############
  - bartik/global-scripts
######## AJOUT ############
............

bartik.libraries.yml

Ajout en fin de fichier :

global-scripts:
  version: 1.0
  js:
    js/autocompletion-hideid.js: {}
  dependencies:
    - core/jquery

autocompletion-hideid.js

/
* @file
* autocompletion_hideid behaviors.
*/

(function ($, Drupal) {

  'use strict';

  /
   * Remove entity reference ID from "entity_autocomplete" field.
   *
   * @type {{attach: Drupal.behaviors.autocompleteReferenceEntityId.attach}}
   */
  Drupal.behaviors.autocompleteReferenceEntityId = {
    attach: function (context) {
      // Remove reference IDs for autocomplete elements on init.
      $('.form-autocomplete', context).once('replaceReferenceIdOnInit').each(function () {
        let splitValues = (this.value && this.value !== 'false') ?
          Drupal.autocomplete.splitValues(this.value) : [];

        if (splitValues.length > 0) {
          let labelValues = [];
          for (let i in splitValues) {
            let value = splitValues[i].trim();
            let entityIdMatch = value.match(/\s*((.*?))$/);
            if (entityIdMatch) {
              labelValues[i] = value.replace(entityIdMatch[0], '');
            }
          }

          if (labelValues.length > 0) {
            $(this).data('real-value', splitValues.join(', '));
            this.value = labelValues.join(', ');
          }
        }
      });
    }
  };

  let autocomplete = Drupal.autocomplete.options;
  autocomplete.originalValues = [];
  autocomplete.labelValues = [];

  /**
   * Add custom select handler.
   */
  autocomplete.select = function (event, ui) {
    autocomplete.labelValues = Drupal.autocomplete.splitValues(event.target.value);
    autocomplete.labelValues.pop();
    autocomplete.labelValues.push(ui.item.label);
    autocomplete.originalValues.push(ui.item.value);

    $(event.target).data('real-value', autocomplete.originalValues.join(', '));
    event.target.value = autocomplete.labelValues.join(', ');

    return false;
  }

})(jQuery, Drupal);

Dans un terminal, faire drush cr et le tour est joué.

Si ça peut faire gagner du temps à certains :)

Forum : 
Version de Drupal :