Hi i want to create a block using hook_block. Which will display top posters of discussion forums.
Any one who can write code for me? Thanks

Comments

asghar’s picture

/**
* Implementation of hook_block().
*/
function yourmodule_block($op = 'list', $delta = 0) {
  $block = array();
  switch ($op) {
    case 'list':
      $block[0]['info'] = t('Set a text/title/subject which show in block list');
      return $block;
    case 'view':
      switch ($delta) {
        case 0: 
          $block['subject'] = t('Sidebar Links');
          $block['content'] = "super weak";
          break;
        case 1:
          $block['subject'] = t('Your block title');
          $block['content'] = "Your Block content";
          break;
      }
      return $block;
  }
} // end function fightfi_block
hmdnawaz’s picture

I want to retrieve users from the database who are the top posters in forum discussion but using nodeapi or node_load function.

Ahmad Nawaz
Acquia Certified Developer
Email: hmdnawaz@gmail.com
Skype: hmdnawaz

Drave Robber’s picture

This would get top 5 posters and top 5 commenters and table them. You'd probably want to add some lime limit, too.

function top_forum_whores() {
  //Top posters.
  $header = array('Name', 'Posts');
  $table = array();
  $sql = db_query("SELECT u.name AS name, COUNT(n.uid) AS count FROM {node} n INNER JOIN {users} u ON u.uid = n.uid WHERE n.type = 'forum' AND n.uid <> 0 GROUP BY n.uid LIMIT 5");
  while ($row = db_fetch_object($sql)) {
    $table[] = array($row->name, $row->count);
  }
  $output .= '<h3>' . 'Top posters' . '</h3>';
  $output .= theme_table($header, $table);

  //Top commenters.
  $header = array('Name', 'Comments');
  $table = array();
  $sql = db_query("SELECT u.name AS name, COUNT(c.uid) AS count FROM {comments} c INNER JOIN {users} u ON u.uid = c.uid WHERE c.nid IN (SELECT nid FROM node WHERE type = 'forum') AND c.uid <> 0 GROUP BY c.uid LIMIT 5");
  while ($row = db_fetch_object($sql)) {
    $table[] = array($row->name, $row->count);
  }
  $output .= '<h3>' . 'Top commenters' . '</h3>';
  $output .= theme_table($header, $table);

  return $output;

Within the block, you would use

$block['content'] = top_forum_whores();

Disclaimer: I tested only the SQL part, so there may be some silly mistake within PHP part.

hmdnawaz’s picture

But i want top 5 posters without using sql queries. Using nodeapi or Variable_get() or any other method but not with queries.

Ahmad Nawaz
Acquia Certified Developer
Email: hmdnawaz@gmail.com
Skype: hmdnawaz