Planète

Par kgaut
Kevin Gautreau

Drupal 8 et Drupal 9 - Attacher une librairie CSS ou JS à une vue

Voici comment inclure des fichiers CSS ou JS sur une page contenant une vue.

Pour rappel les librairies peuvent être définies dans un thème ou un module.

Utilisation du hook HOOK_views_pre_render.

Dans le .module de votre module :

function MON_MODULE_views_pre_render(\Drupal\views\ViewExecutable $view) {  if ($view->storage->id() === 'front_blog') {    $view->element['#attached']['library'][] = 'theme/swiper-library';    $view->element['#attached']['library'][] = 'theme/univers-js';  }}

 

Par Q__nt_n
Quentin Fonteneau

Obtenir un objet URL à partir de l'alias

Obtenir un objet URL à partir de l'alias
Q__nt_n
lun 22/06/2020 - 10:33

Dans le cadre d'un import où je devais remplir des données pour plusieurs types de contenu (node, taxo etc..), j'ai du me baser sur la seule entrée que j'avais : l'URL de la page.

// Morcellement de l'URL  
$url_parts = explode("/", parse_url($item['new'], PHP_URL_PATH));
// Suppression du langcode
unset($url_parts[1]);
// Reconstruction de l'alias sans le langcode
$alias = implode('/', $url_parts);


$url_object = \Drupal::service('path.validator')->getUrlIfValid($alias);
$route_name = $url_object->getRouteName();
$route_parameters = $url_object->getrouteParameters();

Suite à la récupération de l'objet 'URL', j'ai pu distinguer mes différents cas et faire les traitements adéquats.

Par kgaut
Kevin Gautreau

Drupal 8 & Drupal 9 - Entity Query - Ajouter une condition sur une colonne spécifique

Dans le cadre d'une EntityQuery, il peut être nécessaire parfois de faire une requête sur une colonne spécifique de notre table, autre que le traditionnel « value ».

Rien de bien compliqué, il faut alors le spécifier dans le nom du champ sur lequel on ajoute une condition.

Exemple normal :

// Condition sur la colonne « value » du champ « field type »$query->condition('field_type', 'FETE_ET_MANIFESTATION');

Pour spécifier la colonne, on concatène le nom de la colonne avec le nom du champ avec un point :

// Condition sur la colonne « dateDebut » du champ « field_apidae_dates »$query->condition('field_apidae_dates.dateDebut', $now->format('Y-m-d'), '>');

 

Par kgaut
Kevin Gautreau

Accélérer l'administration de son site drupal avec Makefile

Un Makefile est un fichier contenant des rules, (des fonctions) permettant d’exécuter une suite d'action. Beaucoup utilisé dans les langages compilés pour permettre de gérer la compilation d'un programme, c'est aussi utilisable dans le cadre d'un projet php.

J'ai découvert les Makefile après avoir commencé à utiliser docker pour mes projets web.

Quand on utilise docker pour le php les binaires php (drush, composer, drupal-console...) sont à exécuter dans le container php et non pas sur notre machine hôte.

Ce qui donne des commandes ressemblant à :

docker-compose exec php drush crdocker-compose exec php composer install

au lieu de simples

drush crcomposer install

ça n'est pas la mort, mais un développeur est feignant.

L'ensemble d'images docker docker4drupal propose un Makefile avec des rules permettant d’exécuter drush ou composer plus simplement :

make drush crmake composer install

C'est très pratique, mais on peut aller encore plus loin et écrire nos propres rules en les ajoutant à la suite du fichier. Voici par exemple une rules pour supprimer la base de données et la recréer :

## db-empty	: drop and recreate database.PHONY: db-emptydb-empty:	@docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "DROP DATABASE IF EXISTS $(DB_NAME)"	@echo Database $(DB_NAME) dropped	@docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "CREATE DATABASE $(DB_NAME)"

Un autre exemple pour afficher en continu le contenu du fichier drupal_debug.txt (voir : Drupal - Découvrez la fonction ddm, pour débuguer même en aveugle) :

## dd-tail	: show the tail of drupal-debug.txt file.PHONY: dd-taildd-tail:	tail -f $(LOCAL_TMP_PATH)/drupal_debug.txt

Vous voyez ici l'utilisation de variables, comme $(DB_HOST) qui sont définies dans le fichier .env :

