Come aggiungere "Benvenuto {username}" in blocchi con Drupal 7


15

Sto sostituendo un sito Web drupal 6 con uno drupal 7 con lo stesso contenuto. Su quel sito Web di Drupal 6 c'è un blocco che diventa visibile quando sei loggato. Come intestazione mostra il messaggio 'Benvenuto {username}' in quel blocco.

Sto cercando un modo per farlo in Drupal 7, ho provato a farlo con il modulo 'Token' ma non funziona. Qual'è il miglior modo per farlo?


Ecco un post sul blog a riguardo: is.gd/j2q0Uu
AyeshK

Risposte:


12

In un blocco o in un modulo personalizzato che aggiunge un blocco, aggiungi il seguente codice:

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

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

Ciò è più utile se si desidera che le informazioni dell'utente CORRENTE. Possibilmente questo anche per la user_is_logged_infunzione.


Questo ha funzionato bene. Ho trovato la soluzione leggendo la prima risposta di seguito. Tuttavia, non sapevo del modulo per il contenuto php fornito di serie con Drupal, quindi ho dovuto cercare un po 'di più. Grazie per la tua risposta.
Guan23,

Non c'è bisogno della chiamata a user_is_logged_in () poiché sta facendo quello che stai già facendo usando la variabile globale $ user. Controlla $ user-> uid secondo la mia risposta qui sotto.
rooby

5

Se vuoi farlo in un modulo (consigliato invece di aggiungere un codice php a un blocco, che non sarebbe quindi nel controllo della versione), allora puoi farlo:

(in questo caso, tutto questo codice verrebbe inserito in un modulo personalizzato chiamato 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 poi volessi sovrascrivere il tema di questo blocco in un tema, lo faresti (nel tuo file template.php del tuo tema):

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

Si noti che, poiché si tratta di un modulo personalizzato, è possibile anche aggiornare direttamente la funzione del tema nel modulo.

Se non si desidera utilizzare un modulo personalizzato, è possibile creare un blocco personalizzato con codice php e aggiungere questo:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}

Questa è un'ottima risposta, anche se non sono ancora chiaro sulla denominazione e sulla posizione di ciascuna delle funzioni. Ecco i miei presupposti: puoi avvisarmi se ho ragione? Supponendo che il nome del tema sia theme_userwelcome, la funzione dovrebbe theme_userwelcome_welcome_blockessere inserita nel tema e non nel userwelcomemodulo. Presumibilmente, la userwelcome_themefunzione dovrebbe effettivamente essere chiamata userwelcome_theme_theme(sì 2 parole tema come sostituisce il nome del tema hook) e collocata nel tema theme_userwelcome. funzioni userwelcome_block_vieweuserwelcome_block_info rimanere dentro userwelcome.
therobyouknow,

Ho aggiornato la risposta con queste informazioni: tutto questo codice diventa un modulo chiamato userwelcome. Se desideri sovrascrivere il tema del blocco da un tema, utilizzeresti THEMENAME_userwelcome_welcome_block (& ​​$ variabili)
rooby,

5

Usa il modulo viste. Crea una nuova vista> mostra utenti> blocca visualizzazione. Aggiungi filtro contestuale> fornisce argomento predefinito> ID utente da utente registrato. Configura i campi (puoi riscrivere i risultati) per includere qualsiasi testo / token o campi del profilo utente che desideri. Salva e aggiungi blocco alla regione.

Fatto con un modulo e senza codice.

-lunk_rat


Credo fermamente che questa risposta meriti più voti. Questo sembra più "il modo Drupal". Se riesci a risolverlo con la configurazione, fallo in questo modo, piuttosto che usando il codice.
Ideogram,

@Ideogram è anche questo il mio approccio, motivo per cui ho inviato la risposta anche se molte delle altre soluzioni funzioneranno. Sembra che stia ottenendo dei voti ...
Link Swanson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.