Менеджер опросов мы трогать не будем - он к вариантам не имеет отношения. А вот в сниппет EasyPoll придется влезать. Прежде всего, очевидно, необходимо предусмотреть дополнительный параметр. Назовем его multi и вставим в код сниппета (показываем только кусочек кода):
$config['showexception'] = isset($showexception) ? $showexception == true : false; // Дополнительный параметр $config['multi'] = isset($multi) ? $multi == true : false;
Весь функционал сниппета находится в файле easypoll.class.php. Поковыряемся в его кишочках. Нам ведь немного надо, всего-то:
1. Для варианта multi вместо radio-переключателя поставить checkbox-ы.
2. При щелчке по кнопке Голосовать для всех отмеченных вариантов должно быть добавлено по одному голосу.
Решаем задачи в порядке поступления.
1. Находим в файле easypoll.class.php код, создающий форму. Вместо
$values = array( 'answer' => htmlentities($row['title'], ENT_COMPAT, 'UTF-8'), 'select' => '<input name="poll_choice" type="radio" value="' . $row['choiceid'] . '" />' );
записываем:
if ( $this->config['multi'] ) {
$values = array(
'answer' => htmlentities($row['title'], ENT_COMPAT, 'UTF-8'),
'select' => '<input name="poll_choice[]" type="checkbox" value="' . $row['choiceid'] . '" />'
);
} else {
$values = array(
'answer' => htmlentities($row['title'], ENT_COMPAT, 'UTF-8'),
'select' => '<input name="poll_choice" type="radio" value="' . $row['choiceid'] . '" />'
);
}
Обратите внимание на выделенное жирным.
Теперь, если при вызове сниппета указать параметр &multi=`1`, форма опроса будет выглядеть так:
2. Добиваемся добавления результата к нескольким вариантам. Для этого нам придется в файле easypoll.class.php организовать цикл в функции generateOutput. Вместо кода:
$success = $this->submitVote(intval($_POST['poll_choice']));
записываем: if ( $this->config['multi'] ) {
foreach ($_POST['poll_choice'] as $choice)
{
$success = $this->submitVote($choice);
}
} else {
$success = $this->submitVote(intval($_POST['poll_choice']));
} Мы добавили выделенное жирным. И это всё, что нужно.
Результаты голосования будут отображаться так:
Впрочем, они и раньше так же отображались.
Итак, мы добились требуемого - и многовариантное голосование сделали, и отображение результатов в приличном виде.
Написать комментарий
Реплика №2: 25.10.2009, 10:04:58
Реплика №1: 25.10.2009, 04:24:21