Як додати "Ласкаво просимо {ім'я користувача}" в блоки з Drupal 7


15

Я замінюю веб-сайт drupal 6 на Drupal 7 з тим самим вмістом. На цьому веб-сайті Drupal 6 є блок, який стає видимим при вході в систему. У заголовку в ньому видно повідомлення "Ласкаво просимо {ім'я користувача}".

Я шукаю спосіб зробити це в Drupal 7, я намагався це зробити за допомогою модуля "Токен", але я не працюю. Який найкращий спосіб зробити це?


Ось допис у цьому щоденнику: is.gd/j2q0Uu
АйешК

Відповіді:


12

У блоці або в спеціальному модулі, який додає блок, додайте такий код:

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

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

Це корисніше, якщо ви хочете ПОВІРИТИ інформацію користувача. Можливо, це також і для user_is_logged_inфункції.


Це спрацювало чудово. Я знайшов рішення, прочитавши першу відповідь нижче цього. Однак я не знав про модуль вмісту php, який стандартно постачається з Drupal, тому мені довелося шукати трохи далі. Спасибі за Вашу відповідь.
Гуан23

Не потрібно закликати user_is_logged_in (), оскільки це просто те, що ви вже робите, використовуючи глобальну змінну $ user. Просто перевірте $ user-> uid відповідно до моєї відповіді нижче.
rooby

5

Якщо ви хочете зробити це в модулі (рекомендується на відміну від додавання коду php до блоку, який тоді не знаходився б у контролі версій), ви можете зробити це:

(у цьому випадку весь цей код буде входити у спеціальний модуль з іменем 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;
}

Якщо ви хочете замінити тематику цього блоку на тему, ви зробите це (у файлі template.php вашої теми):

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

Зауважте, що оскільки це спеціальний модуль, ви можете також просто оновити функціонал теми в модулі безпосередньо.

Якщо ви не хочете використовувати користувальницький модуль, ви можете створити спеціальний блок із кодом php та додати це:

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

Це чудова відповідь, хоча мені трохи не зрозуміло щодо найменування та розташування кожної з функцій. Ось мої припущення - чи можете ви порадити, чи я прав? Припустимо, що назва темиtheme_userwelcome має функціонувати theme_userwelcome_welcome_blockв темі, а не в userwelcomeмодулі. Імовірно, userwelcome_themeфункцію слід насправді викликати userwelcome_theme_theme(так, два слова теми, як назва теми замінює hook) та розміщувати в темі theme_userwelcome. функцій userwelcome_block_viewі userwelcome_block_infoзалишатися в userwelcome.
therobyouknow

Я оновив відповідь з цією інформацією: Весь цей код є модулем з іменем userwelcome. Якщо ви хочете перекрити тему блоку з теми, ви використовуєте THEMENAME_userwelcome_welcome_block (& ​​$ змінних)
rooby

5

Використовуйте модуль перегляду. Створіть новий вигляд> покажіть користувачів> блок відображення. Додайте контекстний фільтр> надайте аргумент за замовчуванням> ідентифікатор користувача від входу користувача. Налаштуйте поля (ви можете переписати результати), щоб включити будь-які текстові / лексеми чи поля профілю користувача. Збережіть і додайте блок до регіону.

З одним модулем і без коду.

-lunk_rat


Я твердо вірю, що ця відповідь десертів більше прихильників. Це відчувається більше "друпальським шляхом". Якщо ви можете вирішити це за допомогою конфігурації, то зробіть це саме так - скоріше за допомогою коду.
Ідеограма

@Ideogram - це теж мій підхід, саме тому я подав відповідь, хоча багато інших рішень працюватимуть. Схоже, набирає голосів ...
Посилання Свансон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.