Drupal 8.でメニュータイプを変更したい。Drupal 7では、これは hook_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.で変更したいと思っています。どうすればよいですか。ありがとうございます。
Linusからの回答は素晴らしいですが、特定の質問に対するフィードバックはありません。
同様に、Drupal 8でメニュータイプを変更したい
Drupal 8.にはメニュータイプなどはありません。これまでタイプであったものはすべて、ルート、メニューリンク、ローカルタスク、ローカルアクションなど、完全に異なるものになりました。多くの場合、ルートは常にあり(7.xはこのタイプのコールバックを呼び出すために使用されます)さらに、そのルートのメニューリンク、ローカルタスク、またはアクションを追加します。
したがって、たとえばメニューリンクをローカルタスクに変換したり、ルートをローカルタスクに変換したりすることはできません。あなたができる唯一のことは、例えばです。メニューリンクを変更し(上記のルート変更とは関係ありません)、代わりに新しいローカルタスクを作成します。
Linusの回答を参照して、リンクとそれらの各操作を行う方法の詳細を確認してください。
Drupal 8には新しいメニューシステムがあり、hook_menu
とhook_menu_alter
はなくなりました。
既存のルートを変更したい場合は、Drupal 7.と比較すると少し複雑です。
モジュールで、RouteSubscriberBase
を拡張するクラスファイルをYOURMODULE/src/Routing/CLASSNAME.php
に作成する必要があります。
/**
* @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 }
新しいメニューシステムをよりよく理解するには、次の記事をお勧めします。
編集:Berdirによる言及 と同様に、メニューシステムは異なる構造になり、D7のメニューシステムとは何の関係もありません。 、メニュータイプなどはもうありません。