わかりました、それを行う2つの方法を見つけました。
1.カスタムテーマ
my_theme.theme
ファイル内の変数を変更できます。必要な関数の名前を理解する必要があります。例:my_theme_preprocess_twig_file()
私の場合、私は必要でしmy_theme_preprocess_links__language_block()
た。twigファイル名を受け取り、すべて-
をに置き換える必要があります_
。
my_theme.theme
:
function my_theme_preprocess_links__language_block(&$variables) {
$currentLanguageCode = \Drupal::languageManager()
->getCurrentLanguage()
->getId();
// replace key of active language with 'activeLink'
foreach ($variables['links'] as $i => $link) {
/** @var \Drupal\language\Entity\ConfigurableLanguage $linkLanguage */
$linkLanguage = $link['link']['#options']['language'];
if ($currentLanguageCode == $linkLanguage->get('id')) {
$variables['links']['activeLink'] = $link;
unset($variables['links'][$i]);
}
}
// if there is only 2 languages remove active one
if (sizeof($variables['links']) == 2) {
unset($variables['links']['activeLink']);
// give class 'btn btn-primary' to alternate language
/** @var \Drupal\Core\Url $alternate */
$alternate = current($variables['links']);
$alternate['link']['#options']['attributes']['class'][] = 'btn';
$alternate['link']['#options']['attributes']['class'][] = 'btn-primary';
$variables['links'] = [$alternate];
}
}
2.カスタムモジュール
同じ変数を変更するモジュールを作成することもできます。この前処理はフローの早い段階で行われたため、変数の値には大きな違いがあります。関数の名前もまったく異なりますmy_module_api_to_modify_alter()
。例:私の場合、language_switch_links
からを変更する必要がありましたlanguage.api.php
。*.api.php
drupal 8 でファイルを検索すると、すべての変更機能を見つけることができます。これらは、正確に参照するためのものです。
my_module.module
:
function my_module_language_switch_links_alter(&$variables) {
$currentLanguageCode = \Drupal::languageManager()
->getCurrentLanguage()
->getId();
// replace key of active language with 'activeLink'
foreach ($variables as $i => $link) {
/** @var \Drupal\language\Entity\ConfigurableLanguage $linkLanguage */
$linkLanguage = $link['language'];
if ($currentLanguageCode == $linkLanguage->get('id')) {
$variables['activeLink'] = $link;
unset($variables[$i]);
}
}
// if there is only 2 languages remove active one
if (sizeof($variables) == 2) {
unset($variables['activeLink']);
// give class 'btn btn-primary' to alternate language
/** @var \Drupal\Core\Url $alternate */
$alternate = current($variables);
$alternate['attributes']['class'][] = 'btn';
$alternate['attributes']['class'][] = 'btn-primary';
$variables = [$alternate];
}
}
そして、両方の場合の私のTwigテンプレートl inks--language-block.html.twig
:
{% if links -%}
{%- if links|length == 1 -%}
{# show only alternate language button #}
{{ (links|first).link }}
{%- else -%}
{# show selected language in button and other languages in drop down #}
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">{{ links['activeLink'].text }} <span class="caret"></span></button>
<ul class="dropdown-menu">
{% for key, item in links %}
{% if key is not same as("activeLink") %}
<li>{{ item.link }}</li>
{% endif %}
{% endfor %}
</ul>
{%- endif -%}
{%- endif %}