2016-01-17 7 views
1

Lorsqu'un utilisateur se connecte, il l'amène à sa page/user. Cette page contient généralement le texte par défaut: Membre pour X mois. Mais rien d'autre.Comment ajouter du code HTML personnalisé sur une page de profil utilisateur dans Drupal 8?

Vous pouvez gérer cet affichage ici: admin/config/personnes/comptes/affichage

Le problème est, ce n'est pas très évident comment ajouter plus d'informations sur cette page. J'ai préféré modifier le modèle de profil utilisateur directement, mais cela ne semble plus être utilisé sur Drupal 8.

Le type de choses que je veux ajouter:

  • Un menu icône pour des liens vers les différents aspects du compte de l'utilisateur (par exemple, factures, commandes, Modifier le compte, mes points etc)
  • blocs aléatoires de texte pour des choses comme: « factures X dues », « temps X jusqu'au prochain match commence » etc
  • informations de compte obtenu à partir d'une API externe (nom d'utilisateur, mot de passe, adresse, le total des commandes, etc.)

J'étais aller faire un "bloc drupal" et juste montrer que sur tous/user chemins, mais je ne pense pas que j'utilise la page correctement.

  1. Y a-t-il un moyen d'ajouter des champs qui peuvent être utilisés pour afficher cette information? (Alors que je peux gérer depuis admin/config/personnes/comptes/affichage)
  2. Y at-il peut-être un modèle profil d'utilisateur, je peux passer outre

Gardez à l'esprit, tout ce qui est utilisé, l'un muust utilisateur ne avoir accès à un autre profil d'utilisateur. Il ne sera utilisé que comme page de destination pour un utilisateur connecté, afin que l'utilisateur et cet utilisateur seulement puissent voir les détails sur leur compte.

MISE À JOUR

Je vois que vous pouvez remplacer user.html.twig, mais cela signifie pas PHP dans le fichier (qui est bien sûr pas une bonne façon de le faire de toute façon). Alors, comment puis-je obtenir la logique PHP sur ce modèle?

Répondre

3

Première chose: vous pouvez remplacer le modèle de profil utilisateur. Créez un template nommé user - profile.html.twig dans yourtheme/templates/dir. Dans ce fichier, vous pouvez trouver l'entité utilisateur dans {{ var_dump(user) }}. vous pouvez afficher des informations comme vous le souhaitez.

Deuxième chose: Si vous voulez des variables supplémentaires sur le profil utilisateur. vous pouvez attacher ces variables à l'utilisateur dans hook_user_load(). Dans ce crochet, vous pouvez écrire toute votre logique, vous pouvez attacher votre bloc d'ici. et accéder à ceux comme {{ user.your_variable }} dans la brindille. Comme nous ne pouvons pas écrire de code PHP dans twig, nous devons tout attacher à quelque chose de nos hooks, fonctions_modules, contrôleurs à twig. et c'est une très bonne pratique.

0

J'ai adopté la suggestion ci-dessus par @Monal Sof mais il ne fonctionne pas dans mon cas et j'ai aussi copié le fichier user.html.twig (à partir du module utilisateur) sous MYTHEME/templates/user/user.html.twig pour définir mon code personnalisé, mais il montrait sur toutes les pages de nœud.

J'ai donc utilisé hook_theme_suggestions_HOOK_alter() dans le fichier MYTHEME.theme pour définir mon modèle personnalisé pour le profil utilisateur.

Voici les étapes que j'ai suivi:

/** 
* Implements hook_theme_suggestions_HOOK_alter(). 
*/ 
function MYTHEME_theme_suggestions_user_alter(array &$suggestions, array $variables) { 
    $request = \Drupal::routeMatch()->getRouteObject(); 
    $path_args = explode('/', $request->getPath()); 
    if (\Drupal::currentUser()->isAuthenticated() && in_array('user', $path_args)) { 
    $suggestions[] = 'user__profile'; 
    } 
} 

Après cela, je l'ai mis mon modèle personnalisé sous MYTHEME/templates/user/user--profile.html.twig et vider le cache.