Displaying Nodeprofile Fields for a User within a Node

I was banging my head against the wall this weekend trying to remember how to display nodeprofile fields with user information. It's actually really easy and I thought I should write a post about how to do it for the next time I forget.

In this case, I have a content type called 'myuserprofile' that is selected as the content type to use for nodeprofiles. In my myuserprofile content type, I have a field for users to enter their favorite food.

There are two easy ways of displaying this information. First, we can grab and display it within a node. For example, say that I want to display a user's favorite food on a page if that user is logged in. To do so, the following would work:

<?php
global $user;
//checking if a user is logged in
if ($user->uid):
//load the nodeprofile user profile for the currently logged-in user
$profile = node_load(array('type'=>'myuserprofile', 'uid'=>$user->uid));
//print out the user's favorite food
print $profile->field_favorite_food[0]['value'];
?>

A second approach to displaying this information, is to put the following in the _phptemplate_variables function of template.php.

<?php
function _phptemplate_variables($hook, $vars = array()) {
switch (
$hook) {
    case
'node':
     
//checking if a user is logged in
   
if ($user->uid):
       
$vars['profile'] = node_load(array('type'=>'myuserprofile', 'uid'=>$user->uid));
       
$vars['favorite_food'] = $vars['profile']->field_favorite_food[0]['value'];
    endif;
    break;
    }
    return
$vars;
}
?>

Then, I can display the favorite food information on a page with:

<?php
global $user;
print
$favorite_food;
?>