Баг-фикс компонента Голосования: опросы
В компоненте "Голосования: опросы" для NetCat 3.5.5 (и, возможно, близких версий) допущена ошибка определения переменной в цикле, проявляющаяся при активации опции "альтернативный ответ". В результате в отчете не визуализируется подсчет "альтернативных" ответов. Несмотря на то, что компонент является частью платного модуля, с любезного разрешения NetCat мы выкладываем рецепт исправления.
Версия NetCat: Netcat 3.5.5
Скачать компонент: Attach:Netcat_VotingComponent_PhPh_2010-02-24.tpl
Для исправления бага можно в 64-й строчке "Объекта в списке" заменить $$tCount на $f_Count11.
Кроме того, можно скачать и импортировать нашу версию компонента из приложения выше. Наша версия компонента:
- подсчитывает "альтернативные" голоса и строит график;
- поджата по дизайну;
- выводит список альтернативных ответов внутри админки.
Вывод списка альтернативных ответов в компоненте по умолчанию не реализован, в случае реализации необходимо активировать "перенос строки" в поле AltAnswer.
Правильный код "объекта в списке":
- $f_AdminButtons";
- if($cc_settings['PollStyle']=="open") {
- if(!poll_alreadyAnswered($classID, $f_RowID, $f_ProtectIP, $f_ProtectUsers) && $f_Active && !$admin_mode) {
- if($f_MultyAnswer) $InputType="checkbox"; else $InputType="radio";
- $result.="
- <form action='/netcat/modules/poll/' method='post'>
- <input type='hidden' name='catalogue' value='$catalogue'>
- <input type='hidden' name='sub' value='$sub'>
- <input type='hidden' name='cc' value='$cc'>
- <input type='hidden' name='PollID' value='$f_RowID'>
- <H2>Голосование</H2>
- <table border='0' cellpadding='1' cellspacing='0'>
- <tr valign='top'>
- <td colspan='2'><H3>$f_Question</H3><br></td>
- </tr>";
- //вывод списка вопросов
- $icounter=1; while($icounter<11) {
- $tAnswer="f_Answer$icounter";
- if($$tAnswer) {
- $result.="
- <tr valign='top'>
- <td><input type='$InputType' id='r${f_RowID}n$icounter' name='Answer"; if($f_MultyAnswer) $result.="$icounter"; $result.="' value='"; if($f_MultyAnswer) $result.="1"; else $result.="$icounter"; $result.="'".($icounter==1 ? " checked" : "")."></td>
- <td width='100%'><label for='r${f_RowID}n$icounter'>".$$tAnswer."</label></td>
- </tr>";
- }
- ++$icounter;
- }
- $result.="
- ".opt($f_Answer11,"
- <tr valign='top'>
- <td><input type='$InputType' id='r${f_RowID}n11' name='Answer'".opt($f_MultyAnswer, "11")." value='".opt_case($f_MultyAnswer, "1", "11")."'></td>
- <td width='100%'><label for='r${f_RowID}n11'>Другой </label><input name='AltAnswer' type='text' onfocus='r${f_RowID}n11.checked=\"checked\"'></td>
- </tr>")."
- <tr>
- <td colspan='2'><br><input type='submit' name='poll' value='".opt_case($f_SubmitValue, $f_SubmitValue, "Голосовать")."'> Проголосовало: $f_TotalCount<br><br></td>
- </tr>
- </table>
- </form><br>";
- }
- else {
- if(!$f_Active) $ActiveText=" (закрыт)"; else $ActiveText="";
- $result.="
- <H2>Голосование</H2>
- <H3>$f_Question</H3>$ActiveText<br>";
- //вывод списка ответов
- $icounter=1; while($icounter<11) {
- $tAnswer="f_Answer$icounter";
- $tCount="f_Count$icounter";
- if($$tAnswer) {
- $result.=$$tAnswer.poll_percentLine($classID, $f_RowID, $$tCount, 100, " (%PERCENT%)<br><img src='/images/line.gif' width='%WIDTH' height='10' border='0' alt='".$$tAnswer."'>")."<br>";
- }
- ++$icounter;
- }
- $result.="
- ".opt($f_Answer11,"Другой".poll_percentLine($classID, $f_RowID, $f_Count11, 100, " (%PERCENT%)<br><img src='/images/line.gif' width='%WIDTH' height='10' border='0' alt='Другой'>")."<br>".opt($admin_mode, "$f_AltAnswer<br>")."<br>")."
- Проголосовало: $f_TotalCount<br><br>";
- $result.= "<br>";
- if($f_Active && $f_ProtectUsers==1 && !Authorize()) $result.="<br>* Для голосования необходимо авторизоваться<br><br><hr size='1' color='#CCCCCC'><br><b>Архив опросов</b><br>";
- }
- }
- else {
- if(!$f_Active) $ActiveText=" (закрыт)"; else $ActiveText="";
- $result.="• <a href='$fullLink'>$f_Question</a>$ActiveText<br>";
- }
- $result.="