Planète

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Template - Spécifier un thème spécifique

Quand un template est appelé via un « reder array », le template va être cherché en priorité dans le thème actif, puis dans le module qui déclare ce template.

Dans certains cas, cela peut poser problème : Si un template peut-être appelé dans un contexte back ou front, les thèmes sont la plupart du temps différents. La solution de feignant pourrait être de dupliquer ce template dans les deux thèmes. Mais c'est évidement pas une bonne solution.

Dans la déclaration du template on peut spécifier où trouver le template en question :

  1. $themes['xml_sitemap'] = [
  2. '#template' => 'xml-sitemap',
  3. 'path' => drupal_get_path('theme', 'mon_theme_back') . '/templates',
  4. 'variables' => [
  5. 'urls' => [],
  6. ],
  7. ];

Ainsi peut importe si mon template est appelé depuis le front ou depuis le back ça sera toujours le fichier :

themes/custom/mon_theme_back/templates/xml-sitemap.html.twig qui sera utilisé.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Personnaliser le rendu d'un formulaire sous Drupal 8

Lors d'une manipulation de formulaire, il est assez fréquent de vouloir la main sur la structure HTML. Par défaut les champs s'affichent les uns en dessous des autres avec uniquement le balisage des éléments du formulaire.

Pour gérer facilement la structure HTML d'un Form sous Drupal 8, il faut se tourner vers les thèmes ...

Par KarimB
Karim Boudjema
Je suis Karim Boudjema ou KarimB en ligne. Je suis belge, développeur Drupal et aussi administrateur d'entreprises. Je vis pour l'instant à Cochabamba, en Bolivie. Quand j'ai découvert Drupal 4.7 en 2008 (et oui… il y a 10 ans), j'ai tout suite senti que ce serait un changement important dans le monde du développement web. Et ce fut le cas!

VideoDrupal.org: Un nouveau site de vidéos tutoriels de Drupal

Après trois mois de dur labeur, surtout la nuit et les weekends, nous avons finalement lancé la première version de VideoDrupal.org (beta 1.0), une mashup supervisée de vidéos et tutoriels de Drupal publiées sur Youtube afin de les rendre plus accessibles pour tout un chacun que ce soit à des fins personnelles, éducatives ou professionnelles.

Pour cette année 2019, je m'étais fixés trois objectifs : améliorer mon anglais, trouver un job dans une "vraie" agence Drupal et lancé ce site pour la communauté. Donc, j'ai déjà atteint un de mes objectifs. L'année commence bien ! Honnêtement, je pense que c'était le plus simple à atteindre. Améliorer  mon anglais et trouver une agence tournée vers la communauté Drupal, sera sans doute plus difficile. Mais je m'y attache ! Et sérieusement...

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Gestion du titre de page

Le titre d'une page est capitale pour le référencement et l'intérêt que vous susciterez auprès de vos visiteurs. Sous Drupal, les titres des pages affichant des entités de contenu sont gérés automatiquement grâce au champ 'title'. Ce billet va traiter de la gestion des titres des autres types de pages.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Promotion des autres blogs Drupaliste

Pour ce premier billet de blog, j'ai envie de faire la promotion des blogs de drupalistes. À force de lire des articles de ces personnes j'ai eu envie à mon tour, d'en écrire afin d'essayer d'apporter un peu plus de contenu francophone concernant Drupal.
Voici les blogs que je fréquente et que je lis dès qu'un nouvel article sort.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Le titre d'une

Le titre d'une page est capitale pour le référencement et l'intérêt que vous susciterez auprès de vos visiteurs. Sous Drupal, les titres des pages affichant des entités de contenu sont gérés automatiquement grâce au champ 'title'. Ce billet va traiter de la gestion des titres des autres types de pages.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Pour ce premier

Pour ce premier billet de blog, j'ai envie de faire la promotion des blogs de drupalistes. À force de lire des articles de ces personnes j'ai eu envie à mon tour, d'en écrire afin d'essayer d'apporter un peu plus de contenu francophone concernant Drupal.
Voici les blogs que je fréquente et que je lis dès qu'un nouvel article sort.

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Entité - Champ de base « texte long avec résumé »

