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

Posté le Mercredi 6 décembre 2017 - 09:41
Dernière mise à jour le Mardi 30 juillet 2019 - 15:10

Ça vient à contre-sens du paradigme des nœuds, mais parfois on souhaite que les pages de détail d'un nœud d'un type de contenu en particulier ne soient pas accessible.

Voici comment faire :

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

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

 

 

Commentaires

Posté le Mercredi 28 mars 2018 - 16:53

Bonjour, je vous félicite pour la clarté de vos informations. Je vais prochainement rechercher un développeur pour un nouveau projet en drupal 8. Pouvons-nous communiquer ?
Cordialement
Alain Adijès

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...