Drupal 9 : créer des liens de partage pour les réseaux sociaux
Il existe plusieurs modules Drupal nous permettant de créer facilement des boutons de partage de contenu vers les réseaux sociaux.
Pour n'en citer que quelques-uns :
La plupart utilisent des services externes et / ou l'API fournie par le réseau social sous la forme de "widgets".
Mais leur utilisation n'est pas sans conséquence sur nos données personnelles (dépôt de cookies tiers sans consentement, fuite des données vers des services extérieurs).
Pour ma part, j'ai choisi de ne pas les utiliser et de générer ces partages sous forme de liens, directement depuis mon thème.
Exemple
Pour créer ces liens, je vais utiliser la fonction hook_preprocess_node() dans le fichier montheme.theme (montheme étant le nom de mon thème).
<?php
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\Core\Render\Markup;
/**
* Implements hook_preprocess_node().
*/
function montheme_preprocess_node(&$variables, $hook) {
global $base_url;
$node = $variables['node'];
$share_url = $base_url . $variables['url'];
$title = $node->getTitle();
$nid = $node->id();
$sharing_list = '';
$sharing_list .= '<ul class="sharing-list">';
// Twitter.
$twitter_url = 'https://twitter.com/intent/tweet/?text=' . $title . '&url=' . $share_url;
$sharing_list .= '<li>' . Link::fromTextAndUrl(Twitter, Url::fromUri($twitter_url, array('html' => TRUE, 'attributes' => array('title' => t('Partager sur Twitter'), 'target' => '_blank'))))->toString() .'</li>';
// Facebook.
$facebook_url = 'https://facebook.com/sharer/sharer.php?u=' . $share_url;
$sharing_list .= '<li>' . Link::fromTextAndUrl(Facebook, Url::fromUri($facebook_url , array('html' => TRUE, 'attributes' => array('title' => t('Partager sur Facebook'), 'target' => '_blank'))))->toString() .'</li>';
// Linkedin.
$linkedin_url = 'https://www.linkedin.com/shareArticle?url=' . $share_url;
$sharing_list .= '<li>' . Link::fromTextAndUrl(Linkedin, Url::fromUri($linkedin_url , array('html' => TRUE, 'attributes' => array('title' => t('Partager sur Linkedin'), 'target' => '_blank'))))->toString() .'</li>';
$sharing_list .= '</ul>';
$variables['sharing'] = Markup::Create($sharing_list);
}
Il ne me reste plus qu'à utiliser ma nouvelle variable dans mon template node.html.twig.
{{ sharing }}
En détail
Pour cet exemple, j'ai choisi de générer des liens utilisant les trois réseaux sociaux suivants :
Ces trois sites proposent une URL directe de partage, c'est-à-dire qui n'encapsule aucun service sur notre site (et donc, aucun cookie).
Je génère l'URL de partage pour chaque réseau :
// Twitter.
$twitter_url = 'https://twitter.com/intent/tweet/?text=' . $title . '&url=' . $share_url;
// Facebook.
$facebook_url = 'https://facebook.com/sharer/sharer.php?u=' . $share_url;
// Linkedin.
$linkedin_url = 'https://www.linkedin.com/shareArticle?url=' . $share_url;
Je génère les liens sous forme d'une liste non ordonnée :
$sharing_list = '';
$sharing_list .= '<ul class="sharing-list">';
// Twitter
$sharing_list .= '<li>' . Link::fromTextAndUrl(Twitter, Url::fromUri($twitter_url, array('html' => TRUE, 'attributes' => array('title' => t('Partager sur Twitter'), 'target' => '_blank'))))->toString() .'</li>';
// Facebook
$sharing_list .= '<li>' . Link::fromTextAndUrl(Facebook, Url::fromUri($facebook_url , array('html' => TRUE, 'attributes' => array('title' => t('Partager sur Facebook'), 'target' => '_blank'))))->toString() .'</li>';
// Linkedin
$sharing_list .= '<li>' . Link::fromTextAndUrl(Linkedin, Url::fromUri($linkedin_url , array('html' => TRUE, 'attributes' => array('title' => t('Partager sur Linkedin'), 'target' => '_blank'))))->toString() .'</li>';
$sharing_list .= '</ul>';
Je génère une variable à utiliser dans mon template et utilise la fonction Markup::create() pour créer des éléments HTML qui ne seront pas filtrés par twig.
$variables['sharing'] = Markup::Create($sharing_list);
Adaptation
Libre à vous d'adapter ce code pour y inclure d'autres réseaux sociaux ou par exemple pour ajouter un lien de partage par courriel (mailto).
Illustration par NordWood Themes sur Unsplash