Как добавить 'Welcome {username}' в блоки с Drupal 7


15

Я заменяю сайт drupal 6 на сайт drupal 7 с тем же содержанием. На этом сайте Drupal 6 есть блок, который виден, когда вы вошли в систему. В качестве заголовка в этом блоке отображается сообщение «Welcome {username}».

Я ищу способ сделать это в Drupal 7, я пытался сделать это с помощью модуля 'Token', но у меня ничего не получается. Какой лучший способ сделать это?


Вот сообщение в блоге об этом: is.gd/j2q0Uu
AyeshK

Ответы:


12

Либо в блоке, либо в пользовательском модуле, который добавляет блок, добавьте следующий код:

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

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

Это более полезно, если вы хотите получить текущую информацию о пользователе. Возможно, это также для user_is_logged_inфункции.


Это работало нормально. Я нашел решение, прочитав первый ответ ниже. Тем не менее, я не знал о модуле для php-контента, который стандартно поставляется с Drupal, поэтому мне пришлось искать немного дальше. Спасибо за ответ.
Guan23

Нет необходимости в вызове user_is_logged_in (), поскольку он просто делает то, что вы уже делаете, используя глобальную переменную $ user. Просто проверьте $ user-> uid согласно моему ответу ниже.
Роби

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(да, 2 слова темы заменяют название темы hook) и помещены в тему theme_userwelcome. функции userwelcome_block_viewи userwelcome_block_infoостаются в userwelcome.
therobyouknow

Я обновил ответ этой информацией: Весь этот код отправляется в модуль с именем userwelcome. Если вы хотите переопределить тему блока из темы, вы должны использовать THEMENAME_userwelcome_welcome_block (& ​​$ variable)
rooby

5

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

Сделано с одним модулем и без кода.

-lunk_rat


Я твердо верю, что этот ответ заслуживает больше голосов. Это больше похоже на путь Drupal. Если вы можете решить это с помощью конфигурации, то сделайте это таким образом, а не с помощью кода.
Идеограмма

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