Voici comment ajouter un champ texte formaté avec résumé à un type d'entité :

  1. $fields['synospis'] = BaseFieldDefinition::create('text_with_summary')
  2. ->setLabel(t('Synopsis'))
  3. ->setSetting('text_processing', TRUE)
  4. ->setDisplayConfigurable('view', TRUE)
  5. ->setDisplayConfigurable('form', TRUE)
  6. ->setTranslatable(TRUE);

À noter que j'ai maintenant pris l'habitude de ne plus configurer les options d'affichage en mode formulaire et front dans mon type d'entité, mais je le fais directement en backoffice du site.

Voir des exemples d'affichages sur un texte long.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Changer le thème de Drupal en fonction d'un contexte

Drupal propose par défaut deux thèmes aux utilisateurs. Le thème général du site qui peut être Bartik, Unami (Drupal Core), un thème de la communauté ou votre thème personnel. Puis il y a le thème de l'administration, qui est souvent le thème Seven présent dans le cœur de Drupal. Il est donc possible de demander à ce que tel ou tel thème soit utilisé lors du rendu. Voyons ça un peu plus précisément ...

Générer un sommaire automatique avec Drupal 8

La génération d'un sommaire automatique pour des articles relativement long est un besoin récurrent en matière de publication de contenu. Un sommaire apporte une meilleure visibilité pour le lecteur, et un moyen efficace pour naviguer au sein d'un article dès que celui-ci est un peu dense. Découvrons le module Toc.js qui nous permet facilement de générer un sommaire de façon modulaire

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 : 

 

Fournir automatiquement les options à un champ de type Liste sur Drupal 8

Drupal 8 dispose d'une multitude de type de champs permettant de couvrir un grand nombre de cas d'usage et de situations quand il s'agit de structurer et modéliser un contenu. Parmi ceux-ci, nous disposons d'un champ de type Liste qui, comme son nom l'indique, nous permet de configurer un champ de saisie sur la base d'une liste d'options prédéfinies. Cette liste d'options doit être paramétrée manuellement dans les options de stockage du champ au moment de sa création. Mais nous pouvons également utiliser ce champ sur la base d'une liste d'options qui peuvent être fournies dynamiquement. Regardons comment nous devons procéder pour disposer d'un champ qui nous permet de choisir parmi une liste d'options dynamiques.

Par KarimB
Karim Boudjema
Je suis Karim Boudjema ou KarimB en ligne. Je suis belge, développeur Drupal et aussi administrateur d'entreprises. Je vis pour l'instant à Cochabamba, en Bolivie. Quand j'ai découvert Drupal 4.7 en 2008 (et oui… il y a 10 ans), j'ai tout suite senti que ce serait un changement important dans le monde du développement web. Et ce fut le cas!

Sauvegarder les valeurs d'un formulaire avec Private Tempstore sous Drupal 8

Dans ce billet, nous allons voir comment sauvegarder temporairement les valeurs d'un formulaire et comment les récupérer ou les traiter plus tard dans un contrôleur. Pour cela, nous allons utiliser la Form API et un stockage de type private tempstore (le temporary store storage system de Drupal 8).

Le scénario est le suivant: nous devons créer un simple lecteur RSS (un formulaire) où un utilisateur puisse introduire l'URL d'un fichier RSS et aussi le nombre d'éléments à récupérer de ce dernier. Ensuite, sur une nouvelle page (un contrôleur), l'application doit afficher les éléments requis avec leur lien vers les pages syndiquées.

La manière la plus simple serait de récupérer ces valeurs dans la méthode buildForm() de notre formulaire, les traiter et les afficher dans un champs spécifique de notre formulaire. Mais ce n'est pas notre cas puisque nous devons afficher les résultats sur une nouvelle page.

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 7 - Créer un champ calculé pour Views

(et oui des fois on doit retourner sous drupal 7)

Voici comment créer un champ calculé pour un type d'entité (ici Node) qui sera accessible comme n'importe quel champ dans views.

Dans mon_module.module :

  1. function mon_module_views_api($module = NULL, $api = NULL) {
  2. return ['api' => '3.0'];
  3. }

