Bagaimana cara menambahkan 'Welcome {username}' dalam blok dengan Drupal 7

15

Saya mengganti situs web drupal 6 dengan situs drupal 7 dengan konten yang sama. Di situs web Drupal 6 itu ada blok yang terlihat ketika Anda masuk. Seperti pos itu menunjukkan pesan 'Selamat datang {nama pengguna}' di blok itu.

Saya mencari cara untuk melakukan itu di Drupal 7, saya mencoba melakukan ini dengan modul 'Token' tetapi saya tidak bekerja. Apa cara terbaik untuk melakukan ini?

Guan23
sumber
Berikut adalah posting blog tentang itu: is.gd/j2q0Uu
AyeshK

Jawaban:

12

Baik di blok atau di modul khusus yang menambahkan blok, tambahkan kode berikut:

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

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

Ini lebih berguna jika Anda ingin informasi pengguna LANCAR. Mungkin ini juga untukuser_is_logged_in fungsi.

Chapabu
sumber
Ini bekerja dengan baik. Saya menemukan solusinya dengan membaca jawaban pertama di bawah ini. Namun, saya tidak tahu tentang modul untuk konten php yang standar dikirimkan dengan Drupal, jadi saya harus mencari lebih jauh. Terima kasih untuk balasan Anda.
Guan23
Tidak perlu panggilan ke user_is_logged_in () karena itu hanya melakukan apa yang sudah Anda lakukan dengan menggunakan variabel global $ user. Cukup periksa $ user-> uid sesuai jawaban saya di bawah ini.
rooby
5

Jika Anda ingin melakukan ini dalam sebuah modul (disarankan sebagai kebalikan dari menambahkan kode php ke blok, yang kemudian tidak ada dalam kontrol versi), maka Anda dapat melakukan ini:

(dalam hal ini, semua kode ini akan masuk dalam modul khusus bernama 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;
}

Jika Anda ingin mengganti tema pemblokiran ini dalam suatu tema, Anda akan melakukan ini (dalam file template.php dari tema Anda):

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

Perhatikan bahwa karena ini adalah modul khusus, Anda juga dapat langsung memperbarui fungsi tema di modul secara langsung.

Jika Anda tidak ingin menggunakan modul khusus, Anda dapat membuat blok khusus dengan kode php dan menambahkan ini:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}
jorok
sumber
Ini adalah jawaban yang bagus, meskipun saya sedikit tidak jelas tentang penamaan dan lokasi masing-masing fungsi. Inilah asumsi saya - dapatkah Anda memberi tahu jika saya benar? Dengan asumsi nama tematheme_userwelcome , fungsi theme_userwelcome_welcome_blockharus ditempatkan dalam tema bukan userwelcomemodul. Agaknya, userwelcome_themefungsi sebenarnya harus disebut userwelcome_theme_theme(ya 2 kata tema sebagai nama tema diganti hook) & ditempatkan dalam tema theme_userwelcome. fungsi userwelcome_block_viewdan userwelcome_block_infotetap userwelcome.
therobyouknow
Saya telah memperbarui jawabannya dengan info ini: Semua kode ini menggunakan modul bernama userwelcome. Jika Anda ingin mengganti tema pemblokiran dari suatu tema, Anda akan menggunakan THEMENAME_userwelcome_welcome_block (& ​​$ variabel)
rooby
5

Gunakan modul tampilan. Buat tampilan baru> tampilkan pengguna> blokir tampilan. Tambahkan filter kontekstual> berikan argumen default> ID pengguna dari pengguna yang masuk. Konfigurasikan bidang (Anda dapat menulis ulang hasil) untuk menyertakan teks / token atau bidang profil pengguna apa pun yang Anda inginkan. Simpan dan tambahkan blok ke wilayah.

Dilakukan dengan satu modul dan tanpa kode.

-lunk_rat

Tautan Swanson
sumber
Saya sangat percaya jawaban ini pantas mendapatkan lebih banyak suara. Ini terasa lebih 'cara Drupal'. Jika Anda dapat menyelesaikannya dengan konfigurasi, maka lakukan dengan cara itu - daripada menggunakan kode.
Ideogram
@Ideogram itulah pendekatan saya juga, itulah sebabnya saya mengirimkan jawaban meskipun banyak solusi lain akan berhasil. Sepertinya mendapat beberapa suara ...
Link Swanson