Ç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
# mon_module.services.yml
services:
mon_module.node_cp_redirect:
class: Drupal\mon_module\EventSubscriber\NodeCPRedirect
tags:
- { 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.
# mon_module/src/EventSubscriber/NodeCPRedirect.php
<?php
namespace Drupal\mon_module\EventSubscriber;
use Drupal\Core\Url;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class NodeCPRedirect implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [KernelEvents::REQUEST => [['redirectionCommuniquesPresse']]];
}
/**
* Redirection des contenus de type communique_de_presse vers la vue de listing.
*/
public function redirectionCommuniquesPresse(GetResponseEvent $event) {
$request = $event->getRequest();
if ($request->attributes->get('_route') !== 'entity.node.canonical') {
return;
}
if ($request->attributes->get('node')->getType() !== 'communique_de_presse') {
return;
}
$response = new RedirectResponse(Url::fromRoute('view.front_communiques_de_presse.page')->toString(), 301);
$event->setResponse($response);
}
}
Commentaires
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