Проблема с созданием собственного блока модуля с помощью 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);
}
Любая помощь в том, как решить эту проблему, или если у кого-то есть альтернативное решение, позволяющее привлечь наибольшее количество участников за последние семь дней, было бы весьма полезно.
3 answers
Для большинства участников, внесших свой вклад, вы можете посмотреть на пользовательские точки модули, они предоставляют вам множество очень приятных функций.
Пара быстрых указателей с вашим кодом, как вы просите.
Ваш запрос должен использовать параметры и быть отформатирован в соответствии со стандартами кодирования drupal , это помогает обеспечить безопасность и переносимость. Модуль кодера может помочь вам в этом.
Чтобы получить результаты, вам, вероятно, понадобится что-то вроде db_fetch_array в цикле
$result_set = db_query("SELECT ...");
while ($result = db_fetch_array($result_set)) {
$block_content .= ...;
}
Я надеюсь, что это немного поможет.
Я внес некоторые изменения в интересную часть. Проверьте этот непроверенный код:
$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>';
}
Если у вас есть просмотры 3, дереин любезно опубликовал импорт для этого http://drupal.org/node/1186598#comment-4593972