カスタムユーザーtwigテンプレートでユーザー名を取得する


8

定義されたコンテンツフィールドを出力できるユーザーのコンパクトディスプレイ用の小枝テンプレートがあります。そのユーザーのユーザー名を出力する方法はありますか?

回答:


10

{{ user.name.0.value }}

あなたが望むものをあなたに与えるはずです。

推奨される方法は、ユーザー名をプリプロセス関数の変数として挿入することです。これを行うには、テーマの.themeファイルを調整します

<?php

/**
 * Implements hook_preprocess_user().
 */
function yourtheme_preprocess_user(&$variables) {
  /** @var User $account */
  $account = $variables['elements']['#user'];

  $variables['username'] = $account->getDisplayName();
}

次に、ユーザーテンプレートでそれをとして使用できます{{ username }}

編集:

完全なURLを取得するには:

  • テンプレート内 {{ path('entity.user.canonical', {'user': user.id}, {}) }}
  • yourtheme_preprocess_user()で: $variables['user_url'] = Url::fromRoute('entity.user.canonical', ['user' => $account->id()])->setAbsolute()->toString();

2
hook_user_format_name()後者は、サイトがユーザー名に必要とする可能性のあるあらゆることを実行するように実行されるので推奨されます。
mpdonadio

ユーザーの前処理を使用して、ユーザーページの完全なURLを同様の方法で取得できますか?
チーズトリプル2016

ユーザーページのURLを取得する2つのメソッドを含むように応答を更新
zerolab

ご協力ありがとうございます。テンプレートメソッドは正常に機能しますが、前処理により次のエラーが発生します。回復可能な致命的なエラー:クラスDrupal \ Core \ Field \ FieldItemListのオブジェクトをDrupal \ Core \ Routing \ UrlGenerator-> doGenerate()で文字列に変換できませんでした(行192 / core / lib / Drupal / Core / Routing / UrlGenerator.php)。
チーズトリプル2016

10

表示名は、で構成できるフィールドではありません{{ content }}。ユーザーエンティティから直接取得できます。

{{ user.displayname }}

phpメソッドのリファレンス:AccountInterface :: getDisplayName


1
IMOの投票数が増えるはずです。これは、受け入れられた回答の前処理関数と同等ですが、Twigテンプレートから呼び出されます。
Cottser

間違いなく最高のソリューションです。
mrlexington

0

この回答は、特にmenu.html.twigでユーザー名を取得するためのものです

マクロを通じてユーザー名を渡すという解決策は私にとってうまくいきました。変数を設定してマクロに渡す必要があります。これらはmenu.html.twigのマクロのスコープ外であるためです。

{% set username = user.account.name %}
{{ menus.menu_links(items, attributes, 0,logged_in,username) }}
{% macro menu_links(items, attributes, menu_level,logged_in,username) %}
{{ username }}
{% endmacro %}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.