T. Maxx
T. Maxx

Reputation: 65

Display user's data from database on their profile pages

In Drupal 7, is it possible to show a result of a DB query on each users' respective profile page, in some table? I need to do this programmatically within my existing module. So the input to the query would be the ID of a user whose profile is currently being viewed.

Only to show the queried data - no administration, no edits, nothing else.

something along the lines of.. (image)

Also the block or field or whatever would make this possible needs to be configurable through the _permission() hook as to who can or cannot view it.

I thought since this is basically just a query with no extra custom stuff there would be an easy way via the Drupal API.

Upvotes: 0

Views: 476

Answers (3)

AddWeb Solution Pvt Ltd
AddWeb Solution Pvt Ltd

Reputation: 21681

Here you fetch user profile data from database then follow it

function modulename_menu() {
    $items['user-data'] = array(
    'title' => 'User data',
    'page callback' => 'user_data',
    'access callback' => ('user_is_logged_in'),
    '#type' => MENU_NORMAL_ITEM, 
  ); 
  return $items;    
}

function user_data(){
   global $user;
   $user_fields = user_load($user->uid);
   $output = "" //return those $user_fields values into table using theme('table',header,rows) 
   return $output; 
}

https://www.drupal.org/node/156863 (for create table view)

i.e

global $user;
$user_fields = user_load($user->uid);

$firstname = $user_fields->field_firstname['und']['0']['value'];
$lastname = $user_fields->field_lastname['und']['0']['value'];

Upvotes: 0

Swati Dave
Swati Dave

Reputation: 111

you can create custom block for that and view it in current user profile

  /**
     * Implements hook_block_info().
     */
    function custom_block_block_info() {
      $blocks = array();
      $blocks['my_block'] = array(
        'info' => t('My Custom Block'),
        'status' => TRUE,
        'region' => 'Content',
        'visibility' => BLOCK_VISIBILITY_LISTED,
        'pages' => 'user/*',
      );

      return $blocks;
    }

 /**
 * Implements hook_block_view().
 */
    function custom_block_view($delta = '') 
    {
        // The $delta parameter tells us which block is being requested.
        switch ($delta) 
        {
            case 'my_block':
                // Create your block content here
                $block['subject'] = t('This is just a test block created programatically');
                  $block['content'] = _user_detail_list();
                break;
        }

        return $block;
    }
 /**
 * Implements costome code we want to print().
 */ 
    function _user_detail_list(){
        //enter your query and output in some variable
        $value = "<p>User Detail</p>"
        return $value;
    }

Note :- Here profile is extended with new block

Upvotes: 1

salah-1
salah-1

Reputation: 1399

There will be some coding to get what you want, but if you just want style/show the data that's already available with the "user" object then #1 below will do it.

Easy way(#1): 1. Create a view and choose the "user" info that you need shown and give it a path. Then in your sub-theme use the correct template -see the code snippets. https://www.drupal.org/forum/support/post-installation/2011-04-04/modify-the-default-profile-pagelayout

other ways:

  1. use the user-profile.tpl.php see https://api.drupal.org/api/drupal/modules%21user%21user-profile.tpl.php/7.x

  2. in your module, you need to call and reach out to the hook_user_view.

    https://api.drupal.org/api/drupal/modules%21user%21user.api.php/function/hook_user_view/7.x

Upvotes: 0

Related Questions