[themes] User info in blocks

Florian Loretan floretan at gmail.com
Thu Feb 7 20:40:32 UTC 2008


The $node variable is not defined in hook_block.

What you need to do is make sure you are indeed on a node page of type
"blog", and then load the information from the url in the 'display'
section of your hook_block:

if (arg(0) == 'node' && is_numeric(arg(1))) {
  $node = node_load(array('nid' => arg(1)));
  if ($node->type == 'blog') {
    $author = user_load(array('uid' => $node->uid));
    $block['subject'] = t('About the author');
    $block['content'] = theme('username', $author); // do whatever you
want to create the content of your block using $node and $author
    // ...

    return $block;
  }
}
else {
  return; // you want to make sure this block is not displayed on other pages.
}

On Feb 7, 2008 12:24 PM, Tony Yarusso <tonyyarusso at gmail.com> wrote:
> I'm trying to put together a block that will display additional information
> on users' blog pages.  The person I'm working with wants some of the more
> "traditional" blog stuff, like a user picture, short bio, blogroll, and
> archives links shown in the sidebar.  All of the actual information is
> supported by other modules, so I just need to be able to access it from
> within my theme.  Essentially, what I'm going for is to load this block
> whenever the node type is 'blog post', and populate it with the content
> matching the author of the node.
>
> I am using a small snippet of code that someone else gave me already for
> displaying a title.  This is residing in node-blog.tpl.php right now and
> works fine:
> <?php $the_user = user_load(array('uid' => $node->uid)); ?>
> <?php if ($the_user->profile_blog_title != ""): ?>
>   <h2><?php print $the_user->profile_blog_title ?></h2>
>   <?php else: ?>
>   <h2><?php print $node->name . "'s blog" ?></h2>
> <?php endif; ?>
>
> What I've been using so far in my module's implementation of hook_block
> looks like this, which is just worrying about the picture for now:
>         case 'view':
>             $block['subject'] = t('Blog');
>              $the_user = user_load(array('uid' => $node->uid));
>                 $user_pic = $the_user->picture;
>             $block['content'] = $user_pic;
>             return $block;
>
> However, this does not return anything, and upon further investigation with
> print_r(), it appears to be returning the anonymous user from 'uid', which
> of course doesn't have a picture associated with it.  Part of what I'm not
> sure about is whether I can access the node information ($node->uid) from
> within the block, since it's in the sidebar, not the main content area where
> the node is loaded.  Please excuse me as I'm very new to PHP and Drupal
> development, but looking to learn.
>
> --
> Tony Yarusso
> http://tonyyarusso.com/
> _______________________________________________
> themes mailing list
> themes at drupal.org
> http://lists.drupal.org/mailman/listinfo/themes
>
>


More information about the themes mailing list