Cách thêm 'Chào mừng {tên người dùng}' trong các khối bằng Drupal 7


15

Tôi đang thay thế một trang web drupal 6 bằng một trang web drupal 7 với cùng một nội dung. Trên trang web Drupal 6 đó có một khối hiển thị khi bạn đăng nhập. Khi tiêu đề, nó hiển thị thông báo 'Chào mừng {tên người dùng}' trong khối đó.

Tôi đang tìm cách để làm điều đó trong Drupal 7, tôi đã thử làm điều này với mô-đun 'Token' nhưng tôi không hoạt động. Cách tốt nhất để làm điều này là gì?


Đây là một bài đăng trên blog về điều đó: is.gd/j2q0Uu
AyeshK

Câu trả lời:


12

Trong một khối hoặc trong một mô-đun tùy chỉnh có thêm một khối, hãy thêm đoạn mã sau:

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

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

Điều này hữu ích hơn nếu bạn muốn thông tin người dùng HIỆN TẠI. Có thể điều này cũng cho user_is_logged_inchức năng.


Điều này làm việc tốt. Tôi tìm thấy giải pháp bằng cách đọc câu trả lời đầu tiên bên dưới này. Tuy nhiên, tôi không biết về mô-đun cho nội dung php được phân phối chuẩn với Drupal, vì vậy tôi phải tìm kiếm thêm một chút. Cảm ơn vì đã trả lời.
Guan23

Không cần gọi đến user_is_logged_in () vì đó chỉ là thực hiện những gì bạn đang thực hiện bằng cách sử dụng biến toàn cầu $ user. Chỉ cần kiểm tra $ user-> uid theo câu trả lời của tôi dưới đây.
rooby

5

Nếu bạn muốn làm điều này trong một mô-đun (được khuyến nghị thay vì thêm mã php vào một khối, sau đó sẽ không nằm trong kiểm soát phiên bản), thì bạn có thể làm điều này:

(trong trường hợp này, tất cả mã này sẽ có trong một mô-đun tùy chỉnh có tên 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;
}

Nếu sau đó bạn muốn ghi đè lên chủ đề của khối này trong một chủ đề, bạn sẽ thực hiện việc này (trong tệp template.php của chủ đề của bạn):

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

Lưu ý rằng vì đây là mô-đun tùy chỉnh, bạn cũng có thể cập nhật trực tiếp chủ đề funciton trong mô-đun.

Nếu bạn không muốn sử dụng một mô-đun tùy chỉnh, bạn có thể tạo một khối tùy chỉnh bằng mã php và thêm phần này:

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

Đây là một câu trả lời tuyệt vời, mặc dù tôi không rõ về cách đặt tên và vị trí của từng chức năng. Dưới đây là những giả định của tôi - bạn có thể tư vấn nếu tôi đúng không? Giả sử tên chủ đềtheme_userwelcome, nên theme_userwelcome_welcome_blockđặt chức năng trong chủ đề chứ không phải userwelcomemô-đun. Có lẽ, userwelcome_themechức năng thực sự nên được gọi userwelcome_theme_theme(có 2 từ chủ đề là tên của chủ đề thay thế hook) & được đặt trong chủ đề theme_userwelcome. chức năng userwelcome_block_viewuserwelcome_block_infovẫn còn trong userwelcome.
trị liệu

Tôi đã cập nhật câu trả lời với thông tin này: Tất cả mã này có một mô-đun có tên userwelcome. Nếu bạn muốn ghi đè lên chủ đề của khối từ một chủ đề, bạn sẽ sử dụng THEMENAME_userwelcome_welcome_block (& ​​$ biến)
rooby

5

Sử dụng mô-đun khung nhìn. Tạo chế độ xem mới> hiển thị người dùng> hiển thị khối. Thêm bộ lọc theo ngữ cảnh> cung cấp đối số mặc định> ID người dùng từ người dùng đã đăng nhập. Định cấu hình các trường (bạn có thể viết lại kết quả) để bao gồm bất kỳ văn bản / mã thông báo hoặc trường hồ sơ người dùng nào bạn muốn. Lưu và thêm khối vào khu vực.

Thực hiện với một mô-đun và không có mã.

-lunk_rat


Tôi tin tưởng mạnh mẽ câu trả lời này giải thích nhiều hơn upvote. Điều này cảm thấy nhiều hơn 'cách Drupal'. Nếu bạn có thể giải quyết nó bằng cấu hình, thì hãy làm theo cách đó - thay vì sử dụng mã.
Ideogram

@Ideogram đó cũng là cách tiếp cận của tôi, đó là lý do tại sao tôi đã gửi câu trả lời mặc dù nhiều giải pháp khác sẽ hoạt động. Có vẻ như nó đang nhận được một số phiếu bầu ...
Link Swanson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.