さて、私は hook_toolbar
を介して何かを起動して実行しました。残っているのは、ツールバーの「Language:EN」という文字列を直接クリックできないことです。あなたはそれの隣に少しクリックする必要があります。多分あなたはこれを修正することができます。
それとは別に、Develモジュールとhook_toolbar
の実装もご覧ください。すべてに追加のsrc/ToolbarHandler.php
クラスがあります。以下のコードを専用ハンドラーに再構築することをお勧めします。
use Drupal\Core\Url;
use Drupal\Core\Link;
/**
* Implements hook_toolbar().
*/
function MYMODULE_toolbar() {
// Get languages, get current route.
$current_language = \Drupal::languageManager()->getCurrentLanguage()->getId();
$languages = \Drupal::languageManager()->getLanguages();
$route = \Drupal::service('path.matcher')
->isFrontPage() ? '<front>' : '<current>';
// Get links.
$links = [];
foreach ($languages as $language) {
$url = new Url($route, [], ['language' => $language]);
$links[] = [
'#markup' => Link::fromTextAndUrl($language->getName(), $url)
->toString(),
];
}
// Set cache.
$items['admin_toolbar_langswitch'] = [
'#cache' => [
'contexts' => [
'languages:language_interface',
'url',
],
],
];
// Build toolbar item and tray.
$items['admin_toolbar_langswitch'] += [
'#type' => 'toolbar_item',
'#weight' => 999,
'tab' => [
'#type' => 'html_tag',
'#tag' => 'div',
'#value' => '<span>' . t('Language') . '</span>: <span class="current-language">' . strtoupper($current_language) . '</span>',
'#attributes' => [
'class' => ['toolbar-item-admin-toolbar-langswitch'],
'title' => t('Admin Toolbar Langswitch'),
],
],
'tray' => [
'#heading' => t('Admin Toolbar Langswitch'),
'content' => [
'#theme' => 'item_list',
'#items' => $links,
'#attributes' => [
'class' => ['toolbar-menu'],
],
],
],
];
return $items;
}
上記のhook_toolbarの例はほぼ完璧です。修正しました。以下のコードを参照してください。言語:ENのスパンを削除するだけで、クリック機能が完全に機能します。
私のコードを参照してください:
/**
* Implements hook_toolbar().
*/
function examplemodule_toolbar() {
// Get languages, get current route.
$current_language = \Drupal::languageManager()->getCurrentLanguage()->getId();
$languages = \Drupal::languageManager()->getLanguages();
$route = \Drupal::service('path.matcher')
->isFrontPage() ? '<front>' : '<current>';
// Get links.
$links = [];
foreach ($languages as $language) {
$url = new Url($route, [], ['language' => $language]);
$links[] = [
'#markup' => Link::fromTextAndUrl($language->getName(), $url)
->toString(),
];
}
// Set cache.
$items['admin_toolbar_langswitch'] = [
'#cache' => [
'contexts' => [
'languages:language_interface',
'url',
],
],
];
// Build toolbar item and tray.
$items['admin_toolbar_langswitch'] += [
'#type' => 'toolbar_item',
'#weight' => 999,
'tab' => [
'#type' => 'html_tag',
'#tag' => 'div',
'#value' => t('Language') . ': ' . strtoupper($current_language),
'#attributes' => [
'class' => ['toolbar-item-admin-toolbar-langswitch'],
'title' => t('Admin Toolbar Langswitch'),
],
],
'tray' => [
'#heading' => t('Admin Toolbar Langswitch'),
'content' => [
'#theme' => 'item_list',
'#items' => $links,
'#attributes' => [
'class' => ['toolbar-menu'],
],
],
],
];
return $items;
}