Рейтинг:0

Показать ссылки для всех представлений в меню администратора

флаг in

С включенной панелью администратора одна из вещей, которых мне не хватает в Drupal 7, — это зависание в меню администратора на Структура >> Представления и видеть список всех представлений и иметь возможность щелкнуть одно из них, чтобы отредактировать его.

Смотрите этот снимок экрана для текущего поведения.

Скриншот

Есть ли способ предоставить эту функцию из пользовательского модуля? Я знаю, что могу получить список всех просмотров с помощью Представления::getAllViews() но я не уверен, как добавить их программно. Если я использую пользовательский модуль и использую hook_update_n() чтобы добавить в меню, что происходит, когда добавляется новый вид? Будет ли он автоматически обновляться с добавленным представлением или просто перечислит те, которые присутствовали при установке модуля? Если нет, то как это можно сделать, чтобы всегда отображался текущий список представлений?

Kevin avatar
флаг in
Почему бы не установить модуль панели инструментов администратора?
Jaypan avatar
флаг de
Я не понимаю вопроса - когда я иду в admin -> структура -> представления на стандартной установке Drupal, я вижу список всех представлений.
pglatz avatar
флаг in
У меня установлена ​​панель инструментов администратора. Я только что установил vanilla 9.4, чтобы проверить. Когда я нажимаю на структуру/представления, единственным вариантом является «Добавить представление» - я думаю, что недостаточно ясно изложил свой вопрос; то, что я хочу сделать, это навести курсор на структуру/представления и просмотреть список представлений в виде ссылок для редактирования, не переходя на саму страницу представлений. Так сделал 7, и это экономит мне загрузку страницы. Мне всегда это нравилось.
pglatz avatar
флаг in
Итак, мой вопрос: как мне добавить эти ссылки в меню и получить список всех представлений, которые я мог создать после установки своего кода для создания ссылок меню? Если я использую hook_install(), я предполагаю, что ссылки будут просто списком на момент установки. Я предполагаю, что это должно быть динамически при загрузке каждой страницы, если вошедший в систему пользователь имеет права администратора.
Jaypan avatar
флаг de
По умолчанию в Drupal 8/9 список представлений отображается в admin/structure/views, как вы описываете.Если вы этого не видите, какой-то модуль или что-то в вашей системе нарушает это.
Jaypan avatar
флаг de
У вас установлен модуль Views UI? Это часть ядра, но она необходима для предоставления страницы администратора -> структура -> просмотры.
berliner avatar
флаг bd
Я могу подтвердить то, что описывает пглатц.Он действительно говорит о раскрывающемся меню панели инструментов администратора, которое показывает только пункт меню «Добавить представление» при наведении курсора на структуру меню. Его вопрос **не** касается самой страницы со списком просмотров.
Jaypan avatar
флаг de
Теперь понял, спасибо за разъяснения.
Рейтинг:2
флаг de

Вы можете добавить их самостоятельно в пользовательский модуль.

[МОДУЛЬ].links.menu.yml:

[МОДУЛЬ].views.list:
  производный: 'Drupal\[MODULE]\Plugin\Derivative\ViewMenuLinks'

[МОДУЛЬ]/src/Plugin/Derivative/ViewMenuLinks.php:

<?php

пространство имен Drupal\[MODULE]\Plugin\Derivative;

используйте Drupal\Component\Plugin\Derivative\DeriverBase;
используйте Drupal\Core\Plugin\Discovery\ContainerDriverInterface;
используйте Drupal\views\Views;
используйте Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Обеспечивает ссылки меню для отдельных представлений.
 */
класс ViewMenuLinks расширяет DeriverBase, реализует ContainerDriverInterface {

  /**
   * {@inheritdoc}
   */
  общедоступная статическая функция create(ContainerInterface $container, $base_plugin_id) {
    вернуть новую статику();
  }

  /**
   * {@inheritdoc}
   */
  публичная функция getDerivativeDefinitions($base_plugin_definition) {
    $this->производные = [];

    foreach (Views::getAllViews() as $view_id => $view) {
      $url = $view->toUrl();
      $this->производные['views_ui.views.list.' . $view_id] = [
        'route_name' => $url->getRouteName(),
        'route_parameters' => $url->getRouteParameters(),
        'название' => $view->метка(),
        'родительский' => 'entity.view.collection',
      ];
    }

    foreach ($this->производные как &$entry) {
      $entry += $base_plugin_definition;
    }

    вернуть производные $this->;
  }

}

Обратите внимание, что вам нужно будет заменить все экземпляры [МОДУЛЬ] с фактическим именем модуля вашего модуля.

pglatz avatar
флаг in
Отлично - большое спасибо, Джейпан. Элегантное и простое решение; Я очень доволен.
Jaypan avatar
флаг de
Рад помочь - не могли бы вы отметить это как принятый ответ?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.