Вывод случайного опроса

Главные вкладки

Аватар пользователя evgeniya evgeniya 13 августа 2009 в 22:06

Здравствуйте!
Подскажите пожалуйста как можно сделать блок, где выводился бы случайный опрос (в блоках есть возможность вывести только последний).

Комментарии

Аватар пользователя evgeniya evgeniya 15 августа 2009 в 14:00

а он вроде только для пятого Drupal...
может можно как-нибудь самостоятельно сделать блок для вывода случайного опроса? Вопрос: как?

Аватар пользователя evgeniya evgeniya 15 августа 2009 в 18:05

например, так:

<?
$poll = node_load(110);//110 - id опроса
if ($poll->nid)
{
$poll = poll_view($poll, TRUE, FALSE, TRUE);
}
$block['content'] = drupal_render($poll->content);
return $block['content'];
?>

можно вывести определенный опрос. А случайный-то как???

Аватар пользователя LiC LiC 19 августа 2009 в 14:40

хм.... странно.... а у меня advpoll (сори, в предыдущем посте немного с названием ошибся) стоИт...

dev-версия вполне сносно работает.

правда, прришлось ручками подправить одну ошибку (там длина прогресбара не совсем корректно иногда считается)

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

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 2 марта 2010 в 0:54
<?php$sql = "SELECT nid FROM {node} WHERE status = 1 AND type = 'poll' ORDER BY RAND() LIMIT 1";
$nid = db_result(db_query($sql));
$poll = node_load($nid);
if ($poll->nid)
{
$poll = poll_view($poll, TRUE, FALSE, TRUE);
}
$block['content'] = drupal_render($poll->content);
return $block['content'];?>

Способ не идеальный, в силу особенной работы мускуля, но рабочий

Аватар пользователя iwish iwish 13 марта 2010 в 21:35

Чтобы это сделать, я немного изменил функцию poll_block в файле /modules/poll/poll.module

Вот эта функция (Drupal 6)

<?php
/**
 * Implementation of hook_block().
 *
 * Generates a block containing the latest poll.
 */
function poll_block($op 'list'$delta 0) {
  if (
user_access('access content')) {
    if (
$op == 'list') {
      
$blocks[0]['info'] = t('Most recent poll');
      return 
$blocks;
    }
    else if (
$op == 'view') {
      
// Retrieve the random poll.
      
        // Возможно сначала узнать кол-во записей
        
$num db_result(db_query("SELECT COUNT(*) FROM {poll}"));
         
        
// Потом сгенерировать случайное число в диапазоне 0 — $num-1
        
$rnd rand(0$num-1);
        
        
// А потом на основе него выбрать запись:
        
$sql db_rewrite_sql("SELECT n.created FROM {node} n INNER JOIN {poll} p ON p.nid = n.nid ".
                              
"WHERE n.status = 1 AND p.active = 1 LIMIT $rnd,1");

        

// Стандартный запрос
        //$sql = db_rewrite_sql("SELECT MAX(n.created) FROM {node} n INNER JOIN {poll} p ON p.nid = n.nid ".
        //                      "WHERE n.status = 1 AND p.active = 1");
      
      
$timestamp db_result(db_query($sql));
      if (
$timestamp) {
        
$poll node_load(array('type' => 'poll''created' => $timestamp'status' => 1));

        if (

$poll->nid) {
          
$poll poll_view($pollTRUEFALSETRUE);
        }
      }
      
$block['subject'] = t('Poll');
      
$block['content'] = drupal_render($poll->content);
      return 
$block;
    }
  }
}
?>

Единственный минус, который я вижу в данном методе — это необходимость менять данную функцию при каждом обновлении модуля голосования.

Аватар пользователя iNFerNo iNFerNo 15 ноября 2010 в 9:41

Ребята а такой вопрос можно решить.

Если закрыть опросы то они не выводятся выводится пустой блок (т.е. ничего).

Можно как то сделать что бы выводились открытые опросы... / а то как то не айс... пустой блок...