LanguageSwitcherBlock.php in Open Social 8.7
Same filename and directory in other branches
- 8.9 modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 8.4 modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 8.5 modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 8.6 modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 8.8 modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 10.3.x modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 10.0.x modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 10.1.x modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
- 10.2.x modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.php
Namespace
Drupal\social_language\Plugin\BlockFile
modules/custom/social_language/src/Plugin/Block/LanguageSwitcherBlock.phpView source
<?php
namespace Drupal\social_language\Plugin\Block;
use Drupal\language\Plugin\Block\LanguageBlock;
use Drupal\Core\Url;
/**
* Provides a 'LanguageSwitcherBlock' block.
*
* This replaces the Drupal core language switcher block because that block
* breaks with the SocialLanguageMetadataBubblingUrlGenerator which is needed to
* keep users within the same language when viewing content (such as posts) in
* a language other than their current.
*
* It also customises the look to match that of the Open Social menubar.
*
* @Block(
* id = "language_switcher_block",
* admin_label = @Translation("Language switcher block"),
* )
*/
class LanguageSwitcherBlock extends LanguageBlock {
/**
* {@inheritdoc}
*/
public function build() {
/** @var \Drupal\Core\Language\Language $currentLanguage */
$currentLanguage = $this->languageManager
->getCurrentLanguage();
// Build the menu.
$block = [
'#attributes' => [
'class' => [
'navbar-user',
],
],
'menu_items' => [
'#theme' => 'item_list',
'#list_type' => 'ul',
'#attributes' => [
'class' => [
'nav',
'navbar-nav',
],
],
'#items' => [],
],
];
// Add `'#icon' => 'language',` to this array to replace the text
// with an icon.
$block['menu_items']['#items']['language'] = [
'#type' => 'account_header_element',
'#title' => $currentLanguage
->getName() . " (" . $currentLanguage
->getId() . ")",
'#label' => $currentLanguage
->getName(),
'#url' => Url::fromRoute('<none>'),
'#wrapper_attributes' => [
'class' => [
'dropdown',
],
],
];
// Generate the routes for the current page.
$route_name = $this->pathMatcher
->isFrontPage() ? '<front>' : '<current>';
$type = $this
->getDerivativeId();
$switchLinks = $this->languageManager
->getLanguageSwitchLinks($type, Url::fromRoute($route_name));
// Use the default URL generator that does not rewrite the language.
$url_generator = \Drupal::service('drupal_core_url_generator');
// Add languages as links.
foreach ($switchLinks->links as $langcode => $link) {
$link['url']
->setOption('language', $this->languageManager
->getLanguage($langcode));
$link['url']
->setUrlGenerator($url_generator);
$block['menu_items']['#items']['language'][$langcode] = [
'#type' => 'link',
'#label' => $link['title'] . " (" . $langcode . ")",
'#title' => $link['title'] . " (" . $langcode . ")",
'#url' => $link['url'],
'#attributes' => [
'class' => [
$langcode === $currentLanguage
->getId() ? 'active' : NULL,
],
],
];
}
return $block;
}
}
Classes
Name | Description |
---|---|
LanguageSwitcherBlock | Provides a 'LanguageSwitcherBlock' block. |