Cómo agregar 'Bienvenido {nombre de usuario}' en bloques con Drupal 7

15

Estoy reemplazando un sitio web de drupal 6 por uno de drupal 7 con el mismo contenido. En ese sitio web de Drupal 6 hay un bloque que se hace visible cuando está conectado. Como encabezado, muestra el mensaje 'Bienvenido {nombre de usuario}' en ese bloque.

Estoy buscando una manera de hacerlo en Drupal 7, intenté hacer esto con el módulo 'Token' pero no funciona. ¿Cuál es la mejor manera de hacer esto?

Guan23
fuente
Aquí hay una publicación de blog sobre eso: is.gd/j2q0Uu
AyeshK

Respuestas:

12

Ya sea en un bloque o en un módulo personalizado que agrega un bloque, agregue el siguiente código:

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

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

Esto es más útil si desea información de usuario ACTUAL. Posiblemente esto también para la user_is_logged_infunción.

Chapabu
fuente
Esto funcionó bien. Encontré la solución leyendo la primera respuesta debajo de esto. Sin embargo, no sabía sobre el módulo para contenido php que se entrega estándar con Drupal, así que tuve que buscar un poco más. Gracias por su respuesta.
Guan23
No es necesario llamar a user_is_logged_in (), ya que solo está haciendo lo que ya está utilizando la variable global $ user. Simplemente marque $ user-> uid según mi respuesta a continuación.
rooby
5

Si desea hacer esto en un módulo (recomendado en lugar de agregar código php a un bloque, que luego no estaría en el control de versiones), puede hacer esto:

(en este caso, todo este código iría en un módulo personalizado llamado 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 luego desea anular el tema de este bloque en un tema, haría esto (en su archivo template.php de su tema):

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

Tenga en cuenta que debido a que este es un módulo personalizado, también puede actualizar la función de tema en el módulo directamente.

Si no desea utilizar un módulo personalizado, puede crear un bloque personalizado con código php y agregar esto:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}
robo
fuente
Esta es una gran respuesta, aunque no estoy muy claro sobre el nombre y la ubicación de cada una de las funciones. Aquí están mis suposiciones: ¿puede aconsejarme si estoy en lo correcto? Asumiendo que el nombre del tema es theme_userwelcome, debería funcionar la función theme_userwelcome_welcome_blocken el tema, no en el userwelcomemódulo. Presumiblemente, la userwelcome_themefunción en realidad debería llamarse userwelcome_theme_theme(sí, 2 palabras de tema como el nombre del tema reemplaza hook) y colocarse en el tema theme_userwelcome. funciones userwelcome_block_viewy userwelcome_block_infopermanecer en userwelcome.
therobyouknow
He actualizado la respuesta con esta información: todo este código va en un módulo llamado bienvenida del usuario. Si desea anular el tema del bloque de un tema, usaría THEMENAME_userwelcome_welcome_block (& ​​$ variables)
rooby el
5

Usar el módulo de vistas. Crear nueva vista> mostrar usuarios> bloquear pantalla. Agregar filtro contextual> proporcionar argumento predeterminado> ID de usuario del usuario conectado. Configure los campos (puede reescribir los resultados) para incluir cualquier texto / token o campo de perfil de usuario que desee. Guardar y agregar bloque a la región.

Hecho con un módulo y sin código.

-lunk_rat

Link Swanson
fuente
Creo firmemente que esta respuesta merece más votos a favor. Esto se siente más "a la manera de Drupal". Si puede resolverlo con la configuración, hágalo de esa manera, en lugar de usar el código.
Ideograma
@Ideogram también es mi enfoque, por eso envié la respuesta a pesar de que muchas de las otras soluciones funcionarán. Parece que está recibiendo algunos votos ...
Link Swanson