Image

.env variables

À force d'ajouter des rules au fur et a mesure, j'ai finis par en avoir pas mal. J'ai fais un petit boulot de généralisation et tout est maintenant sur un dépôt github : https://github.com/kgaut/drupal-makefile.

L'installation est relativement rapide est simple :

Ajoutez le package à vos dépendances

composer require kgaut/drupal-makefile

Modifiez votre fichier .env et ajoutez les variables nécessaires présentées ici : https://github.com/kgaut/drupal-makefile/blob/master/.env.example

Si vous n'avez pas d'environnement de prod ou de preprod, vous pouvez supprimer les variables correspondantes ou bien les garder pour plus tard.

Enfin, il faudra lier ce nouveau fichier makefile à votre fichier makefile principal, à la racine de votre projet, en ajoutant après la ligne include .env, la ligne suivante :

include vendor/kgaut/drupal-makefile/drupal.mk

Les différentes rules sont présentées ici : https://github.com/kgaut/drupal-makefile#availables-rules

Une que j'utilise régulièrement est : db-prod-import qui fait en fait appel à plein d'autres rules :

Suppression de la base de données local et récréation (via db-empty)
Récupération du dump de base de données le plus récent en prod (via db-prod-get)
Import de ce dump en local (db-import)
Vidage des cache, mises à jour de base de données, import de la configuration et affiche un lien de connexion en tant qu'utilisateur 1 (via db-post-import)

Évidement tout ça est très lié à mon organisation de projet, mais vous pouvez certainement en récupérer des idées ou de l'inspiration.

N'hésitez-pas à suggérer des modifications ou des améliorations !

Personnaliser un export CSV avec Entity Export CSV sur Drupal 8

Le module Entity Export CSV nous permet de mettre en place très rapidement des exports CSV pour n'importe quelle type d'entité de contenu de Drupal 8. Parfois, nous pouvons avoir besoin de personnaliser les exports réalisés, comme exporter 2 informations différentes d'un même champs Entity Reference par exemple. Nous allons découvrir comment procéder pour personnaliser nos exports CSV.

Par Iloofo
Iloofo

Fin de vie de Drupal 7 et 8, êtes-vous prêts ?

Les versions 7 et 8 de Drupal arriveront en fin de vie en novembre 2021.

Qu’entend-on par fin de vie ?

La "fin de vie" annonce qu’il n’y aura plus de mise à jour de sécurité pour les versions en question.
À partir de cette date (novembre 2021), les failles qui seront découvertes et corrigées sur la version 9 ne le seront plus sur les versions 7 et 8.

Votre site sera donc vulnérable aux attaques.

Par Iloofo
Iloofo

Fin de vie de Drupal 7 et 8, êtes-vous prêts ?

Les versions 7 et 8 de Drupal arriveront en fin de vie en novembre 2021.

Qu’entend-on par fin de vie ?

La "fin de vie" annonce qu’il n’y aura plus de mise à jour de sécurité pour les versions en question.
À partir de cette date (novembre 2021), les failles qui seront découvertes et corrigées sur la version 9 ne le seront plus sur les versions 7 et 8.

Votre site sera donc vulnérable aux attaques.

Par kgaut
Kevin Gautreau

Drupal 8 & 9 - Hook Update - Tester si une table existe, la supprimer et la recréer

Pour un projet drupal, j'avais besoin de créer deux tables identiques dans une base de données séparée sur un serveur différent, afin de servir de cache pour un webservice.

Voici le code que j'ai utilisé pour créer ces tables avec un test si les tables existe avant de les récréer (si j'ai besoin de mettre à jour le modèle par exemple).

Définition du schéma de ma table dans le fichier MODULE.install :

# Le nom de cette fonction est personnel, je n'utilise pas le HOOK_schema() icifunction MODULE_schema_db_cache() {  $schema['proposals'] = [    'description' => 'distribProposal',    'fields' => [],    'primary key' => ['id'],    'indexes' => [      'id' => ['id'],      'room_type_code' => ['room_type_code'],    ],  ];   $schema['proposals']['fields']['id'] = [    'description' => 'id',    'type' => 'serial',    'not null' => TRUE,    'unsigned' => TRUE,  ];   $schema['proposals']['fields']['name'] = [    'type' => 'varchar',    'length' => 255,  ];  //Ajout des champs supplémentaires ici}

