Comment ajouter 'Welcome {username}' dans des blocs avec Drupal 7

15

Je remplace un site Web Drupal 6 par un site Web Drupal 7 avec le même contenu. Sur ce site Web Drupal 6, il y a un bloc qui apparaît lorsque vous êtes connecté. En tant qu'en-tête, il affiche le message «Bienvenue {nom d'utilisateur}» dans ce bloc.

Je cherche un moyen de le faire dans Drupal 7, j'ai essayé de le faire avec le module 'Token' mais je ne travaille pas. Quelle est la meilleure façon de procéder?

Guan23
la source
Voici un article de blog à ce sujet: is.gd/j2q0Uu
AyeshK

Réponses:

12

Dans un bloc ou dans un module personnalisé qui ajoute un bloc, ajoutez le code suivant:

if (user_is_logged_in() == TRUE) {
    global $user;

    print "Welcome " . $user->name;
}
else {
    print "Please log in.";
}

Ceci est plus utile si vous souhaitez des informations utilisateur ACTUELLES. Peut - être aussi pour la user_is_logged_infonction.

Chapabu
la source
Cela a bien fonctionné. J'ai trouvé la solution en lisant la première réponse ci-dessous. Cependant, je ne connaissais pas le module pour le contenu php fourni en standard avec Drupal, j'ai donc dû chercher un peu plus loin. Merci pour votre réponse.
Guan23
Pas besoin d'appeler user_is_logged_in () car cela fait simplement ce que vous faites déjà en utilisant la variable globale $ user. Vérifiez simplement $ user-> uid selon ma réponse ci-dessous.
rooby
5

Si vous voulez le faire dans un module (recommandé plutôt que d'ajouter du code php à un bloc, qui ne serait alors pas en contrôle de version), vous pouvez le faire:

(dans ce cas, tout ce code irait dans un module personnalisé nommé userwelcome.)

/**
 * @file
 * Adds a block that welcomes users when they log in.
 */

/**
 * Implements hook_theme().
 */
function userwelcome_theme($existing, $type, $theme, $path) {
  return array(
    'userwelcome_welcome_block' => array(
      'variables' => array('user' => NULL),
    ),
  );
}

/**
 * Implements hook_block_info().
 */
function userwelcome_block_info() {
  // This example comes from node.module.
  $blocks['welcome'] = array(
    'info' => t('User welcome'),
    'cache' => DRUPAL_CACHE_PER_USER,
  );

  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function userwelcome_block_view($delta = '') {
  global $user;
  $block = array();

  switch ($delta) {
    case 'welcome':
      // Don't show for anonymous users.
      if ($user->uid) {
        $block['subject'] = '';
        $block['content'] = array(
          '#theme' => 'userwelcome_welcome_block',
          '#user' => $user,
        );
      }
      break;
  }
  return $block;
}

/**
 * Theme the user welcome block for a given user.
 */
function theme_userwelcome_welcome_block($variables) {
  $user = $variables['user'];
  $output = t('Welcome !username', array('!username' => theme('username', array('account' => $user))));
  return $output;
}

Si vous vouliez alors remplacer le thème de ce bloc dans un thème, vous le feriez (dans votre fichier template.php de votre thème):

/**
 * Theme the userwelcome block.
 */
function THEMENAME_userwelcome_welcome_block(&$variables) {
  // Return the output of the block here.
}

Notez que comme il s'agit d'un module personnalisé, vous pouvez également mettre à jour directement la fonction de thème dans le module.

Si vous ne souhaitez pas utiliser un module personnalisé, vous pouvez créer un bloc personnalisé avec du code php et ajouter ceci:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}
rooby
la source
C'est une excellente réponse, bien que je ne sois pas très clair sur le nom et l'emplacement de chacune des fonctions. Voici mes hypothèses - pouvez-vous me dire si j'ai raison? En supposant que le nom du thème est theme_userwelcome, la fonction doit theme_userwelcome_welcome_blockêtre placée dans le thème et non dans le userwelcomemodule. Vraisemblablement, la userwelcome_themefonction devrait en fait être appelée userwelcome_theme_theme(oui 2 mots de thème comme nom du thème remplace hook) et placée dans le thème theme_userwelcome. fonctions userwelcome_block_viewet userwelcome_block_inforester userwelcome.
therobyouknow
J'ai mis à jour la réponse avec cette info: Tout ce code va dans un module nommé userwelcome. Si vous vouliez remplacer le thème du bloc à partir d'un thème, vous utiliseriez THEMENAME_userwelcome_welcome_block (& ​​$ variables)
rooby
5

Utilisez le module de vues. Créez une nouvelle vue> afficher les utilisateurs> bloquer l'affichage. Ajouter un filtre contextuel> fournir l'argument par défaut> l'ID utilisateur de l'utilisateur connecté. Configurez les champs (vous pouvez réécrire les résultats) pour inclure le texte / les jetons ou les champs de profil utilisateur que vous souhaitez. Enregistrez et ajoutez un bloc à la région.

Fait avec un module et aucun code.

-lunk_rat

Lien Swanson
la source
Je crois fermement que cette réponse mérite plus de votes positifs. Cela semble plus «à la manière de Drupal». Si vous pouvez le résoudre avec la configuration, faites-le de cette façon - plutôt qu'en utilisant du code.
Idéogramme
@Ideogram c'est mon approche aussi, c'est pourquoi j'ai soumis la réponse même si la plupart des autres solutions fonctionneront. On dirait qu'il obtient des votes ...
Link Swanson