Dans mon_module.views.inc : définition des champs

  1. function mon_module_views_data() {
  2. $data = array();
  3.  
  4. $data['node']['risk'] = [
  5. 'title' => t('Country latest risk'), // Titre visible dans views
  6. 'help' => t('Country latest risk description'), // Description visible dans views
  7. 'field' => [
  8. 'handler' => 'MonModuleLatestRisk', // Nom de la classe qui "rendra" notre champ calculé
  9. ],
  10. ];
  11.  
  12. return $data;
  13. }

Dans mon_module.info : ne pas oublier de lister notre fichier qui contiendra notre classe

files<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> MonModuleLatestRisk<span class="sy0">.</span>php

Dans MonModuleLatestRisk.php : La logique de calcul du champ

  1. class MonModuleLatestRisk extends views_handler_field {
  2.  
  3. function render($values) {
  4. // Logique de "calcul" de notre champ
  5. // À noter que $values contient l'ensembles des champs sélectionnés (qu'ils soient exclus de l'affichage ou non) dans notre vue
  6. if(isset($values->field_field_country_scenarios[0]['raw'])) {
  7. return $values->field_field_country_scenarios[0]['raw']['entity']->field_description['und'][0]['value'];
  8. }
  9. return null;
  10. }
  11.  
  12. function query() {
  13. // laisser vide
  14. }
  15. }

 

Personnaliser le fil d'Ariane avec Drupal 8

Drupal 8 dispose par défaut de deux méthodes pour construire le fil d'Ariane. Pour les contenus, cette méthode est basé sur l'URL de la page, et pour les termes de taxonomie cette méthode est basée sur la hiérarchie du vocabulaire. Explorons plus en détails la construction du fil d'Ariane et les alternatives possibles pour le personnaliser en tant que de besoin.

Par Artusamak
Julien Dubois

Drupalcamp Paris 2019 - Bilan des trois jours

Drupalcamp Paris 2019 - Bilan des trois jours
Artusamak
mar 05/03/2019 - 08:55

Retrouvez le lien vers la présentation RGPD donnée par Guillaume et le compte-rendu de nos efforts de sprint de traduction.

Corps

Nous voilà enfin remis de la traditionnelle Drupal flu, il est temps de vous partager le bilan de ces 3 jours de Drupalcamp Paris 2019.

Un camp, c'est surtout l'occasion de retrouver les copains et les copines de la communauté, mais aussi de faire de nouvelles rencontres ! On aurait aimé qu'Edouard puisse être parmi nous mais une contrainte de dernière minute l'a forcé à nous abandonner.

L'innovation de cette édition résidait dans la tenue d'une session Business où les clients ont pu enchaîner les retours d'expérience sur la mise en œuvre de leurs projets. Nous avons convié l'UNESCO à venir témoigner sur ses problématiques de gestion de multi-sites après plusieurs années et comment nous les accompagnons pour les aider à optimiser leur temps.

L'après-midi, Guillaume a fait une présentation sur le choix de modules pour mettre en œuvre les recommandations du RGPD avec Drupal dans la session Experts. Vous saurez quel module utiliser dans quelle situation avec ses slides.

Le lendemain, j'ai répondu à l'invitation pour répondre à la question "Pourquoi choisir Drupal" où les anciens présidents de l'association ont pu défendre Drupal :

Et pour terminer, le dimanche a eu lieu la journée de sprints. Là on peut dire que l'on a explosé les compteurs, l'équipe de traduction était remontée pour avoir le cœur à nouveau à 100% de chaînes traduites et validées. Il en manquait environ 260 au début du camp, le nombre est tombé à 0 et même mieux, les modules Pathauto, Metatag, Redirect, Recaptcha, Honeypot, Inline Entity Form, Diff, Paragraphs et Fences sont passés à 100% de chaînes avec suggestions ! Il ne reste plus qu'à les valider dans les semaines qui viennent pour concrétiser ces efforts. Le guide utilisateur français a même vu sa traduction se remettre en marche.