Création des tables via un hook_update() :

/** * DB cache ws - Creation tables */function MODULE_core_update_8005() {  try {    // Je passe sur une autre base de données définis dans mes settings     // ici : $databases['cache_ws']['default']    Database::setActiveConnection('cache_ws');    // Je récupère le schéma    $db = MODULE_schema_db_cache();    if($schema = Database::getConnection()->schema()) {      // Je veux avoir deux fois la même table afin de passer sur la seconde quand je met à jour la première      $tables = ['proposals_a', 'proposals_b'];      foreach ($tables as $table) {        // Si la table existe déjà je la supprime        if ($schema->tableExists($table)) {          $schema->dropTable($table);        }        // Puis je la recrée        $schema->createTable($table, $db['proposals']);      }    }  }  catch (Exception $e) {    // En cas de soucis je commence par basculer sur la base de donnée par défaut    Database::setActiveConnection();     // Puis je lance une erreur    throw new \Drupal\Core\Utility\UpdateException(t('vacanceole_core_update_8005 error : @message', ['@message' => $e->getMessage()]));  }    // Si tout s'est bien passé je repasse sur la base de données par défaut.  Database::setActiveConnection();  return t('Tables proposals_a and proposals_b successfully created');}

Pour bien faire je devrais ajouter l'installation de mes tables dans un hook install, en faisant appel à la fonction que je viens de définir :

function MODULE_install() {  MODULE_update_8005();}

 

Par admin

Drupal 9 est là !

Logo Drupal

5 ans après la version 8, Drupal 9 est sorti en version stable ce mercredi 3 juin 2020.

Les nouveautés sont nombreuses depuis Drupal 8.0 : gestion des médias, éditeur de mise en page, gestion des flux de publication, intégration avec Composer...

Une évolution dans la continuité...

...plutôt qu'une révolution.

Drupal 7 -> Drupal 8 & Drupal 8 -> Drupal 9 -> Drupal 10

Contrairement au passage de Drupal 7 à Drupal 8, le passage de Drupal 8 à Drupal 9 sera très simple.

En effet, depuis Drupal 8.0.0, la gestion du code a changé :

  • De nouvelles fonctionnalités sont ajoutées entre les versions intermédiaires (8.1.* => 8.2.*)
  • Entre ces mêmes versions intermédiaires, certaines fonctions ou méthodes de l'API Drupal peuvent être signalées comme « dépréciées » (deprecated) mais restent fonctionnelles.
  • Ce sont ces dépréciations qui sont aujourd'hui supprimées dans Drupal 9

Pour faire simple : Drupal 9.0 = Drupal 8.9 - Toutes les fonctions dépréciées.

API Drupal 8.9 et API Drupal 9.0

De nombreux modules sont déjà compatibles et de nombreux outils existent pour rendre vos modules personnalisés compatibles avec la nouvelle version du CMS.

Questions / Réponses

Quels sont les prérequis pour Drupal 9 ?

  • PHP 7.3 minimum
  • MySQL 5.7.8 minimum
  • Drush 10
  • Composer grandement recommandé !

Je viens de commencer un projet sous Drupal 8. Faut-il que je recommence tout sous Drupal 9 ?

Non, vous pourrez facilement mettre à jour le core de Drupal vers la version 9 une fois que tous les modules tiers que vous utilisez seront compatibles.

Comment tester Drupal 9 ?

Avec composer c'est très simple et cela se fait en deux lignes :

composer create-project drupal/recommended-project:9.0.0 drupal9<br />php drupal9/web/core/scripts/drupal quick-start demo_umami

Cela vous lancera l'installation d'un drupal 9 avec un site de démo présentant des recettes de cuisite.

Comment migrer mon site Drupal 8 vers Drupal 9 ?

  1. Assurez-vous que votre hébergeur / serveur répond bien aux prérequis pour Drupal 9 (voir plus haut)
  2. Faites les mises à jour du core, la migration vers Drupal 9 ne sera possible que pour les version 8.8.* et supérieures.
  3. Faites les mises à jour des modules tiers en vous assurant que les modules sont compatibles avec Drupal 9.
  4. Mettez votre code custom en conformité avec l'API de Drupal en supprimant les appels dépréciés.
  5. Mettez le core à jour.

« et voila ! »

Comment savoir si un module est compatible avec Drupal 9 ?

Cela peut-être vérifié de plusieurs manière. Pour commencer sur la page du projet sur drupal.org, dans les informations de téléchargement :

Drupal 9 project

Aussi vous pourrez trouver l'information équivalente sur le fichier .info.yml du projet.

Enfin, vous pouvez faire des recherche directement sur le site https://dev.acquia.com/drupal9/deprecation_status

J'ai un site Drupal 7, dois-je passer par Drupal 8 avant de migrer sous Drupal 9 ?

Pas forcement, via l'API de migration (Migrate API) il est possible de migrer un Drupal 7 directement sous Drupal 9.

Quand s'arrêtera le support de Drupal 7 ? De Drupal 8 ?

Le support de Drupal 7 devait s'arrêter aujourd'hui, il a finalement été étendu à la fin 2021, le support de Drupal 8 s’arrêtera aussi au même moment.

J'ai un site Drupal 7 qui ne peut pas être mis à jour, que se passera-t-il à la fin du support ?

Vous ne recevrez plus de mise à jour de sécurité pour votre site, il sera donc vulnérable.

Un programme de support payant, assuré par des entreprises tierces sera mis en place.

Quand Drupal 9.1 sortira-t-il ?

Drupal devrait garder les cycles de 6 mois mis en place depuis la version 8.0, théoriquement la version 9.1 devrait sortir le 2 décembre 2020.

Quand Drupal 10 sortira-t-il ?

Toujours en théorie, Drupal 10 sortira au deuxième trimestre 2022.

Plus d'informations

Toutes les informations sur Drupal 9 : https://www.drupal.org/9

Migrer de Drupal 8 à Drupal 9 : https://www.drupal.org/about/9/from-8

Statut des modules : https://dev.acquia.com/drupal9/deprecation_status


Vous avez des questions ? N'hésitez-pas à les poser sur le Slack de la communauté francophone ou sur Twitter avec le hashtag : #drupal9FR. Nous les ajouterons à cet article si nous pouvons y répondre.

Par admin

Drupal 9 est là !

Logo Drupal

5 ans après la version 8, Drupal 9 est sorti en version stable ce mercredi 3 juin 2020.

Les nouveautés sont nombreuses depuis Drupal 8.0 : gestion des médias, éditeur de mise en page, gestion des flux de publication, intégration avec Composer...

Une évolution dans la continuité...

...plutôt qu'une révolution.

Drupal 7 -> Drupal 8 & Drupal 8 -> Drupal 9 -> Drupal 10

Contrairement au passage de Drupal 7 à Drupal 8, le passage de Drupal 8 à Drupal 9 sera très simple.

En effet, depuis Drupal 8.0.0, la gestion du code a changé :

  • De nouvelles fonctionnalités sont ajoutées entre les versions intermédiaires (8.1.* => 8.2.*)
  • Entre ces mêmes versions intermédiaires, certaines fonctions ou méthodes de l'API Drupal peuvent être signalées comme « dépréciées » (deprecated) mais restent fonctionnelles.
  • Ce sont ces dépréciations qui sont aujourd'hui supprimées dans Drupal 9

Pour faire simple : Drupal 9.0 = Drupal 8.9 - Toutes les fonctions dépréciées.

API Drupal 8.9 et API Drupal 9.0

De nombreux modules sont déjà compatibles et de nombreux outils existent pour rendre vos modules personnalisés compatibles avec la nouvelle version du CMS.

Questions / Réponses

Quels sont les prérequis pour Drupal 9 ?

  • PHP 7.3 minimum
  • MySQL 5.7.8 minimum
  • Drush 10
  • Composer grandement recommandé !

Je viens de commencer un projet sous Drupal 8. Faut-il que je recommence tout sous Drupal 9 ?

Non, vous pourrez facilement mettre à jour le core de Drupal vers la version 9 une fois que tous les modules tiers que vous utilisez seront compatibles.

Comment tester Drupal 9 ?

Avec composer c'est très simple et cela se fait en deux lignes :

composer create-project drupal/recommended-project:9.0.0 drupal9<br />php drupal9/web/core/scripts/drupal quick-start demo_umami

Cela vous lancera l'installation d'un drupal 9 avec un site de démo présentant des recettes de cuisite.

Comment migrer mon site Drupal 8 vers Drupal 9 ?

  1. Assurez-vous que votre hébergeur / serveur répond bien aux prérequis pour Drupal 9 (voir plus haut)
  2. Faites les mises à jour du core, la migration vers Drupal 9 ne sera possible que pour les version 8.8.* et supérieures.
  3. Faites les mises à jour des modules tiers en vous assurant que les modules sont compatibles avec Drupal 9.
  4. Mettez votre code custom en conformité avec l'API de Drupal en supprimant les appels dépréciés.
  5. Mettez le core à jour.

« et voila ! »

Comment savoir si un module est compatible avec Drupal 9 ?

Cela peut-être vérifié de plusieurs manière. Pour commencer sur la page du projet sur drupal.org, dans les informations de téléchargement :

Drupal 9 project

Aussi vous pourrez trouver l'information équivalente sur le fichier .info.yml du projet.

Enfin, vous pouvez faire des recherche directement sur le site https://dev.acquia.com/drupal9/deprecation_status

J'ai un site Drupal 7, dois-je passer par Drupal 8 avant de migrer sous Drupal 9 ?

Pas forcement, via l'API de migration (Migrate API) il est possible de migrer un Drupal 7 directement sous Drupal 9.

Quand s'arrêtera le support de Drupal 7 ? De Drupal 8 ?

Le support de Drupal 7 devait s'arrêter aujourd'hui, il a finalement été étendu à la fin 2021, le support de Drupal 8 s’arrêtera aussi au même moment.

J'ai un site Drupal 7 qui ne peut pas être mis à jour, que se passera-t-il à la fin du support ?

Vous ne recevrez plus de mise à jour de sécurité pour votre site, il sera donc vulnérable.

Un programme de support payant, assuré par des entreprises tierces sera mis en place.

Quand Drupal 9.1 sortira-t-il ?

Drupal devrait garder les cycles de 6 mois mis en place depuis la version 8.0, théoriquement la version 9.1 devrait sortir le 2 décembre 2020.

Quand Drupal 10 sortira-t-il ?

Toujours en théorie, Drupal 10 sortira au deuxième trimestre 2022.

Plus d'informations

Toutes les informations sur Drupal 9 : https://www.drupal.org/9

Migrer de Drupal 8 à Drupal 9 : https://www.drupal.org/about/9/from-8

Statut des modules : https://dev.acquia.com/drupal9/deprecation_status


Vous avez des questions ? N'hésitez-pas à les poser sur le Slack de la communauté francophone ou sur Twitter avec le hashtag : #drupal9FR. Nous les ajouterons à cet article si nous pouvons y répondre.

Revue de presse

Mais également sur

Par Q__nt_n
Quentin Fonteneau

Exporter/Importer une base de données avec Drush

Exporter/Importer une base de données avec Drush
Q__nt_n
jeu 28/05/2020 - 11:11

Pour exporter sa base de données :

drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql

Pour importer sa base données :

gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc

Thématique

Par Christophe MOLLET
Christophe Mollet

Comment créer un module avec Drupal 8 ?

Un module est un ensemble de fichiers PHP, Javascript et/ou CSS qui étendent les fonctionnalités du site et en ajoutent de nouvelles

Nous allons voir dans cet article comment créer un module avec Drupal 8.

Par kgaut
Kevin Gautreau

Drupal 8 - Modifier les onglets (local tasks)

Voici comment modifier un onglet Local Task dans le langage drupal, en utilisant le hook HOOK_local_tasks_alter:

function MONMODULE_local_tasks_alter(&$local_tasks) {  $local_tasks['entity.user.edit_form']['title'] = 'Modifier mes informations';}

La clé est définie dans la déclaration de l'élément :

Image

Drupal local task

 

Ici uniquement le titre est changé,il est possible de modifier les autres propriété, comme l'ordre (weight), la destination de l'élément...

Par Q__nt_n
Quentin Fonteneau

Exporter/Importer une base de données avec Drush

Exporter/Importer une base de données avec Drush
Q__nt_n
jeu 07/05/2020 - 12:26

Thèmes :

Pour exporter sa base de données :

drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql

Pour importer sa base données :

gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc

 

Pages