web-dev-qa-db-ja.com

表示されているすべてのユーザー名にプログラムでカスタムマークアップを追加する方法

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」ソリューションを探すのではなく、すべてのユーザーが名前をどこでも変更できるようにします。参照、ビューなど.

2
Prestosaurus

どうも 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フック–これはユーザーページで問題なく機能するため–他のすべての場所(参照、ビューなど)では、新しいカスタムフォーマッタまたは疑似フィールドを作成して、ジョブを実行することができます。

3
leymannx
<?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

0
hotwebmatter