Factstory Agency, filiale de l'AFP, a confié à l'équipe Makina Corpus la réalisation d’une infographie conçue par l’agence pour la Direction Générale de l'Énergie (ENER) de la Commission Européenne.
Planète
Traquer les actions sur les médias oEmbed dans Drupal avec Matomo
Traquer les actions sur les médias oEmbed dans Drupal avec Matomo
DuaelFr
lun 15/05/2023 - 12:00
Traquer les actions sur les médias oEmbed dans Drupal avec Matomo
Comment mesurer l'impact de nos médias dans une démarche d'amélioration continue et d'éco-conception.
Drupal, un CMS pensé pour les spécialistes du marketing
L'architecture proposée par Drupal permet de proposer à votre équipe marketing une interface assez conviviale et intuitive pour faciliter leur prise en main. Par ailleurs, sa structure permet d'interconnecter plusieurs outils entre eux, de manière à créer un écosystème durable et performant. Cela vous permet ainsi d'unifier l'ensemble des points de contact entre vous et votre équipe de manière à faciliter la gestion et la diffusion de contenus.
Comment optimiser la performance d'un site Drupal ?
Un site aux performances web élevées impactera grandement votre position dans les résultats des moteurs de recherche. Celui-ci contribuera également à améliorer l'expérience utilisateur, ce qui vous permettra d'améliorer votre taux de conversion et diminuer votre taux de rebond.
Drupal - Scanner un dossier récursivement
Voici comment scanner un dossier récursivement et récupérer tableau de fichiers correspondant à une expression régulière :
ici je récupère tous les fichiers .xml dans le dossier private://sms
$fileSystem = \Drupal::service('file_system');
$items = $fileSystem->scanDirectory('private://sms', '/xml$/');
Comment garantir l'unicité d'un traitement
Comment garantir l'unicité d'un traitement
Artusamak
mar 24/01/2023 - 17:03
Comment garantir l'unicité d'un traitement
Voici une technique pour lancer un traitement automatisé une seule et unique fois sur un environnement.
Quelles sont les nouveautés apportées par Drupal 9.5 ?
Drupal 9.5 est la nouvelle mise à jour de Drupal 9. Contenant la majorité des fonctionnalités de Drupal 10, cette nouvelle version permet de faire face aux perspectives annoncées par la communauté Drupal et s’inscrit dans une démarche d’offrir à ses utilisateurs plus de performance, de sécurité et de robustesse.
Contribution : Module Lazy service, un peu plus de paresse dans votre Drupal
Comme il a été évoqué dans le billet de retour de la SymfonyCon, à chaque fois que j'ajoute une injection de dépendance pour un service qui ne sera utilisé qu'une fois au sein de mon service, de mon controller ou autre, ça me défrise.
Pourquoi ne peut-on pas simplement dire que l'on a besoin de ce service, mais qu'il ne soit chargé qu'à la demande ?
Puis j'assiste à la conférence Unleashing the power of lazy objects in PHP de Nicolas Grekas qui présente son travail fait sur le lazy loading des services. Ce qui défile dans ma tête à ce moment :
- Comment l'intégrer à Drupal ?
- Quand sera t'il intégré a Drupal ?
- Mince, ce qu'il présente n'est pas encore complètement publié... je ne suis pas prêt de le voir dans Drupal :(
Ça reste dans ma tête, ça tourne et re-tourne...
Et si ?
Je n'en peux plus, le concept n'est pas si compliqué après tout... J'ouvre le capot de mon Drupal...
Bon point
Bon point, on n'est pas en retard, Drupal dispose déjà de la possibilité de déclarer un service comme étant paresseux (lazy). Il faut simplement rajouter à la déclaration du service l'option "lazy: true" et générer son ProxyClass. On n'est pas à 100% aligné sur le fonctionnement simplifié de Symfony et de ses annotations, mais c'est pas si mal.
Il faut quand même lancer un script manuellement pour générer la classe ProxyClass dans le répertoire du module où se situe le service en question.
Mais pas en avance
On est donc au même état que Symfony actuellement. On sait déclarer un service en tant que "lazy", mais on ne peut pas, depuis un service, dire que l'on veut injecter, en lazy, un service qui n'était pas prévu pour l'être.
On est cuit alors ? Rendez-vous en 2030 ?
Si on devait forcément passer par une mise à jour du coeur de Drupal pour intégrer cette fonctionnalité, certainement !
Je suis mauvaise langue, une telle fonctionnalité pourrait certainement arriver plus tôt, mais dans quelle version de Drupal ? 10 ? 11 ?...
Sauf qu'on a de la chance, Drupal nous donne les leviers nécessaires pour faire ça sous forme de modules contrib. On va donc pouvoir proposer la fonctionnalité tranquillement sous forme de module communautaire, et en parallèle pousser la fonctionnalité dans le coeur.
Oui mais quand ?
Il reste encore du travail, mais le code est déjà disponible. Reste à l'améliorer, écrire les tests, la documentation, ouvrir le ticket pour intégration au coeur de Drupal etc.
En attendant, le module en tant que proof of concept existe, fonctionne sur les quelques tests effectués et va pouvoir faire avancer le sujet.
Ce que l'on doit faire en tant que développeur :
On déclare un service comme étant un service à charger en lazy en préfixant son nom lors de l'injection de dépendance par "lazy.". Exemple pour le service "messenger" : "lazy.messenger".
Ce que le module fait alors :
Le module vient modifier la liste des services pour générer à la volée si elle n'existe pas la proxyClass correspondante, et finit de déclarer correctement le service.
Je vous invite donc à jeter un oeil et participer, le module Lazy service pour Drupal c'est par là.
Drupal - ajouter une action personnalisée dans une liste d'opérations sur des entités
Les liens d'opérations sont les liens contenus dans le menu déroulant sur les listing dans drupal
Image
Il est possible d'en ajouter via le hook HOOK_entity_operation_alter :
function mon_module_entity_operation_alter(array &$operations, EntityInterface $entity) {
$entityTypeId = $entity->getEntityTypeId();
if ($entityTypeId !== 'group') {
return;
}
$link = \Drupal\Core\Url::fromRoute('mon_module.user_group_import', ['group' => $entity->id()]);
$operations['import_members'] = array(
'title' => t('Importer des membres'),
'weight' => 20,
'url' => $link,
);
}
[Drupal] Envoyer un email lorsque le champ d'un contenu a été mis à jour
Création d'un module Drupal qui envoie une notification par mail lorsque le champ d'un node a été modifié.
Drupal 9 - ouvrir un lien dans une fenêtre modale
Dans drupal 9, via la librairie jquery UI Dialog, Il est possible très facilement d'ouvrir des pages dans des fenêtres modales (ou « popin », « Lightbox »...) Dans votre contrôleur :
# On attache la librairie nécessaire
$build['#attached']['library'][] = 'core/drupal.dialog';
# On défini notre lien
$build['link'] = [
'title' => $this->t("Contacter l'annonceur"),
'url' => \Drupal\Core\Url::fromRoute('ma_page'),
'attributes' => [
'class' => ['use-ajax'],
'data-dialog-type' => 'modal',
'data-dialog-options' => Json::encode([
'width' => 400,
]),
],
];
Voir toutes les options qu'il est possible d'utiliser : https://jqueryui.com/dialog/#content
Pour faire la même chose directement dans un template twig :
{# on ajoute la librairie nécessaire #}
{{ attach_library('core/drupal.dialog')}}
{# Lien à ouvrir dans une modale #}
<a class="use-ajax" data-dialog-type="modal" data-dialog-options="{"width":400}" href="{{ path('ma_page') }}">{{ "Contacter l'annonceur" }}</a>
Drupal 9 - Désactiver un bloc pour une page spécifique
Drupal propose un mécanisme en backoffice pour contrôler l'affichage des blocs, mais il est nécessaire parfois de mettre en place une logique un peu plus complexe.
Ici nous allons masquer le block "pagetitleblock_content" de la région "header" quand on est sur un nœud de type « petite_annonce » via le hook HOOK_preprocess_page :
function petites_annonces_preprocess_page(&$vars) {
if(($node = \Drupal::routeMatch()->getParameter('node')) && $node->bundle() === 'petite_annonce') {
if (isset($vars['page']['header']['pagetitleblock_content'])) {
unset($vars['page']['header']['pagetitleblock_content']);
}
}
}
Créer une méthode de livraison avec Drupal commerce 2
Drupal commerce fournit en standard plusieurs méthodes de livraison que nous pouvons conditionner selon différents critères (montant de la commande, profil client, type de commande, Poids de la commande, Type de produit, etc.). Pour des besoins spécifiques, nous pouvons ajouter une méthode de livraison sur mesure qui peut alors se charger d'effectuer les calculs nécessaires à la détermination du coût de la livraison.
Discreto : vous avez le droit de rester anonyme
Discreto : vous avez le droit de rester anonymeLaborouge
lun 10/10/2022 - 09:00
Comment réaliser un audit sous Drupal ?
Afin de garder votre site Drupal sécurisé et performant, nous vous recommandons d’effectuer régulièrement des audits techniques et fonctionnels. Dans cet article, nous vous expliquons en quoi cela consiste et vous présentons comment le mettre en place.
Drupal 9 : ajouter des favicons à son thème
Drupal 9 : ajouter des favicons à son thèmeLaborouge
lun 03/10/2022 - 09:00
Drupal 9 : supprimer le bloc de titre de page pour certains types de contenu
Drupal 9 : supprimer le bloc de titre de page pour certains types de contenuLaborouge
lun 26/09/2022 - 09:00
Drupal 8 & Drupal 9 - Entité - Champ de base text_area / Zone de texte -
$fields['related_content'] = BaseFieldDefinition::create('string_long')
->setLabel(t('Related content'))
->setSetting('text_processing', FALSE)
->setDisplayConfigurable('form', TRUE)
->setTranslatable(FALSE);