Який еквівалент kuk_menu_alter () для зміни типу пункту меню?


10

Я хочу змінити тип меню в Drupal 8. У Drupal 7 ми можемо досягти цього за допомогою mock_menu_alter

function module_menu_alter(&$items) {
  $items['admin/config/people/ip-blocking/default'] = array(
    'title' => 'Block IP Address',
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
}

Так само я хочу змінити тип меню в Drupal 8. Як це можна зробити. Дякую тобі.


3
читайте його drupal.org/node/2118147
Аді

Як згадував Бердір, у меню більше немає типу меню. Ви можете, можливо, вказати, що ви намагаєтесь архівувати?
Лінус

Відповіді:


7

Хоча відповідь від Лінуса чудова, він не дає відгуків щодо вашого конкретного питання:

Так само я хочу змінити тип меню в Drupal 8

У Drupal 8. такого типу типу меню немає. Все, що раніше було типом, тепер є зовсім іншим. Маршрути, посилання на меню, локальні завдання, локальні дії. І часто у вас є багато речей. Ви завжди маєте маршрут (7.x, який використовується для виклику зворотного зв'язку цього типу). Крім того, ви додаєте посилання на меню, локальні завдання або дії для цього маршруту.

Отже, ви не можете перетворити посилання на меню, наприклад, на місцеве завдання, або навіть маршрут до локального завдання. Єдине, що ви можете зробити, це, наприклад, змінити посилання на меню (що не має нічого спільного із зміною маршруту, згаданою вище) та створити натомість нове місцеве завдання.

Дивіться відповідь Лінуса про посилання та додаткову інформацію про те, як робити кожне з цих речей.


Ти маєш рацію, я зовсім забув це згадати. Дякую за доповнення
Лінус

19

Drupal 8 має нову систему меню, її немає hook_menuі більше hook_menu_alterнемає.

Якщо ви хочете змінити існуючий маршрут, це порівняно з Drupal 7 трохи складніше.

У своєму модулі ви повинні створити файл класу з YOURMODULE/src/Routing/CLASSNAME.phpтаким розширенням RouteSubscriberBase:

/**
 * @file
 * Contains \Drupal\YOURMODULE\Routing\RouteSubscriber.
 */

namespace Drupal\YOURMODULE\Routing;

use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;

/**
 * Listens to the dynamic route events.
 */
class RouteSubscriber extends RouteSubscriberBase {

  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection) {
    // Get the route you want to alter
    $route = $collection->get('system.admin_content');

    // alter the route...
  }
}

Ви можете взяти за приклад клас RouteSubsciber модуля вузла.

Щоб ваш RouteSubscriber був розпізнаний, вам також потрібно створити YOURMODULE.services.ymlфайл у корені каталогу ваших модулів:

services:
  node.route_subscriber:
    class: Drupal\YOURMODULE\Routing\RouteSubscriber
    tags:
      - { name: event_subscriber }

Для кращого ознайомлення з новою системою меню я рекомендую наступні статті:

Редагувати: Як зазначав Бердір , система меню має іншу структуру, яка не має нічого спільного з системою меню D7, тому такого типу типу меню вже немає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.