Holen Sie sich den Benutzernamen in der benutzerdefinierten Benutzerzweigvorlage

8

Ich habe eine Zweigvorlage für die kompakte Anzeige eines Benutzers, in der ich die definierten Inhaltsfelder ausgeben kann. Gibt es eine Möglichkeit, den Benutzernamen dieses Benutzers auszugeben?

Cheesetriple
quelle

Antworten:

10

{{ user.name.0.value }}

sollte dir geben, was du willst.

Der bevorzugte Weg ist das Einfügen des Benutzernamens als Variable in eine Vorverarbeitungsfunktion. Passen Sie dies in der .theme-Datei Ihres Themas an

<?php

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

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

dann können Sie das in Ihrer Benutzervorlage als verwenden {{ username }}.

Bearbeiten:

So erhalten Sie die vollständige URL:

  • In Ihrer Vorlage {{ path('entity.user.canonical', {'user': user.id}, {}) }}
  • In yourtheme_preprocess_user (): $variables['user_url'] = Url::fromRoute('entity.user.canonical', ['user' => $account->id()])->setAbsolute()->toString();
zerolab
quelle
2
Letzteres wird bevorzugt, damit es ausgeführt wird hook_user_format_name(), um alles zu tun, was eine Site für Benutzernamen wünscht.
mpdonadio
Kann die vollständige URL der Benutzerseite auf ähnliche Weise mithilfe des Benutzervorprozesses abgerufen werden?
Cheesetriple
Aktualisierte Antwort, um 2 Methoden
einzuschließen
Vielen Dank für deine Hilfe. Die Template-Methode funktioniert einwandfrei, aber der Vorprozess gibt den folgenden Fehler aus: Behebbarer schwerwiegender Fehler: Objekt der Klasse Drupal \ Core \ Field \ FieldItemList konnte in Drupal \ Core \ Routing \ UrlGenerator-> doGenerate () (Zeile nicht in eine Zeichenfolge konvertiert werden 192 von core / lib / Drupal / Core / Routing / UrlGenerator.php).
Cheesetriple
10

Der Anzeigename ist kein Feld, in dem Sie konfigurieren können {{ content }}. Sie können es direkt von der Benutzerentität erhalten:

{{ user.displayname }}

Referenz für die PHP-Methode: AccountInterface :: getDisplayName

4k4
quelle
1
Sollte mehr Stimmen haben IMO. Dies entspricht der Vorverarbeitungsfunktion in der akzeptierten Antwort, wird jedoch von der Twig-Vorlage aufgerufen.
Cottser
Auf jeden Fall die beste Lösung.
Mrlexington
0

Diese Antwort dient speziell dazu, den Benutzernamen in menu.html.twig abzurufen

Die Lösung, den Benutzernamen durch ein Makro zu übergeben, hat bei mir funktioniert. Das Festlegen und Übergeben einer Variablen an das Makro ist erforderlich, da diese außerhalb des Bereichs des Makros in menu.html.twig liegen

{% 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 %}
Jignesh Rawal
quelle