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 Mercredi 6 décembre 2017 - 19:00

Ça vient à contresens du paradigme des noeuds, mais parfois on souhaite que les pages de détail d'un noeud d'un type de contenu en particulier ne soient pas accessible.

Avec quelques adaptation, ceci peut aussi fonctionner pour les pages de terme de taxonomie.

Voici comment faire :

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

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

 

 

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...