如何使用Drupal 7在块中添加“ Welcome {username}”


15

我用具有相同内容的drupal 7网站替换了drupal 6网站。在该Drupal 6网站上,当您登录时会看到一个块。该标题中的标题处显示消息“ Welcome {username}”。

我正在寻找一种在Drupal 7中执行此操作的方法,我尝试使用“令牌”模块执行此操作,但是我无法正常工作。最好的方法是什么?


这是关于此的博客文章:is.gd/j2q0Uu
AyeshK

Answers:


12

在块或添加块的定制模块中,添加以下代码:

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

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

如果您需要当前的用户信息,将更加有用。对于功能可能也是如此user_is_logged_in


这很好。我通过阅读下面的第一个答案找到了解决方案。但是,我不了解Drupal随附的php内容模块,因此我不得不进一步搜索。感谢您的回复。
Guan23 2012年

不需要调用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(用2个主题词代替主题名称hook)并放在主题中theme_userwelcome。运作userwelcome_block_viewuserwelcome_block_info保留在userwelcome
therobyouknow 2013年

我已经用以下信息更新了答案:所有这些代码都经过一个名为userwelcome的模块。如果您想从某个主题覆盖该块的主题,则可以使用THEMENAME_userwelcome_welcome_block(&$ variables)
rooby 2013年

5

使用视图模块。创建新视图>显示用户>块显示。添加上下文过滤器>提供默认参数>来自登录用户的用户ID。配置字段(您可以重写结果)以包括所需的任何文本/令牌或用户个人资料字段。保存并将块添加到区域。

完成一个模块,没有代码。

-lunk_rat


我坚信此答案值得更多支持。这感觉更像是“ Drupal方式”。如果可以通过配置解决问题,则可以采用这种方式-而不是使用代码。
Ideogram 2014年

@Ideogram也是我的方法,这就是即使许多其​​他解决方案都可以使用的原因,我提交了答案的原因。看起来好像正在获得一些选票...
Link Swanson 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.