Jak dodać „Welcome {nazwa użytkownika}” w blokach za pomocą Drupal 7

15

Zastępuję witrynę drupal 6 witryną drupal 7 o tej samej treści. Na tej stronie Drupal 6 znajduje się blok, który pojawia się, gdy jesteś zalogowany. Jako nagłówek pokazuje komunikat „Witamy {nazwa użytkownika}” w tym bloku.

Szukam sposobu, aby to zrobić w Drupal 7, próbowałem to zrobić z modułem „Token”, ale nie działa. Jak najlepiej to zrobić?

Guan23
źródło
Oto post na blogu na ten temat: is.gd/j2q0Uu
AyeshK

Odpowiedzi:

12

W bloku lub w niestandardowym module, który dodaje blok, dodaj następujący kod:

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

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

Jest to bardziej przydatne, jeśli chcesz AKTUALNE informacje o użytkowniku. Być może dotyczy to również user_is_logged_infunkcji.

Chapabu
źródło
To działało dobrze. Znalazłem rozwiązanie, czytając pierwszą odpowiedź poniżej. Jednak nie wiedziałem o module zawartości php, który jest standardowo dostarczany z Drupalem, więc musiałem szukać trochę dalej. Dzięki za odpowiedź.
Guan23
Nie ma potrzeby wywoływania funkcji user_is_logged_in (), ponieważ robi to, co już robisz, za pomocą zmiennej globalnej $ user. Po prostu sprawdź $ user-> uid zgodnie z moją odpowiedzią poniżej.
rooby
5

Jeśli chcesz to zrobić w module (zalecane zamiast dodawania kodu php do bloku, który wtedy nie byłby w kontroli wersji), możesz to zrobić:

(w tym przypadku cały ten kod trafiłby do niestandardowego modułu o nazwie 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;
}

Jeśli chcesz zastąpić motywowanie tego bloku motywem, zrób to (w pliku template.php motywu):

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

Pamiętaj, że ponieważ jest to moduł niestandardowy, możesz także bezpośrednio zaktualizować funkcję motywu w module.

Jeśli nie chcesz używać niestandardowego modułu, możesz utworzyć niestandardowy blok z kodem php i dodać go:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}
dureń
źródło
To świetna odpowiedź, choć jestem trochę niejasny co do nazewnictwa i lokalizacji każdej z funkcji. Oto moje założenia - czy możesz mi doradzić, czy mam rację? Zakładając, że nazwą motywu jest theme_userwelcome, funkcja powinna theme_userwelcome_welcome_blockbyć umieszczona w motywie, a nie w userwelcomemodule. Przypuszczalnie userwelcome_themefunkcja powinna być faktycznie wywołana userwelcome_theme_theme(tak 2 słowa motywu, ponieważ nazwa motywu zastępuje hook) i umieszczona w motywie theme_userwelcome. funkcje userwelcome_block_viewi userwelcome_block_infopozostać w userwelcome.
therobyouknow,
Zaktualizowałem odpowiedź o te informacje: Cały ten kod przechodzi do modułu o nazwie userwelcome. Jeśli chcesz zastąpić motywy bloku z motywu, użyj
THEMENAME_userw welcome_welcome_block
5

Użyj modułu widoków. Utwórz nowy widok> pokaż użytkowników> zablokuj wyświetlanie. Dodaj filtr kontekstowy> podaj domyślny argument> ID użytkownika od zalogowanego użytkownika. Skonfiguruj pola (możesz przepisać wyniki), aby uwzględnić dowolne pola tekstowe / tokeny lub profilu użytkownika. Zapisz i dodaj blok do regionu.

Wykonano z jednym modułem i bez kodu.

-lunk_rat

Link Swanson
źródło
Mocno wierzę, że ta odpowiedź dezerteruje więcej pozytywnych opinii. To wydaje się bardziej „drogą Drupala”. Jeśli możesz to rozwiązać za pomocą konfiguracji, zrób to w ten sposób - zamiast kodu.
Ideogram
@Ideogram, to także moje podejście, dlatego przesłałem odpowiedź, mimo że wiele innych rozwiązań będzie działać. Wygląda na to, że dostaje trochę głosów ...
Link Swanson