Quelle est la bonne façon de l'ajout de la langue de langue (Dropdown) ou des liens dans le menu de la barre d'outils admin à partir de mon module personnalisé ou d'un module contribué?
Eh bien, j'ai quelque chose de haut et d'exécution via hook_toolbar
. Il ne reste que la seule chose que vous ne pouvez pas cliquer directement sur la chaîne "Langue: EN" dans la barre d'outils. Vous devez cliquer légèrement à côté de celui-ci. Peut-être que vous pouvez résoudre ce problème.
En dehors de cela, veuillez consulter le module Devel et leur mise en œuvre de hook_toolbar
Où ils ont un supplément src/ToolbarHandler.php
classe pour tout. Vous feriez mieux de reconstruire le code ci-dessous dans un gestionnaire dédié.
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;
}
L'exemple ci-dessus pour Hook_Toolbar est presque parfait. Je l'ai réparé, voir le code ci-dessous. Il vous suffit de supprimer la portée dans la langue: fr puis la fonctionnalité de clic fonctionne parfaitement.
voir mon code:
/**
* 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;
}