Баг-фикс компонента Голосования: опросы

В компоненте "Голосования: опросы" для NetCat 3.5.5 (и, возможно, близких версий) допущена ошибка определения переменной в цикле, проявляющаяся при активации опции "альтернативный ответ". В результате в отчете не визуализируется подсчет "альтернативных" ответов. Несмотря на то, что компонент является частью платного модуля, с любезного разрешения NetCat мы выкладываем рецепт исправления.

Версия NetCat: Netcat 3.5.5
Скачать компонент: Attach:Netcat_VotingComponent_PhPh_2010-02-24.tpl

Для исправления бага можно в 64-й строчке "Объекта в списке" заменить $$tCount на $f_Count11.

Кроме того, можно скачать и импортировать нашу версию компонента из приложения выше. Наша версия компонента:

  • подсчитывает "альтернативные" голоса и строит график;
  • поджата по дизайну;
  • выводит список альтернативных ответов внутри админки.

Вывод списка альтернативных ответов в компоненте по умолчанию не реализован, в случае реализации необходимо активировать "перенос строки" в поле AltAnswer.

Правильный код "объекта в списке":

  1. $f_AdminButtons";
  2. if($cc_settings['PollStyle']=="open") {
  3.  
  4.     if(!poll_alreadyAnswered($classID, $f_RowID, $f_ProtectIP, $f_ProtectUsers) && $f_Active && !$admin_mode) {
  5.  
  6.         if($f_MultyAnswer) $InputType="checkbox"; else $InputType="radio";
  7.  
  8.         $result.="
  9.         <form action='/netcat/modules/poll/' method='post'>
  10.         <input type='hidden' name='catalogue' value='$catalogue'>
  11.         <input type='hidden' name='sub' value='$sub'>
  12.         <input type='hidden' name='cc' value='$cc'>
  13.         <input type='hidden' name='PollID' value='$f_RowID'>
  14.         <H2>Голосование</H2>
  15.         <table border='0' cellpadding='1' cellspacing='0'>
  16.         <tr valign='top'>
  17.          <td colspan='2'><H3>$f_Question</H3><br></td>
  18.         </tr>";
  19.  
  20.         //вывод списка вопросов
  21.         $icounter=1; while($icounter<11) {
  22.         $tAnswer="f_Answer$icounter";
  23.             if($$tAnswer) {
  24.             $result.="
  25.             <tr valign='top'>
  26.                 <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>
  27.                 <td width='100%'><label for='r${f_RowID}n$icounter'>".$$tAnswer."</label></td>
  28.             </tr>";
  29.             }
  30.         ++$icounter;
  31.         }
  32.  
  33.         $result.="
  34.         ".opt($f_Answer11,"
  35.         <tr valign='top'>
  36.             <td><input type='$InputType' id='r${f_RowID}n11' name='Answer'".opt($f_MultyAnswer, "11")." value='".opt_case($f_MultyAnswer, "1", "11")."'></td>
  37.             <td width='100%'><label for='r${f_RowID}n11'>Другой  </label><input name='AltAnswer' type='text' onfocus='r${f_RowID}n11.checked=\"checked\"'></td>
  38.         </tr>")."
  39.         <tr>
  40.         <td colspan='2'><br><input type='submit' name='poll' value='".opt_case($f_SubmitValue, $f_SubmitValue, "Голосовать")."'> &nbsp; Проголосовало: $f_TotalCount<br><br></td>
  41.         </tr>
  42.         </table>
  43.         </form><br>";
  44.  
  45.     }
  46.     else {
  47.  
  48.         if(!$f_Active) $ActiveText=" (закрыт)"; else $ActiveText="";
  49.         $result.="
  50.             <H2>Голосование</H2>
  51.         <H3>$f_Question</H3>$ActiveText<br>";
  52.  
  53.         //вывод списка ответов
  54.         $icounter=1; while($icounter<11) {
  55.         $tAnswer="f_Answer$icounter";
  56.         $tCount="f_Count$icounter";
  57.             if($$tAnswer) {
  58.             $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>";
  59.             }
  60.         ++$icounter;
  61.         }
  62.  
  63.         $result.="
  64.         ".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>")."
  65.         Проголосовало: $f_TotalCount<br><br>";
  66.         $result.= "<br>";
  67.  
  68.         if($f_Active && $f_ProtectUsers==1 && !Authorize()) $result.="<br>* Для голосования необходимо авторизоваться<br><br><hr size='1' color='#CCCCCC'><br><b>Архив опросов</b><br>";
  69.     }
  70. }
  71. else {
  72.     if(!$f_Active) $ActiveText=" (закрыт)"; else $ActiveText="";
  73.     $result.="&bull; <a href='$fullLink'>$f_Question</a>$ActiveText<br>";
  74. }
  75. $result.="

Блог

Как отресайзить картинки батчем?

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

далее

Tilda Module: интеграция NetCat с Tilda.cc

Представляем нашу новую разработку, модуль интеграции CMS NetCat с платформой Tilda.cc. Модуль дает возможностью полуавтоматически размещать классные лендинги прямо в структуре вашего сайта!

далее

Как оптимально заархивировать файлы, чтобы распаковать их средствами ISPmanager?

В определенных случаях файлы выгоднее заливать на веб-сервер в виде архива. Во-первых, если данные хорошо сжимаются, или же просто файлов очень много, это сократит время заливки. Во-вторых, в любом случае это обезопасит данные от случайного повреждения, так как при распаковке архива происходит проверка его целостности с помощью контрольной суммы (CRC). Однако, не вполне понятно, какой формат архива и тип сжатия выбирать? Мы провели небольшое экспериментальное исследование на эту тему.

далее

Как расшифровать бэкапы, зашифрованные ISPmanager?

В ISPmanager версии 5.52.0 и старше, реализована новая система резервного копирования, построенная на основе некоей ISPtar. И работает она... своеобразно. Попробуем разобраться, как именно.

далее

Весь блог тут