Como adicionar 'Bem-vindo {nome de usuário}' em blocos com o Drupal 7

15

Estou substituindo um site drupal 6 por um drupal 7, com o mesmo conteúdo. Nesse site Drupal 6, há um bloco que fica visível quando você está logado. Como cabeçalho, ele mostra a mensagem 'Bem-vindo {nome de usuário}' nesse bloco.

Estou procurando uma maneira de fazer isso no Drupal 7, tentei fazer isso com o módulo 'Token', mas não funciona. Qual é a melhor forma de fazer isso?

Guan23
fonte
Aqui está uma postagem do blog sobre isso: is.gd/j2q0Uu
AyeshK:

Respostas:

12

Em um bloco ou em um módulo personalizado que adiciona um bloco, adicione o seguinte código:

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

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

Isso é mais útil se você deseja informações atuais do usuário. Possivelmente isso também para a user_is_logged_infunção.

Chapabu
fonte
Isso funcionou bem. Encontrei a solução lendo a primeira resposta abaixo disso. No entanto, eu não sabia sobre o módulo para conteúdo php que é padrão fornecido com o Drupal, então tive que pesquisar um pouco mais. Obrigado pela sua resposta.
precisa saber é o seguinte
Não há necessidade de chamar user_is_logged_in (), pois isso está apenas fazendo o que você já está usando na variável global $ user. Basta verificar $ user-> uid conforme minha resposta abaixo.
ROOBY
5

Se você quiser fazer isso em um módulo (recomendado em vez de adicionar código php a um bloco, que não estaria no controle de versão), faça o seguinte:

(nesse caso, todo esse código entraria em um módulo personalizado chamado 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;
}

Se você deseja substituir o tema deste bloco em um tema, faça isso (no arquivo template.php do seu tema):

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

Observe que, como este é um módulo personalizado, você também pode atualizar a função do tema no módulo diretamente.

Se você não quiser usar um módulo personalizado, poderá criar um bloco personalizado com código php e adicionar isso:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}
rooby
fonte
Essa é uma ótima resposta, embora eu não esteja um pouco claro sobre o nome e o local de cada uma das funções. Aqui estão minhas suposições - você pode informar se estou correto? Supondo que o nome do tema seja theme_userwelcome, a função deve theme_userwelcome_welcome_blockser colocada no tema e não no userwelcomemódulo. Presumivelmente, a userwelcome_themefunção deve realmente ser chamada userwelcome_theme_theme(sim, 2 palavras do tema como o nome do tema substitui hook) e colocada no tema theme_userwelcome. funções userwelcome_block_viewe userwelcome_block_infopermanecer no userwelcome.
Therobyouknow 19/09/13
Atualizei a resposta com esta informação: Todo esse código se transforma em um módulo chamado userwelcome. Se você quisesse substituir o tema do bloco de um tema, usaria THEMENAME_userwelcome_welcome_block (& ​​$ variable)
#
5

Use o módulo de visualizações. Crie uma nova visualização> mostre usuários> bloqueie a exibição. Adicione filtro contextual> forneça argumento padrão> ID do usuário do usuário conectado. Configure os campos (você pode reescrever os resultados) para incluir os campos de texto / tokens ou perfil de usuário desejados. Salve e adicione bloco à região.

Feito com um módulo e sem código.

-lunk_rat

Link Swanson
fonte
Eu acredito firmemente que esta resposta merece mais votos positivos. Isso parece mais "o caminho Drupal". Se você puder resolvê-lo com a configuração, faça-o dessa maneira - em vez de usar o código.
Ideograma
@ Ideograma também é minha abordagem, e foi por isso que enviei a resposta, embora muitas das outras soluções funcionem. Parece que ele está ficando alguns votos ...
Fazer a ligação Swanson