Merci et bravo à tous les contributeurs et toutes les contributrices qui ont beaucoup donné pour ce sprint. Tous les progrès sont visibles ici : https://mensuel.framapad.org/p/dcp2019-sprints

Rendez-vous au prochain camp pour de nouveaux progrès ! Merci aux volontaires qui ont aidé à l'organisation, on sait que vous y avez laissé beaucoup d'énergie. Mention particulière pour la nourriture, vous avez fait l'effort de proposer des menus végétariens pour tous, c'était une super idée responsable. On valide !

Catégories
Drupal
Tags
session
contribution
Par admin

Assemblée générale 2019

L'assemblée générale de l'association Drupal France et francophonie aura lieu le 26 mars 2019
Elle aura à l'ordre du jour :

  • Rapport moral présenté par le président
  • Rapport financier présenté par le trésorier
  • Élection du nouveau bureau
  • Questions ouvertes

Les membres désirant présenter leur candidature au bureau, et ceux qui souhaitent inclure des points complémentaires à l'ordre du jour devront se manifester au plus tôt au bureau via email à bureau@listes.drupalfr.org
Si vous ne pouvez être physiquement présent lors du vote, vous pouvez vous faire représenter par un autre membre de l'association muni d'un pouvoir régulier.
Le document de pouvoir est disponible ci-dessous.

Vous pouvez le remettre à votre personne procuratrice, ou l'envoyer par voie électronique (scan signé) au bureau à bureau@listes.drupalfr.org avant le 23 mars 2019.
Vous pouvez également participer à l'Assemblée Générale par un moyen de communication électronique permettant de vous identifier formellement.

Dans ce cas, si vous souhaitez participer aux votes par voie électronique, vous devrez renoncer à l'anonymat des votes afin de les transmettre.
Nous vous rappellons également que seuls les membres à jour de leur cotisation peuvent participer à l'Assemblée Générale et participer au vote.

N'hésitez pas à mettre à jour votre adhésion dès à présent grâce au bulletin disponible en ligne (Connectez-vous sur drupal.fr/user onglet "Mon adhésion").
Merci à vous tous,
Merci pour votre implication,
Merci d'être vous.

-
Floris MORICEAU THEVENOT
Secrétaire - Drupal France

................................................................................................

POUVOIR

Je soussigné : ………………………………………………………………….

Ne pouvant pas assister à l'Assemblée Générale de l'Association Drupal France et Francophonie le 28 mars 2019 à Paris, donne pouvoir à:

…………………………………………………………………………………………………..

(Laissez ce nom en blanc si vous souhaitez que le pouvoir soit utilisé par le Bureau)

Afin de me représenter et de participer à tout vote en mon lieu et place.

Fait à :

le :

SIGNATURE
précédée de la mention manuscrite obligatoire « Bon pour pouvoir ».

En page d'accueil : 
Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Créer un filtre de texte

À la demande d'un client je devais ajouter un attribut « target="_blank" » sur tous les liens sortant du site.

J'ai pour cela créé un filtre de texte que j'ai appliqué à un format de texte.

Voici le fichier mon_module/src/Plugin/Filter/UrlTargetBlankFilter.php

  1. namespace Drupal\mon_module\Plugin\Filter;
  2.  
  3. use Drupal\filter\FilterProcessResult;
  4. use Drupal\filter\Plugin\FilterBase;
  5.  
  6. /**
  7.  * @Filter(
  8.  * id = "url_target_blank_filter",
  9.  * title = @Translation("Url Target Blank"),
  10.  * description = @Translation("Add « target=_blank » to all urls"),
  11.  * type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
  12.  * )
  13.  */
  14. class UrlTargetBlankFilter extends FilterBase {
  15.  
  16. public function process($text, $langcode) {
  17. $regex = "/(\\b[^]*href=['\"]?http[^]+)>/is";
  18. $subst = "$1 target=\"_blank\" rel=\"noopener\">";
  19. $result = preg_replace($regex, $subst, $text);
  20. return new FilterProcessResult($result);
  21. }
  22. }

À noter : j'ai aussi ajouté l'attribut rel="noopener" comme suggéré par Simon Georges.

Pages