Drupal 8)で匿名ユーザーのアカウントメニューの[ログイン]リンクのタイトルを変更する方法提案をありがとう.
編集:mediaashleyは、新しいメニューを作成し、メニューブロックを使用する、よりシンプルなソリューションを提案しました。どうしてそんなことを考えなかったのかわからない。
「ユーザーアカウントメニュー」ブロックに表示されるデフォルトのリンクについて話している場合。メッセージが表示されることがわかります
このリンクは、ユーザーモジュールによって提供されます。タイトルとパスは編集できません。
これを回避するにはいくつかの方法があります。しかし、私は自分のカスタムブロックを作成し、そこにアカウントページへのリンクを手動で配置するのが最も速くて簡単だと思います。まず、ブロックレイアウトから 'User Account Menu'ブロックを削除する必要があります。次に、「カスタムブロックレイアウト」タブをクリックし、「カスタムブロックを追加」をクリックします。
そこから、独自のカスタムリンクを作成できます。
この例では、ログアウトしたユーザー用のカスタムリンクを作成しました。保存すると、ブロックを表示セクションに表示するかどうかの条件に関する一連のオプションが表示されます。このブロックをログインしたユーザーのみに表示する場合は、[役割]タブをクリックして[匿名]をオンにします。そして、それをリージョンに割り当てていることを確認してください。
これが完了したら、今回は「認証済みユーザー」を除いて、プロセスを繰り返す必要があります。
answer の@Mattで説明されているように、メニューリンクはユーザーモジュールによって提供され、それを使用しないことを決定し、独自のリンクを作成できます。
ユーザーモジュールのリンクはダイナミックリンクであり、ユーザーが認証されているかどうかに応じて、メニューリンクプラグインが異なるタイトルを生成します。
タイトルを変更するには、このプラグインクラスを置き換えます。
/**
* Implements hook_menu_links_discovered_alter().
*/
function mymodule_menu_links_discovered_alter(&$links) {
$links['user.logout']['class'] = 'Drupal\mymodule\Plugin\Menu\MyLoginLogoutMenuLink';
}
そして、メソッドgetTitle()を独自のコンテンツでオーバーライドします。
mymodule/src/Plugin/Menu/MyLoginLogoutMenuLink.php:
<?php
namespace Drupal\mymodule\Plugin\Menu;
use Drupal\user\Plugin\Menu\LoginLogoutMenuLink;
class MyLoginLogoutMenuLink extends LoginLogoutMenuLink {
public function getTitle() {
if ($this->currentUser->isAuthenticated()) {
return $this->t('My Log out');
}
else {
return $this->t('My Log in');
}
}
}
3番目のオプションは、英語から英語への翻訳のタイトルを変更することです。 英語に翻訳するにはどうすればよいですか?
これは私にとって最も速い方法でした。このコードをカスタムモジュール内で実行する必要がありました。
function mymodule_link_alter(&$variables) {
if ($variables['text'] == 'My account') {
$variables['text'] = t('Account');
}
if ($variables['text'] == 'Log out') {
$variables['text'] = t('Sign out');
}
}