Проблема с созданием собственного блока модуля с помощью SQL-запроса


Я пытаюсь создать пользовательский модуль, который реализует блок для отображения того, что я не смог сделать с модулем Views 2.
Я пытался просмотреть некоторые руководства и учебные пособия, но пока не получил никакого результата.

Я могу распечатать первый атрибут SELECT в первой строке. Первая строка имеет смысл, так как я не просматриваю ее, но все еще не понимаю, как сделать остальное.

function sn_most_contributed_block($op='list', $delta=0) {
  if ($op == "list") {
    // Generate listing of blocks from this module, for the admin/block page
    $block = array();
    $block[0]["info"] = t('Most Contribution this week (custom module');
    return $block;
  } 
  elseif ($op == 'view') {    
    $mce = db_result(
      db_query("SELECT node.uid, COUNT(nid), users.picture AS users_picture, users.uid AS users_uid, users.name AS users_name, users.mail AS users_mail FROM node node INNER JOIN users users ON node.uid = users.uid WHERE (node.type IN ('leads',  'qa',  'qa_comments',  'til_salg',  'tips_tricks')) AND node.created >= UNIX_TIMESTAMP( CURDATE( ) - INTERVAL 1 WEEK ) AND node.created <= UNIX_TIMESTAMP( CURDATE( ) + INTERVAL 1 DAY ) GROUP BY uid ORDER BY COUNT(nid) DESC LIMIT 0 , 5")
    );

    $block_content .= "Most contributed members are: " . $mce';
    $block_content .= "<div class='author picture profile_image'>In here should be the user image</div>";
    $block_content .= "<div id='username'>In here should be the username</div>";

    if ($block_content == '') {   
      $block['subject'] = 'contribution test';
      $block['content'] = 'yay';
      return $block;
    }
    else {
      // set up the block  
      $block = array();
      $block['subject'] = 'Most contribution this week';  
      $block['content'] = $block_content;
      return $block;
    }
  }
}

I’ve tested my query in the database environment for my Drupal site and it works and print everything it should out correctly.

For looping the query, I tried this code with no result.

while ($contriUser = db_fetch_object($mce)) {
  $contriUser [] = $contriUser->uid;
}

I have also tried the following code.

while ($contriUser = db_fetch_object($mce)) {
  var_dump($contriUser);
}

Любая помощь в том, как решить эту проблему, или если у кого-то есть альтернативное решение, позволяющее привлечь наибольшее количество участников за последние семь дней, было бы весьма полезно.

Author: kiamlaluno, 2011-05-17

3 answers

Для большинства участников, внесших свой вклад, вы можете посмотреть на пользовательские точки модули, они предоставляют вам множество очень приятных функций.

Пара быстрых указателей с вашим кодом, как вы просите.

Ваш запрос должен использовать параметры и быть отформатирован в соответствии со стандартами кодирования drupal , это помогает обеспечить безопасность и переносимость. Модуль кодера может помочь вам в этом.

Чтобы получить результаты, вам, вероятно, понадобится что-то вроде db_fetch_array в цикле

 $result_set = db_query("SELECT ...");
 while ($result = db_fetch_array($result_set)) {
   $block_content .= ...;
 }

Я надеюсь, что это немного поможет.

 2
Author: Jeremy French, 2011-05-17 09:16:42

Я внес некоторые изменения в интересную часть. Проверьте этот непроверенный код:

$block_content = "";
$result_set = db_query("SELECT node.uid, 
  COUNT(nid), 
  users.picture AS users_picture, 
  users.uid AS users_uid, 
  users.name AS users_name, 
  users.mail AS users_mail 
  FROM {node} 
  INNER JOIN {users} ON node.uid = users.uid 
  WHERE (node.type IN ('leads',  'qa',  'qa_comments',  'til_salg',  'tips_tricks')) 
  AND node.created >= UNIX_TIMESTAMP( CURDATE( ) - INTERVAL 1 WEEK ) 
  AND node.created <= UNIX_TIMESTAMP( CURDATE( ) + INTERVAL 1 DAY ) 
  GROUP BY uid 
  ORDER BY COUNT( nid ) DESC 
  LIMIT 0 , 5"
);

$block_content .= t("Most contributed members are: ");
while ($result = db_fetch_array($result_set)) {
  $block_content .= '<div class="author picture profile_image"><img src="'.$result['users_picture'].'"/></div>';      
  $block_content .= '<div id="username">'.$result['users_name'].'</div>';
}
 1
Author: nonsenz, 2011-05-17 15:44:06

Если у вас есть просмотры 3, дереин любезно опубликовал импорт для этого http://drupal.org/node/1186598#comment-4593972

 -1
Author: swan, 2011-11-30 05:59:04