Planète

Par admin

Revue de presse Drupal - semaine 14

Une nouvelle section sur le site pour vous partager une petite revue de presse du monde drupal afin d'occuper votre week-end confiné avec un peu de lecture en français et en anglais.

Nouveau bureau pour l’association

L'assemblée générale de l'association avait lieu il y a quelques jours, découvrez la composition du bureau : https://www.drupal.fr/articles/2020/decouvrez-bureau-2020-lassociation-drupal-france-francophonie.

La DrupalCon de Barcelone repoussée !

Après les Drupal Dev Days (repoussés à une date inconnue encore), c'est au tour de la DrupalCon de Barcelone d'être déplacée du 8 au 11 décembre 2020 au lieu des 14 au 17 septembre 2020. Plus d'informations en anglais : https://events.drupal.org/barcelona2020/covid-19-public-health-info.

Les tests unitaires avec Drupal 8

Extrait du livre Drupal 8 Module Development, en anglais : https://www.webomelette.com/automated-testing-drupal-8.

Toujours sur les tests unitaires : une présentation de Fabien Clément sur phpunit et Drupal 8 (français) : https://www.lequipe.tech/blog/les-tests-sous-drupal-8-phpunit.

Comment créer un thème Drupal 8

Toutes les explications pour créer un thème D8 en partant de 0 (anglais) : https://www.specbee.com/blogs/how-create-custom-drupal-8-theme-9-simple-steps.

Drupal 9, c'est pour bientôt !

La version 9 est prévu pour sortir le 3 juin 2020, cette semaine est sorti la seconde version beta pour préparer la version finale.

Découvrez l'annonce de sortie de la beta2 : https://www.drupal.org/project/drupal/releases/9.0.0-beta2.

Le portail officiel contenant toutes les informations concernant Drupal 9 (anglais) : https://www.drupal.org/docs/9.

Le point sur les nouveautés de Drupal 9 (français) : https://bluedrop.fr/content/chemin-vers-drupal-9-migration-drupal-8-drupal-7.

Découvrez comment tester Drupal 9 avec composer (français) : https://kgaut.net/snippets/2020/installer-et-tester-drupal-9-avec-composer.html.

Programme de test de migration de Drupal 8 vers Drupal 9 (anglais) : https://www.drupal.org/blog/get-involved-participate-in-the-beta-test-process-for-drupal-9.

Mettre en place un flux de modération / validation de contenu avec Drupal 8

Une checklist pour ne rien oublier (anglais) : https://www.axelerant.com/resources/team-blog/qa-checklist-editorial-workflow-moderation.

Nouveau système de numérotation des versions de module

Le versionnement sémantique arrive avec Drupal 8.8.3, en lieu et place des 8.x-2.0, les versions seront maintenant numérotées 2.0.0. Découvrez ce que cela veut dire pour vos modules et comment faire la transition : en français : https://kgaut.net/blog/2020/drupal-9-modules-et-versionnement-semantique.html et en anglais : https://www.drupal.org/node/1015226#semver-transition.

Et vous, qu'avez-vous lu cette semaine ? Partagez-vos liens en commentaire ci-dessous !

Par admin

Découvrez le bureau 2020 de l'association Drupal France et francophonie

L'assemblée générale de l'association a eu lieu le 12 mars 2020 et vous étiez nombreux en présentiel ou à distance, merci de votre implication !

Retrouvez le support de la présentation.

Le nouveau bureau élu :

En page d'accueil : 
Par kgaut
Kevin Gautreau

Drupal 9, modules, et versionnement sémantique

Avec l'arrivée prévue le 3 juin 2020 de drupal 9, il n'y a pas besoin de créer une branche 9.x-1.x spécifiquement pour drupal 9, vous pouvez facilement indiquer que votre module est compatible avec cette nouvelle version en ajoutant dans votre fichier mon_module.info.yml la clé suivante :

core_version_requirement: ^8 || ^9

La clé core est à conserver pour garder la compatibilité avec les versions inférieures à drupal 8.7.7 (oui c'est d'un pratique...) Exemple dans un de mes modules.

En outre, il en sera bientôt terminé des versions de module "8.x-1.0", le versionnement sémantique est adopté et est compatible à partir de drupal 8.8.3, C'est à dire que les nouvelles branches de vos projets seront nommées 2.x (au lieu de 8.x-2.x) et les tags (versions) pourront être sous la forme :

