Drupal 8.x
現在 hook_preprocess_user() を使用しています。
ユーザー名を変更して、すべてのユーザー名にカスタムマークアップを追加します。
MYMODULE.module:
function MYMODULE_preprocess_user(&$variables) {
$variables['elements']['#user']->name->value = t('Name @newMarkup', ['@newMarkup' => ' Hello']);
}
これはName Hello Hello
を返します。連結により「Hello」が2回追加されるため、このアプローチは機能しません。
ser_format_name_alter(&$ name、$ account) も使用しましたが、これは私のユースケースに適合しないようです。
ユーザー名のテキストを変更するにはどうすればよいですか? 「currentUser」ソリューションを探すのではなく、すべてのユーザーが名前をどこでも変更できるようにします。参照、ビューなど.
どうも hook_user_format_name_alter()
が最善の策です。しかし、他の回答と同じように、どこでもマークアップが許可されているようには見えません。通常、ユーザー名は文字列のみが許可されます。
たとえば、以下はビューでは機能しません。文字列だけを出力します。
use Drupal\Core\StringTranslation\TranslatableMarkup;
/**
* Implements hook_user_format_name_alter().
*/
function MYMODULE_user_format_name_alter(&$name, $account) {
$name = new TranslatableMarkup('@name <span class="foo-bar">Foo Bar</span>', ['@name' => $name]);
}
/**
* Implements hook_preprocess_HOOK().
*/
function MYMODULE_preprocess_page_title(&$variables) {
if (\Drupal::routeMatch()->getRouteName() == 'entity.user.canonical') {
$name = $variables['title']['#markup']->__toString();
$variables['title'] = new TranslatableMarkup('@name <span class="foo-bar">Foo Bar</span>', ['@name' => $name]);
}
}
だから、私が今お勧めするのは、あなたは多分*_preprocess_page_title
フック–これはユーザーページで問題なく機能するため–他のすべての場所(参照、ビューなど)では、新しいカスタムフォーマッタまたは疑似フィールドを作成して、ジョブを実行することができます。
<?php
use Drupal\user\Entity\User;
// Updating a user is a three step process:
// 1) load the user object to change
// 2) set property/field to new value
// 3) Save the user object.
// This example updates the user name.
// $uid is the user id of the user user update
$user = \Drupal\user\Entity\User::load($uid);
// Don't forget to save the user, we'll do that at the very end of code.
// Modify username
$username = $user->getUsername();
$username .= " Hello";
$user->setUsername($username); // string $username: The new user name.
// The crucial part! Save the $user object, else changes won't persist.
$user->save();
// Congratulations, you have updated a user!
これは、このGithub Gistの例に基づいています。
https://Gist.github.com/dreambubbler/671afd7f962ae46687e41340b396d266