Écrit par Laborouge le
Mis à jour le
liste de réseaux sociaux

Drupal 9 : créer des liens de partage pour les réseaux sociaux

3 minutes

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 :

  • Twitter
  • Facebook
  • Linkedin

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

À propos

Laborouge
Développeur basé sur la région de Rouen, je me suis spécialisé dans le développement de site web avec le C.M.S. Drupal.

Ajouter un commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
Cette question sert à vérifier si vous êtes un visiteur humain ou non afin d'éviter les soumissions de pourriel (spam) automatisées.