2.0.0-beta1
2.0.0
2.0.1
2.1.0

Si vous passez au versionnement sémantique, les numéros de versions doivent être incrémentés, ainsi, si actuellement vous avez actuellement une branche 8.x-2.x, conservez là pour toutes les versions de drupal inférieures à 8.8.3, mais vous pouvez dès maintenant créer une branche 3.x pour la compatibilité avec les versions 8.8.3+ et 9.0.0 de drupal.

Il est possible de spécifier qu'une branche ne sera compatible qu'avec drupal 9 dans le fichier info.yml :

core_version_requirement: ^9

Plus d'informations sur le versionnement sémantique

Plus d'informations sur les changements du fichier mon_module.info.yml

tl;dr

Si vous avez un module avec une branche 8.x-2.x :

Votre module est compatible avec drupal 9 : vous pouvez ajouter la clé "core_version_requirement: ^8 || ^9" à votre module.info.yaml (c'est ce que j'ai fais pour mon mini module popin : https://www.drupal.org/project/popin. Vous pourrez passer au versionnement sémantique pour la prochaine version majeure de votre module
Votre module nécessite de plus gros travaux pour être rendu compatible, vous pouvez garder la branche 8.x-2.x pour drupal 8 et démarrer une branche 3.x qui sera une branche de travail pour drupal 9.

Par liber_t
Ines WALLON

Relancer un hook_update avec drush

Il peut être parfois utile de vouloir relancer un hook_update_n, pour ce faire vous pouvez utiliser cette commande drush. Dans cette exemple, je veux rejouer le hook my_paragraph_update_8001

drush ev "drupal_set_installed_schema_version('my_paragraph', '8000');" ; drush updb

Par kgaut
Kevin Gautreau

Installer et tester drupal 9 avec composer

La première version beta de Drupal 9 est sortie il y a quelques jours, et la version stable est prévue pour le 3 juin.

Si vous souhaitez tester dès aujourd'hui et par exemple vérifier si vos modules sont compatibles, voici comment installer la première beta avec composer :

Dans le dossier où vous souhaitez installer drupal :

composer create-project drupal/recommended-project:9.0.0-beta1 ./

Ensuite configurez votre serveur web pour pointer sur le dossier web et c'est parti :

Image

Drupal 9

Par kgaut
Kevin Gautreau

Module drupal 8 : Apidae Tourisme

Apidae tourisme est un « réseau d'informations touristiques » qui permet aux offices du tourisme, mairies... De créer des « lieux » (restaurants, hôtels...) ainsi que des évènements sur des cartes de manière collaborative.

Dans le cadre d'un ancien projet, j'avais du développer une intégration avec l'API de ce service et un site drupal. J'avais à l'époque développé ce module sur github afin de peut-être un jour le mettre à disposition de tous. Un drupalistos m'a signalé récèment qu'il était listé sur la page des intégrations disponible sur la doc développeur d'Apidae.

Rebelote pour un projet que je vais attaquer, du coup j'ai pris un peu de temps pour packager le module que j'avais développé à l'époque, le nettoyer un peu afin de le publier sur drupal.org. C'est chose faite aujourd'hui !

Le module permet à intervalle régulier de synchroniser les données venant d'Apidae et de créer / mettre à jours des nœuds en récupérant différents champs (noms, description, médias, téléphone, coordonnés GPS...)

Le module gère le multi-langue et on peut ainsi récupérer des traductions des fiches et générer des traductions des nœuds.

Actuellement seulement certains champs sont mappés, mais je compte rendre ça administrable dans un futur proche.

Je suis preneur de suggestions et n'hésitez-pas à me contacter si vous souhaitez de l'aide ou des informations dans sa mise en œuvre.

La page du module sur drupal.org : https://www.drupal.org/project/apidae_tourisme

Par Christophe MOLLET
Christophe Mollet

Drupal Con

Vous souhaitez participer à la Drupal Con ? Retrouvez toutes les informations nécessaires et le programme dans notre article.

Lancer une migration avec Migrate de façon programmatique sur Drupal 8

Migrate, un module intégré au coeur de Drupal 8, est une solution puissante permettant de mettre en place des processus d'import de données depuis n'importe quelle source de données (CSV, XML, Base de données, JSON, etc.) vers un projet Drupal 8. Le but de ce billet n'est pas d'explorer toutes les facettes de Migrate, tant elles sont nombreuses et sont déjà par ailleurs traitées dans de nombreux billets de blogs ou sur la documentation officielle, mais plutôt d'aborder un point particulier : comment lancer une migration de façon programmatique ?

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Quickie 01 : Comment altérer une route sur Drupal 8

Voici le premier article du nouveau format mis en place sur ce site. C'est un format de type Quickie où je vais parler, démontrer, résoudre une problématique d'un cas réel.

Dans ce premier exemple nous allons voir comment altérer une route existante, d'un module contrib ou du cœur pour changer l'url, la callback, les permissions ...

Par kgaut
Kevin Gautreau

Drupal 8 - Views - Créer un filtre contextuel personnalisé

Les contextual filters ou filtres contextuels sont une fonctionnalité très utile du module views de drupal : il permettent, comme le nom l'indique de filtrer les éléments affichés en fonction d'un paramètre contextuel (lié à un nœud, à l'internaute, un paramètre GET...).

Certains sont fournis de base avec drupal mais ils ne conviennent pas forcement à tous les cas d'utilisation.

Dans le cas présent, le but est de filtrer des nœuds en fonction de la localité de l'utilisateur (techniquement un terme de taxonomie) afin que l'utilisateur ne visualise que les nœuds qui concerne sa commune. Les nœuds ont un champ « référence à un terme de taxonomie » multiple, même chose pour l'utilisateur mais simple pour lui. Donc un nœud peut concerner plusieurs communes alors qu'un utilisateur n'appartient qu'à une seule commune.

Création du filtre contextuel :

# web/modules/custom/mon_module/src/Plugin/views/argument_default/UserLocalite.phpisAnonymous()) {      return 'all';    }    $user = User::load($user->id());    // getLocalitesId() est une methode personnalisée de la classe User    // qui retourne l'id du terme de taxonomy de la localité    return $user->getLocalitesId();  }   // Ma classe implémentant CacheableDependencyInterface, on peut ainsi ajouter des paramètres   // de cache, si ça n'est pas nécessaire, il suffit de supprimer l’implémentation et les deux méthodes ci-dessous.  public function getCacheMaxAge() {    return Cache::PERMANENT;  }   public function getCacheContexts() {    return ['user:localite'];  }}

Il nous reste plus qu'à sélectionner le filtre dans la liste des filtre contextuels de drupal, en choisissant bien le champs sur lequel le filtre doit s'appliquer (dans mon cas : node.localites_cibles) :

Ajout filtre contextuel

 

Configuration du filtre contextuel

 

Réordonner facilement des paragraphes embarqués dans d'autres paragraphes avec Drupal 8

Le module Paragraph permet, entre autres usages, de proposer des mises en pages structurées diverses et variées selon les besoins d'un projet, directement accessibles et pouvant être gérés par un rédacteur de contenu, sans droits d'administration particuliers. Utilisateur du module Paragraph depuis de nombreuses années, j'avoue peut-être n'avoir pas lu toutes les releases notes du module. Et c'est sans doute pour cela que je découvre seulement maintenant que le module Paragraph propose désormais nativement une fonction de glisser / déposer permettant de réordonner complètement l'agencement de paragraphes avec un simple glisser /déposer.

Exporter en CSV les contenus d'un projet Drupal 8

Le besoin d'exporter les contenus d'un projet Drupal 8 est un besoin récurrent, que ce soit à des fins d'analyse ou encore de mise à jour en masse avec un processus d'importation concomitant. Nous disposons de plusieurs solutions avec Drupal 8 qui chacune présente des avantages et des inconvénients, que ce soit au niveau des types de contenu exportables, des options d'export des entêtes de colonnes et des valeurs, du niveau de droits d'accès requis et des options de configuration très variables. Nous allons ici vous présenter un nouveau module Entity Export CSV qui semble pouvoir répondre à de nombreux cas d'usage.

Par kgaut
Kevin Gautreau

Drupal 8 - Surcharger la classe de l'entité User

Sous Drupal 8 il est possible de surcharger la classe du type d'entité « User » afin de par exemple ajouter nos propres getters et setters ou de modifier l'affichage par défaut d'un nom d'utilisateur.

Pour cela il faut informer drupal qu'on va changer la classe de base pour le type d'entité User. Cela se passe dans le .module via le hook HOOK_entity_type_alter :

function monmodule_entity_type_alter(array &$entity_types) {  $entity_types['user']->setClass(\Drupal\monmodule\Entity\User::class);}

Et il faut ensuite définir la classe en elle même :

# web/modules/custom/monmodule/src/Entity/User.phplastname->value . ' ' . $this->firstname->value;  }   public function setDomain($domain_id) {    $this->set('field_domain_access', [$domain_id]);    return $this;  } }

Rien de foufou ici, j'ai surchargé la méthode « label », ainsi par exemple dans la listes des membres du site sera affiché en lieu et place de leur nom d'utilisateur, leurs nom et prénom. Il y a aussi un setter pour définir le domain de l'utilisateur.

Maintenant d'est que l'on chargera un utilisateur il sera de cette classe, et non plus de la classe de base.

Ceci est évidement possible pour l'ensemble des types d'entités (Noeuds, terme de taxonomy...)

Par kgaut
Kevin Gautreau

Drupal 8 - Surcharger la page de liste des termes de taxonomie

La page par défaut de liste des termes de taxonomie de drupal 8 n'est pas très flexible. Elle peut facilement être substituée à une vue mais dans ce cas on perd le « drag'n'drop » dans le cas d'une arborescence.

Pour garder ce comportement, mais pouvoir quand même ajouter des colonnes, il est possible de surcharger le formulaire gérant cette page.

Cela se passe en 3 étapes :

1. Déclaration du service d'alteration de la route

# mon_module.services.ymlservices:  mon_module.route_subscriber:    class: Drupal\mon_module\Routing\VocabularyOverviewRouteProvider    tags:      - { name: event_subscriber }

2. Altération de la route

get('entity.taxonomy_vocabulary.overview_form');    // Make a change for default taxonomy overview form.    $route->setDefault('_form', VocabularyOverviewTerms::class);    // Re-add the collection to override the existing route.    $collection->add('entity.taxonomy_vocabulary.overview_form', $route);  } }

3. Surcharge du formulaire

Note : Ici je ne modifie le formulaire que pour un seul vocabulaire (etudiant_promos) et j'ajoute une colonne « Domain ».

id() !== 'etudiant_promos') {      return $form;    }    // On ajoute l'entête du tableau    $form['terms']['#header']['domain'] = $this->t('Domain');     // On parcours les ligne pour ajouter notre colonne    foreach ($form['terms'] as $key => &$termRow) {      if(strpos($key, 'tid:') === 0) {        /** @var \Drupal\taxonomy\Entity\Term $term */        $term = Term::load($termRow['term']['tid']['#value']);        /** @var \Drupal\domain\Entity\Domain $domain */        $domain = $term->get('domain')->referencedEntities()[0];        $termRow['domain'] = ['#markup' => $domain->label()];      }    }    return $form;  } }

 

 

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Pimp my WYSIWYG

Les champs WYSIWYG prennent une place de plus en plus important dans la construction des pages web modernes.

Voici comment utiliser les WYSIWYG, les configurer et comment ajouter des fonctionnalités sous Drupal 8.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Pimp my WYSIWYG

Les champs WYSIWYG prennent une place de plus en plus important dans la construction des pages web modernes.

Voici comment utiliser les WYSIWYG, les configurer et comment ajouter des fonctionnalités sous Drupal 8.

Par liber_t
Ines WALLON

Présentation de GrumPHP

Quand on travaille à plusieurs sur un projet, il peut être intéressant de mettre en place des outils de qualité de code afin d’harmoniser le code source que vous souhaitez mettre en place sur votre projet (linter, CodeSniffer et tests) mais pour cela, il faudra alors s'assurer que tous les collaborateurs les utilisent afin d'en tirer réellement partie et c'est là que GrumPHP rentre en jeux.

Par liber_t
Ines WALLON

Convertir un texte long en texte long formaté

 

Pour convertir un champ texte long (ici: field_communiques_texte_wysiwig) en texte log formaté, il suffit de créer un .install dans un module contenant l'exemple ci-dessous : 

 

Par liber_t
Ines WALLON

Ré indexer Search API par le code

Ré indexer tout Search API 

use Drupal\search_api\Utility\CommandHelper; $command_helper = new CommandHelper(\Drupal::entityTypeManager(),

Pages