Planète

Par liber_t
Ines WALLON

Automatiser le deploiement de drupal avec gitlab

Prérequis à mettre en place sur votre serveur

1) Avoir drush d'installé sur le serveur de production

2) Créer une clef ssh pour l'utilisateur apache et la rajouter sur votre serveur gitlab

3) Editer le virtualhost de drupal

Par admin

Idée cadeau pour Noël !

C'est bientôt Noël et la littérature traitant de Drupal en Français est encore trop rare, alors pourquoi ne pas soutenir l'initiative de Frédéric Simonet en mettant sous le sapin son livre "WordPress, Joomla, Drupal : Comprendre avant de s'engager" ?

Formateur depuis 2007 dans le domaine de la gestion de de contenu, Frédéric a écrit cet ouvrage qui permet de se faire une idée assez juste des forces et faiblesses des 3 CMS open source qui tiennent le haut du pavé en nombre de plateformes déployées.

Après une présentation générale des 3 outils, la première partie propose analyse systématique et détaillée de leurs performances sur des critères tels que l'édition des contenus, l'optimisation du référencement ou encore la sécurité. Elle se poursuit par un comparatif des coûts d'intégrations, basé sur un découpage très intéressant et précis en micro-tâches nécessaires à la mise en place d'un site web.

La seconde partie, la plus conséquente, décrit en détail les micro-tâches en question et vous permettra de réaliser un premier site après avoir décrit comment s'organise un projet web. Cette partie est très détaillée et prend le parti d'être didactique, mais ne fera pas du lecteur un expert dans les 3 technologies (on regrettera, par exemple, l'absence du module Pahtauto sur Drupal).

La lecture de "WordPress, Joomla, Drupal : Comprendre avant de s'engager" vous donnera une excellente vision des capacités des 3 outils. Attention cependant, en ce qui concerne Drupal, c'est la version 7 qui est détaillée dans la partie pratique et tout ce qui y est dit n'est plus toujours vrai dans Drupal 8 (plus besoin d'installer un module Wysiwyg, par exemple). Il semble également dommage d'être resté essentiellement sur des considérations techniques et fonctionnelles, et de ne pas avoir comparé d'avantage les écosystèmes (contributeurs, intégrateurs) qui font vivre ces logiciels open source.

Ces réserves n'enlèvent rien à la qualité d'un comparatif qui convient parfaitement à un lecteur qui souhaite choisir le bon outil pour créer lui-même son site.

Le trouver sur Amazon

Tags : 
Par liber_t
Ines WALLON

Comment afficher des champs si une checkbox est coché ?

Il peut être intéressant d'afficher des champs supplémentaires si une checkbox est coché dans un formulaire.

Pour ce faire nous allons créer un type checkbox, un type container et en exemple un type url ainsi qu'un textfield :

Par liber_t
Ines WALLON

Automatiser la création d'un site Drupal sur sa machine de dev à l'aide d'Ansible

Il peut être intéréssant de pouvoir créer à la voler des sites Drupal sur sa machine de dev.

Cet article n'a pas pour vocation de vous faire un cours sur Ansible mais de vous montrer un example de ce que j'ai fait pour me faciliter la vie.

https://gitlab.famillewallon.com/ansible-playbook/drupal-site-install

Tout d'abord voici l'arborescence de mon playbook

Appliquer un taux de TVA à un produit avec Drupal commerce 2

Drupal commerce 2 permet désormais nativement de gérer les différentes taxes et TVA à appliquer sur une boutique en ligne, quelque soit son pays et leurs règles respectives en cette matière. La plupart des modules contribués permettant de gérer ces éléments sur Commerce 1.x ne sont donc plus nécessaires. Découvrons comment utiliser le concept des Resolver de Drupal commerce 2.x pour définir le taux de TVA à appliquer sur différents produits.

Par kgaut
Kevin Gautreau

Drupal 8 - Rediriger l'accès aux pages d'un type de contenu en particulier

Ça vient à contresens du paradigme des noeuds, mais parfois on souhaite que les pages de détail d'un noeud d'un type de contenu en particulier ne soient pas accessible.

Avec quelques adaptation, ceci peut aussi fonctionner pour les pages de terme de taxonomie.

Voici comment faire :

1ère étape, déclarer un services dans mon_module.services.yml

  1. services:
  2.   mon_module.node_cp_redirect:
  3.   class: Drupal\mon_module\EventSubscriber\NodeCPRedirect
  4.   tags:
  5.   - { name: event_subscriber }

2ème étape, créer l'event subscriber: src/EventSubscriber/NodeCPRedirect.php dans le dossier de mon module.

Ici je vais chercher à rediriger tous les noeuds de type « communiques_de_presse » vers la vue « view.front_communiques_de_presse.page », mais cela peut-être évidement n'importe quelle route.

  1.  
  2. namespace Drupal\mon_module\EventSubscriber;
  3.  
  4. use Drupal\Core\Url;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9.  
  10. class NodeCPRedirect implements EventSubscriberInterface {
  11.  
  12. public static function getSubscribedEvents() {
  13. return [KernelEvents::REQUEST => [['redirectionCommuniquesPresse']]];
  14. }
  15.  
  16. /**
  17.   * Redirection des contenus de type communique_de_presse vers la vue de listing.
  18.   */
  19. public function redirectionCommuniquesPresse(GetResponseEvent $event) {
  20. $request = $event->getRequest();
  21.  
  22. if ($request->attributes->get('_route') !== 'entity.node.canonical') {
  23. return;
  24. }
  25. if ($request->attributes->get('node')->getType() !== 'communique_de_presse') {
  26. return;
  27. }
  28. $response = new RedirectResponse(Url::fromRoute('view.front_communiques_de_presse.page')->toString(), 301);
  29. $event->setResponse($response);
  30. }
  31.  
  32. }

 

Par kgaut
Kevin Gautreau

Drupal 8 - PHPMyAdmin - corriger l'erreur « Syntax error near '`value`»

Parfois on a pas le choix et l'on est obligé de passer par PHPMyAdmin pour récupérer un export de base de données.

Avec un dump de Drupal 8, lors de l'import, on peut tomber sur l'erreur suivante :

Requête SQL :

CREATE TABLE IF NOT EXISTS `key_value` ( `collection` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.' `value` longblob NOT NULL COMMENT 'The value.', PRIMARY KEY (`collection`,`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Generic key-value storage table. See the state system for'

MySQL a répondu: Documentation

#1064 - Erreur de syntaxe près de '`value` longblob NOT NULL COMMENT 'The value.',
  PRIMARY KEY (`collection`,`nam' à la ligne 3

C'est visiblement du à un bug dans une certaine version de PHPMyAdmin.

Il est possible de corriger cette erreur en modifiant manuellement le dump en deux étapes.

La première, remplacez le bloc suivant :

  1. CREATE TABLE IF NOT EXISTS `key_value` (
  2. `collection` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.'
  3. `value` longblob NOT NULL COMMENT 'The value.',
  4. PRIMARY KEY (`collection`,`name`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Generic key-value storage table. See the state system for';

par

  1. CREATE TABLE IF NOT EXISTS `key_value` (
  2. `collection` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.',
  3. `name` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The key of the key-value pair. As key is a SQL reserved keyword, name was chosen instead.',
  4. `value` longblob NOT NULL COMMENT 'The value.',
  5. PRIMARY KEY (`collection`,`name`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Generic key-value storage table. See the state system for';

Seconde étape, supprimez le bloc suivant :

  1. ALTER TABLE `key_value`
  2. ADD `name` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The key of the key-value pair. As KEY is a SQL reserved keyword, name was chosen instead.';

Une fois cela fait, vous pourrez alors importer le dump sans soucis.

Plus d'informations sur ce problème en anglais : https://www.drupal.org/node/2496331

Par GoZ
Fabien CLEMENT

Drupal Commerce 2.x - Adjustments: L'ajustement de prix

Drupal Commerce 2.x - Adjustments: L'ajustement de prix

Avec Drupal Commerce 2.x arrive une nouvelle notion: les Adjustments.

Qu'est ce que l'adjustment ?

L'adjustment, ou ajustement en français, permet de modifier le montant d'une ligne de commande ou d'une commande, que ce soit en le diminuant ou en le réduisant.

Deux exemples d'ajustements tarifaire intégrés au fonctionnement du core:

GoZ
lun 04/12/2017 - 13:21

Par GoZ
Fabien CLEMENT

Drupal Commerce 2.x - Rendre un prix dynamique ou calculé via un service tiers

Drupal Commerce 2.x - Rendre un prix dynamique ou calculé via un service tiers

Dans le cas d'un commerce BtoB ou métier, les règles de prix sont souvent plus compliquées qu'un simple prix par produit. Dans ce cas, deux choix possibles:

  • Le métier est dans un outil (CRM ou autre) externe.
  • Le métier et donc la règle de calcul doit être gérée par le site.

Dans les 2 cas, Drupal Commerce 2.x offre les mécanismes pour facilement intégrer ces règles métier pour définir le prix unitaire de notre produit.

GoZ
ven 01/12/2017 - 12:55

Par admin

Open Source Summit 2017

Open Source Summit est la fusion de 2 événements (Solutions linux et l'Open world forum) et se déroulera le 6 et 7 décembre 2017 au DOCK PULLMANN à La Plaine St-Denis (Paris)

logo open source summit

Ces 2 anciens événements, l'association Drupal France et Francophonie (DrupalFR) était présent et c'est dans la logique que nous serons présent.

Ce rendez-vous se découpe de différentes manières, avec des conférences, des ateliers, et une partie exposition. Le dernier espace sera coupé en 2 parties avec une partie professionnel et une autre partie village associatif.

Stand :
L'Association Drupal France et Francophonie (DRUPALFR) sera dans la partie village associatif et recherche des bonnes volontés pour venir nous aider à tenir le stand pour parler de Drupal et aussi venir nous voir.

  • Si vous souhaitez venir nous rendre visite, vous serez les bienvenus sur le stand A31.
  • Si vous voulez tenir le stand avec moi, nous mettons à disposition un Doodle si vous souhaitez venir nous aider (par demi journée)

Formulaire de présence :
Agenda pour votre présence

Horaire du salon

  • Mercredi 6 décembre : 8h30-19h00
  • Jeudi 7 décembre : 8h45-18h00

Lieu du salon

DOCK PULLMANN
50, av. du Président Wilson
93200 La Plaine St-Denis

Informations pratiques

Demander un badge pour entrée

Responsable et contact pour le stand : Christophe Villeneuve

Plus nous serons nombreux, moins de temps vous serez bloqué.

Mettre en place des processus métier complexes avec State machine sur Drupal 8

Nous avons vu dans un précédent billet comment mettre en place un processus de publication sur Drupal 8 avec les modules Content moderation et Workflows. Nous allons aborder ici une problématique similaire mais en s'appuyant cette fois sur le module State machine, module qui va nous permettre de mettre en place un ou plusieurs processus métier sur n'importe quelle entité de Drupal.

Par kgaut
Kevin Gautreau

Drupal 8 - Views - Récupérer un formulaire exposé

Pour un besoin spécifique, il fallait que je récupère un formulaire exposé de views pour l'afficher ailleurs.

Il fallait en fait qu'à un endroit j'affiche les filtres exposés et à un autre le tri exposé.

J'ai donc créé un bloc, qui récupère ce formulaire, masque un champ.

Voici donc comment récupérer un formulaire exposé :

  1. $view_name = 'ma_vue';
  2. $view_display = 'page';
  3.  
  4. $view = \Drupal\views\Views::getView($view_name);
  5. $view->initHandlers();
  6. $view->setDisplay($view_display);
  7. $form_state = new \Drupal\Core\Form\FormState();
  8. $form_state->setFormState([
  9. 'view' => $view,
  10. 'display' => $view->display_handler->display,
  11. 'exposed_form_plugin' => $view->display_handler->getPlugin('exposed_form'),
  12. 'method' => 'get',
  13. 'rerender' => TRUE,
  14. 'no_redirect' => FALSE,
  15. 'always_process' => TRUE,
  16. ]);
  17.  
  18. // Ici j'ajoute une info pour connaitre le contexte si le formulaire est altéré
  19. // afin de distiguer cette instance de formulaire de la « normale ».
  20. $form_state->addBuildInfo('exposed_block', TRUE);
  21.  
  22. $form = \Drupal::formBuilder()->buildForm('Drupal\views\Form\ViewsExposedForm', $form_state);
  23.  
  24. // Je masque le champs qui ne m'intéresse pas
  25. $form['sort_by']['#access'] = FALSE;

Dans le cadre d'un HOOK_form_alter je peux récupérer l'information "exposed_block" de la façon suivante :

<span class="re0">$form_state</span><span class="sy0">-></span><span class="me1">getBuildInfo</span><span class="br0">(</span><span class="br0">)</span><span class="br0">[</span><span class="st_h">'exposed_block'</span><span class="br0">]</span>

 

 

Par Artusamak
Julien Dubois

Les nouveautés de Drupal 8.4.0

Les nouveautés de Drupal 8.4.0
admin
jeu 16/11/2017 - 10:53

Toujours dans les temps, la nouvelle version mineure de Drupal, 8.4.0, est disponible depuis le 4 octobre 2017. Pour la première fois depuis deux ans, cette mise à jour contient des éléments qui pourront casser la rétrocompatibilité de certains sites.

null

Corps

Toujours dans les temps, la nouvelle version mineure de Drupal, 8.4.0, est disponible depuis le 4 octobre 2017. Pour la première fois depuis deux ans, cette mise à jour contient des éléments qui pourront casser la rétrocompatibilité de certains sites. Comme pour la sortie des précédentes versions mineures de Drupal, et notamment la mise à jour vers Drupal 8.3.0, cet article vous dévoilera les détails des changements apportés ces six derniers mois.

Attention à la rétro-compatibilité des dépendances (librairies) !

La technologie progresse et l'équipe de maintenance du cœur doit faire des choix pour concentrer les efforts de la communauté sur des tâches à valeur ajoutée pour l'avenir. Parfois, il s'agit simplement de faire des arbitrages entre des fonctionnalités fondamentales pour l'avenir et la compatibilité avec des choix ou projets passés. Pour la première fois depuis la sortie de Drupal 8, cette version mineure introduit des changements qui pourraient poser des problèmes de compatibilité avec certains projets existants. Il est donc demandé à toutes les personnes en charge de la maintenance d'un site Drupal 8 d'être extrêmement vigilantes lors du passage à la 8.4.

Arrêt du support de Internet Explorer 9 et 10

Depuis avril 2017 Microsoft a arrêté le support de Internet Explorer 9 et 10. Ces vielles versions ont longtemps été la plaie des intégrateurs et, pour un outil comme Drupal, leur support représentait un coût assez important alors que le nombre d'utilisateurs concernés ne cessait de baisser. Officiellement, à partir de la 8.4.0, ces versions ne sont donc plus supportées. Cela signifie que les sites continueront de fonctionner comme précédemment mais qu'aucun effort supplémentaire ne sera alloué à cette compatibilité à l'avenir. Les hacks en place pour faire fonctionner certaines choses pour ces versions seront progressivement retirés à partir de Drupal 8.5.

Mise à jour majeure de Symfony et jQuery

Que vous soyez plutôt back ou front, pas de répit avec cette nouvelle version ! Symfony passe à la version 3.2.8+ (au lieu de 2.8+) et jQuery à la version 3.2.1 (au lieu de 2.2.4). Bien que ces deux versions aient une forte compatibilité descendante, si certaines de vos fonctionnalités s'appuient sur des fonctions dépréciées, elles cesseront probablement de fonctionner lors de la mise à jour. Cela a été le cas pour nous sur le menu déroulant d'un projet, par exemple. 

En cas de besoin, vous pouvez consulter le rapport de changement de la mise à jour de Symfony dans le cœur ou le guide de mise à jour de jQuery.

Rupture de compatibilité avec Drush

Du fait des divers changements dans les dépendances et dans la façon dont le cœur gère quelques services, Drush 8.1.14 et inférieur n'est pas compatible avec Drupal 8.4.0 et supérieurs. Si votre Drush est installé localement au projet (il devrait), un simple composer update devrait résoudre le problème. Dans le cas contraire, référez vous à la documentation officielle.

Attention, indépendamment de l'évolution du cœur de Drupal, Drush évolue également vers une nouvelle version majeure, Drush 9. Cette dernière est une réécriture complète de Drush et apporte son lot de nouveautés très intéressantes (on en parlera dans un autre article). Cependant, si vous avez des commandes drush personnalisées, des alias de sites ou des scripts qui utilisent cet outil de façon intensive, prenez votre temps pour monter de version car vous aurez un peu de travail pour adapter votre usage.

Ça bouge chez les expérimentaux !

Si vous avez suivi un peu nos articles concernant les nouveautés de Drupal 8, vous saurez déjà que les versions mineures sont l'occasion d'introduire de nouvelles fonctionnalités sous la forme de modules expérimentaux. Pour la version 8.4, nul nouveau module expérimental mais de nombreux changements.

Les modules Datetime Range, Inline Form Errors, Layout Discovery, Media et Workflows, sont désormais considérés comme stables et plus expérimentaux.

Media, n'est qu'un support pour les modules contribués et ne propose aucune fonctionnalité de lui même. Il est caché dans l'interface de gestion des modules pour éviter les confusions mais sera automatiquement activé en cas de besoin. Si vous utilisiez le module contribué Media Entity avec la précédente version de Drupal, sa version 2.0 contient un chemin de migration obligatoire pour transiter vers le module du cœur.

Workflows, en passant en version stable, a procédé à quelques derniers changements de fond. Selon votre usage du module (surtout si vous l'utilisez autrement qu'avec Content Moderation), vous devriez consulter le rapport de changement associé pour adapter votre code au nouveau fonctionnement. Si vous utilisez Content Moderation, qui a lui aussi subi son lot d'évolutions, vous devriez jeter un œil à son chemin de mise à jour non officiel qui vous permettra de continuer à vous en servir sans altérer vos données.

Migrate, Migrate Drupal et Migrate Drupal UI continuent leur progression vers le support complet d'un chemin de migration de Drupal 6 ou 7 vers Drupal 8. Par exemple, les champs date et node_reference de Drupal 6 pourront désormais être migrés vers Drupal.

Field Layout, dont nous avons détaillé le fonctionnement lors de la précédente mise à jour, a vu quelques corrections de bug mais pas de changement fondamental. Malgré son intérêt fonctionnel, il ne lui reste plus que quelques mois de période probatoire avant d'être éjecté du cœur pour retourner dans le mode des modules contribués.

Settings Tray et Place Blocks continuent leur progression. Le premier s'offre une version beta et pourrait donc accéder à la stabilité à la prochaine version mineure. Le second, lui, va progressivement disparaître pour être absorbé dans le module Block du cœur lors du passage à la 8.5 si tout se déroule comme prévu.

Évolutions de l'interface

Suite à des tests d'utilisabilité auprès d'un large panel d'utilisateurs finaux, il est apparu que le bouton déroulant était trop déroutant. La décision a donc été prise de revenir à un bouton simple doublé d'une case à cocher pour gérer la publication. Dans le cas de l'utilisation du module Workflows, la case à cocher est remplacée par le widget de gestion des états.

Évolution des boutons de publication de contenu entre Drupal 8.3 et 8.4.

Autre amélioration plus mineure : le choix du fuseau horaire dans le compte utilisateur se fait désormais via un menu déroulant groupé par continent et classé par ordre alphabétique (au lieu du classement par décalage horaire qui était utilisé auparavant).

Amélioration des performances

Afin d'adresser des problèmes de tables de cache grossissant jusqu'à atteindre plusieurs Gigas sur certains projets, une option a été ajoutée pour pouvoir poser une limite, par entrepôt de cache, au nombre d'enregistrements pouvant coexister. Cette limite, fixée par défaut à 5000 entrées, peut être ajustée en fonction des besoins du projet très facilement. Par exemple :

$settings['database_cache_max_rows']['bins']['cache_config'] = 500;

De plus, le temps maximal durant lequel un formulaire est conservé dans le cache avant d'avoir été soumis est désormais également configurable. Par défaut, cette durée est de 6 heures mais sur la plupart des sites, une durée bien plus courte est largement suffisante.

Enfin, parmi les autres améliorations, une réécriture du système de gestion des messages de statut permet une économie d'environ 10% de performances sur les pages qui ne contiennent aucun message.

 

Si vous voulez en savoir plus, vous pouvez lire le résumé complet des modifications apportées par la version 8.4.0 de Drupal sur le site officiel de Drupal.

 

 

Photo de couverture © Dominic Alves, retouchée par Happyculture.

Catégories
Développement
Drupal
Drupal 8
Tags
cache
rétro compatibilité
media
Par GoZ
Fabien CLEMENT

Récupérer le nom de la table d'un champ

Récupérer le nom de la table d'un champ

Avec Drupal 8, non seulement nous avons de nouveau un champ propre à chaque type d'entité, mais en plus dans le cas où le nom du champ dépasse un certain nombre de caractères, son nom de table est composé d'un hash.

Dans le cas où l'on aurait besoin d'accéder directement à cette table, voici un morceau de code qui permet de retrouver dynamiquement le nom de la table.

GoZ
mar 14/11/2017 - 11:10

Par kgaut
Kevin Gautreau

Drupal 8 - Views - Changer le titre d'une vue en fonction du nombre de résultats

Utile dans le cadre d'une vue affichant des résultats d'une recherche via Search API :

  1. function MONMODULE_views_post_render(\Drupal\views\ViewExecutable $view) {
  2. if($view->storage->id() === 'NOM_MACHINE_VUE' && $view->current_display === 'NOM_MACHINE_AFFICHAGE') {
  3. $view->setTitle($view->getTitle() . ' (' . count($view->result) . ')');
  4. }
  5. }

 

Pages