3 namespace Drupal\views\Plugin\Derivative;
5 use Drupal\Component\Plugin\Derivative\DeriverBase;
6 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
7 use Drupal\views\Plugin\views\display\DisplayMenuInterface;
8 use Drupal\views\Views;
9 use Drupal\Core\Entity\EntityStorageInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * Provides menu links for Views.
15 * @see \Drupal\views\Plugin\Menu\ViewsMenuLink
17 class ViewsMenuLink extends DeriverBase implements ContainerDeriverInterface {
22 * @var \Drupal\Core\Entity\EntityStorageInterface
24 protected $viewStorage;
27 * Constructs a \Drupal\views\Plugin\Derivative\ViewsLocalTask instance.
29 * @param \Drupal\Core\Entity\EntityStorageInterface $view_storage
32 public function __construct(EntityStorageInterface $view_storage) {
33 $this->viewStorage = $view_storage;
39 public static function create(ContainerInterface $container, $base_plugin_id) {
41 $container->get('entity.manager')->getStorage('view')
48 public function getDerivativeDefinitions($base_plugin_definition) {
50 $views = Views::getApplicableViews('uses_menu_links');
52 foreach ($views as $data) {
53 list($view_id, $display_id) = $data;
54 /** @var \Drupal\views\ViewExecutable $executable */
55 $executable = $this->viewStorage->load($view_id)->getExecutable();
56 $executable->initDisplay();
57 $display = $executable->displayHandlers->get($display_id);
59 if (($display instanceof DisplayMenuInterface) && ($result = $display->getMenuLinks())) {
60 foreach ($result as $link_id => $link) {
61 $links[$link_id] = $link + $base_plugin_definition;