Sannis Опубликовано 13 Июня 2007 Жалоба Поделиться Опубликовано 13 Июня 2007 Название: (SnS) AJAX Голосование в опросахДобавил: SannisДобавлен: 13 Июн 2007Обновлен: 01 Сен 2007Категория: IP.Board 2.3.x Эта модификация затрагивает систему голосования на форуме, после её установки все действия с опросами( голосование,просмотр результатов, отказ от голосования) не будут требовать перезагрузки страницы. Навеяно vkontakte.ru Адаптацию для модов множественного и публичного голосования к 2.1.x см. в первом ответе темы поддержки. Arhar, спасибо! P.S. Для желающих отблагодарить автора - реквизиты в профиле. Нажмите здесь, чтобы скачать файл Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 13 Июня 2007 Жалоба Поделиться Опубликовано 13 Июня 2007 Сделал адаптацию под мод МультиВыбор и Публичные Опросыитак есть только один трабл, отменить решение нельзятоесть если ткнул галочку, то в яваскрипте уже добавилось но это не большая проблема, думаю решаемо как в яваскрипте убрать из массива элемент, если по такому индексу он уже присутствует? всерешилдля мода Multiply Choise && Public Pollsxmlout.phpфункция poll_voteзаменить текст функции целиком на $topic_id = intval( $_REQUEST['t'] ); $md5_check = substr( $this->ipsclass->parse_clean_value( rawurldecode( $_REQUEST['md5check'] ) ), 0, 32 ); $_REQUEST['choice'] = unserialize($_REQUEST['choice']); require_once( ROOT_PATH."sources/action_public/topics.php" ); $topics = new topics(); $topics->ipsclass =& $this->ipsclass; $topics->topic_init(); $topics->build_permissions(); $topics->topic['tid'] = $topic_id; //----------------------------------------- // Save members vote //----------------------------------------- if( $md5_check != $this->ipsclass->return_md5_check() ) { $this->return_string('error1'); } $vote_cast = array(); $this->ipsclass->load_language('lang_topic'); //----------------------------------------- // Permissions check //----------------------------------------- if ( !$topics->can_vote ) { $this->return_string('error2'); } //----------------------------------------- // Make sure we have a valid poll id //----------------------------------------- if ( !$topic_id ) { $this->return_string('error3'); } //----------------------------------------- // Load the topic and poll //----------------------------------------- $this->ipsclass->DB->cache_add_query( 'poll_get_poll_with_topic', array( 'tid' => $topic_id ) ); $this->ipsclass->DB->cache_exec_query(); $topics->topic = $this->ipsclass->DB->fetch_row(); //----------------------------------------- // No topic? //----------------------------------------- if ( !$topics->topic['tid'] ) { $this->return_string('error4'); } //----------------------------------------- // Locked topic? //----------------------------------------- if ( $topics->topic['state'] != 'open' ) { $this->return_string('error5'); } //----------------------------------------- // Have we voted before? //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'select' => 'member_id', 'from' => 'voters', 'where' => "tid={$topics->topic['tid']} and member_id=".$this->ipsclass->member['id'] ) ); $this->ipsclass->DB->simple_exec(); if ( $this->ipsclass->DB->get_num_rows() ) { $this->return_string('error6'); } //----------------------------------------- // Sort out the new array //----------------------------------------- if ( !$this->ipsclass->input['nullvote'] ) { //----------------------------------------- // First, which choices and ID did we choose? //----------------------------------------- if ( is_array( $_REQUEST['choice'] ) and count( $_REQUEST['choice'] ) ) { foreach( $_REQUEST['choice'] as $question_id => $choice_id ) { if (strpos($question_id,'_')!==false) { $qarr = explode('_',$question_id); if ($choice_id==0) continue; $question_id = $qarr[0]; $choise_id = array(); $choise_id[] = $qarr[1]; if (!is_array($_REQUEST['choice'][$question_id])) $_REQUEST['choice'][$question_id] = array($_REQUEST['choice'][$question_id]); if (!in_array($qarr[1],$_REQUEST['choice'][$question_id])) { $_REQUEST['choice'][$question_id] = array_merge($_REQUEST['choice'][$question_id],$choise_id); } } } } if ( is_array( $_REQUEST['choice'] ) and count( $_REQUEST['choice'] ) ) { foreach( $_REQUEST['choice'] as $question_id => $choice_id ) { if ( !strlen($question_id) or !isset($choice_id) or (strpos($question_id,'_')!==false)) { continue; } $vote_cast[ $question_id ] = $choice_id; } } //----------------------------------------- // Unparse the choices //----------------------------------------- $poll_answers = unserialize( stripslashes( $topics->topic['choices'] ) ); reset($poll_answers); //----------------------------------------- // Got enough votes? //----------------------------------------- if ( count( $vote_cast ) < count( $poll_answers ) ) { $this->return_string('error7'); } //----------------------------------------- // Add voter //----------------------------------------- $this->ipsclass->DB->do_insert( 'voters', array( 'member_id' => $this->ipsclass->member['id'], 'ip_address' => $this->ipsclass->ip_address, 'tid' => $topics->topic['tid'], 'forum_id' => $topics->topic['forum_id'], 'vote_date' => time(), ) ); //----------------------------------------- // Loop //----------------------------------------- foreach ( $vote_cast as $question_id => $choice_id ) { if(is_array($choice_id)) { $choice_id_array = $choice_id; } else { $choice_id_array = array($choice_id); } foreach( $choice_id_array as $choice_id_vote ) { $poll_answers[ $question_id ]['votes'][ $choice_id_vote ]++; if ( $poll_answers[ $question_id ]['votes'][ $choice_id_vote ] < 1 ) { $poll_answers[ $question_id ]['votes'][ $choice_id_vote ] = 1; } if($poll_answers[ $question_id ]['pubvote'] == "1") { if($poll_answers[ $question_id ]['voters'][ $choice_id_vote ] == '') { $poll_answers[ $question_id ]['voters'][ $choice_id_vote ] = $this->ipsclass->member['id']; } else { $poll_answers[ $question_id ]['voters'][ $choice_id_vote ] .= ','.$this->ipsclass->member['id']; } } } } //----------------------------------------- // Save... //----------------------------------------- $topics->topic['choices'] = addslashes( serialize( $poll_answers ) ); $this->ipsclass->DB->simple_exec_query( array( 'update' => 'polls', 'set' => "votes=votes+1,choices='{$topics->topic['choices']}'", 'where' => "pid={$topics->topic['poll_id']}" ) ); //----------------------------------------- // Go bump in the night? //----------------------------------------- if ($topics->topic['allow_pollbump']) { $topics->topic['last_vote'] = time(); $topics->topic['last_post'] = time(); $this->ipsclass->DB->do_update( 'topics', array( 'last_vote' => $topics->topic['last_vote'], 'last_post' => $topics->topic['last_post'] ), 'tid='.$topics->topic['tid'] ); } else { $topics->topic['last_vote'] = time(); $this->ipsclass->DB->do_update( 'topics', array( 'last_vote' => $topics->topic['last_vote'], 'last_post' => $topics->topic['last_post'] ), 'tid='.$topics->topic['tid'] ); } } else { //----------------------------------------- // Add null vote //----------------------------------------- $this->ipsclass->DB->do_insert( 'voters', array( 'member_id' => $this->ipsclass->member['id'], 'ip_address' => $this->ipsclass->ip_address, 'tid' => $topics->topic['tid'], 'forum_id' => $topics->topic['forum_id'], 'vote_date' => time(), ) ); } //----------------------------------------- // Make output html //----------------------------------------- $html = $topics->parse_poll(); foreach( $this->ipsclass->skin['_macros'] as $i => $row ) { if ( $row['macro_value'] != "" ) { $html = str_replace( "<{".$row['macro_value']."}>", $row['macro_replace'], $html ); } } $html = str_replace( "<#IMG_DIR#>", $this->ipsclass->skin['_imagedir'], $html ); $html = str_replace( "<#EMO_DIR#>", $this->ipsclass->skin['_emodir'] , $html ); //----------------------------------------- // Return poll html //----------------------------------------- @header("Content-type: text/html;charset={$this->ipsclass->vars['gb_char_set']}"); $this->print_nocache_headers(); print $html; exit; яваскрипт добавить функцию function pre_ajax_array_select(qid, cid) { n = qid + '_' + cid; if (poll_choice[ n ] == cid) { poll_choice[ n ] = 0; } else { poll_choice[ n ] = cid; } return false; } заметнить функцию function phpArraySerialize(val) на function phpArraySerialize(val) { if (val == null) { return "N;"; } else if ("length" in val) { var ser_str = ''; var l = 0; /*if ( val.length ) {*/ for( var i in val ) { r = 1; if (val[i] > 9) { r = 2; } ser_str += 's:'+ i.length +':"' + i + '";s:'+ r +':"' + val[i] + '";'; l++; } //} return 'a:' + l + ':{' + ser_str + '}'; } return "N;"; } skin_poll - poll_show_form_choice полностью на <tr> <td class="post2" colspan="3"> <if="qtype==1"> <input type="checkbox" name="choice[{$id}][]" value="$choice_id" onclick="pre_ajax_array_select({$id},{$choice_id})" class="radiobutton" /> <b>$answer</b> </if> <else> <input type="radio" name="choice[{$id}]" value="$choice_id" onclick="pre_ajax_choice_select({$id},{$choice_id})" class="radiobutton" /> <b>$answer</b></td> </else> </tr> пробуем Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 14 Июня 2007 Жалоба Поделиться Опубликовано 14 Июня 2007 Arhar, все остальное из инструкции делать также ? Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 14 Июня 2007 Жалоба Поделиться Опубликовано 14 Июня 2007 это как его там, патч различия чтоли.. Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 21 Июня 2007 Автор Жалоба Поделиться Опубликовано 21 Июня 2007 Кто-нибудь попробуйте её на 2.2.x Ссылка на комментарий Поделиться на других сайтах Прочее
h8)u Опубликовано 21 Июня 2007 Жалоба Поделиться Опубликовано 21 Июня 2007 Sannis, да, пробовал. Все классно работает. спасибо за модификацию. Ссылка на комментарий Поделиться на других сайтах Прочее
pikachu Опубликовано 23 Июня 2007 Жалоба Поделиться Опубликовано 23 Июня 2007 Спасибо, работает замечательно. Ссылка на комментарий Поделиться на других сайтах Прочее
xplode2 Опубликовано 29 Июня 2007 Жалоба Поделиться Опубликовано 29 Июня 2007 поставил на 2.2.2 есть проблема, после голосования пропадает данная тема! если создать новый опрос и проголосовать в нем тоже самое пропадает данная тема... Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 29 Июня 2007 Автор Жалоба Поделиться Опубликовано 29 Июня 2007 В каком смысле пропадает?Удаляется? Этого в коде нет Пропадает из списка тем? Посмотрите какая у вас стоит сортировка в форуме. Ссылка на комментарий Поделиться на других сайтах Прочее
xplode2 Опубликовано 29 Июня 2007 Жалоба Поделиться Опубликовано 29 Июня 2007 после того как проголосовал, и возвращаешься в список тем ее там нету... она перемещаеться в конец списка так как почему вместо к примеру: 11.04.2007, 18:43Посл. сообщение: Kenr Ставиться: --Посл. сообщение: Kenr Раньше такого небыло. Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 29 Июня 2007 Жалоба Поделиться Опубликовано 29 Июня 2007 че-то с апдейтом статистикиможет 2.2.х? Ссылка на комментарий Поделиться на других сайтах Прочее
xplode2 Опубликовано 29 Июня 2007 Жалоба Поделиться Опубликовано 29 Июня 2007 че-то с апдейтом статистикиможет 2.2.х? всмысле? не понял, у меня 2.2.2 Ссылка на комментарий Поделиться на других сайтах Прочее
xplode2 Опубликовано 3 Июля 2007 Жалоба Поделиться Опубликовано 3 Июля 2007 кто нибудь поможет мне с моей проблемой? все юзеры жалються на эту проблему. Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 8 Июля 2007 Автор Жалоба Поделиться Опубликовано 8 Июля 2007 Приехал Беглое решение(xmlout.php): //----------------------------------------- // Go bump in the night? //----------------------------------------- if ($topics->topic['allow_pollbump']) { $topics->topic['last_vote'] = time(); $topics->topic['last_post'] = time(); $this->ipsclass->DB->do_update( 'topics', array( 'last_vote' => $topics->topic['last_vote'], 'last_post' => $this->topic['last_post'] ), 'tid='.$topics->topic['tid'] ); } else { $topics->topic['last_vote'] = time(); $this->ipsclass->DB->do_update( 'topics', array( 'last_vote' => $topics->topic['last_vote'], 'last_post' => $this->topic['last_post'] ), 'tid='.$topics->topic['tid'] ); }$this->topic заменить на $topics->topic UPD: Обновил архив. Ссылка на комментарий Поделиться на других сайтах Прочее
demvrem Опубликовано 1 Августа 2007 Жалоба Поделиться Опубликовано 1 Августа 2007 Поставил где-то полмесяца назад сей мод вместе с Multiply Choise && Public Polls.Только вчера заметили одну проблему...Если нажать на кнопку "Показать результаты опроса" без предварительно голосования, то выдаёт следующее:Вот как это безобразие выглядит на FireFox: скришот раз. А вот как выглядит оно же, но на Internet Explorer'e: скриншот два.ФорумВерсия: 2.1.7 Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 1 Августа 2007 Автор Жалоба Поделиться Опубликовано 1 Августа 2007 Примечание в конце инструкции помогает? Если ошибка во втором моде, то это к Архару, у меня он не стоит Ссылка на комментарий Поделиться на других сайтах Прочее
demvrem Опубликовано 1 Августа 2007 Жалоба Поделиться Опубликовано 1 Августа 2007 Примечание в конце инструкции помогает? Если ошибка во втором моде, то это к Архару, у меня он не стоит sad.gifДа, спасибо. До этого не думал, что возникнет проблема...Кстати, почему некоторые символы (например, одинарная ковычка, а также двойные ковычки) приобразуются в нечто типа: "При быстрой цитате с bb-кодами это есть. Также в моде от Dean'a D21-Edit Forum Title & Desc Via Ajax 1.0 точно такое же проявляется.(Сорри, что вопрос в той теме) Ссылка на комментарий Поделиться на других сайтах Прочее
Mortymer Опубликовано 9 Августа 2007 Жалоба Поделиться Опубликовано 9 Августа 2007 При включении функции голосования "Позволить пользователям выбирать более одного варианта ответа"Вылетает вот такая ошибка:Ошибка[8]:Скорее всего вы не выбрали варианты во всех пунктах опроса.Как бороться? Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 9 Августа 2007 Автор Жалоба Поделиться Опубликовано 9 Августа 2007 Версия? JS ошибок нет? Ссылка на комментарий Поделиться на других сайтах Прочее
Mortymer Опубликовано 9 Августа 2007 Жалоба Поделиться Опубликовано 9 Августа 2007 2.2.2.Да вроде нет. Хотя если чесно я не знаю где лог ошибок смотреть Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 9 Августа 2007 Автор Жалоба Поделиться Опубликовано 9 Августа 2007 Тьфу. Судя по ошибке вы в xmlout.php функцию не заменили как Архар написал. Ссылка на комментарий Поделиться на других сайтах Прочее
Mortymer Опубликовано 9 Августа 2007 Жалоба Поделиться Опубликовано 9 Августа 2007 Во дела... не кажись заработало. СПС за помощь!!!Sannis респект и уважуха )))) Ссылка на комментарий Поделиться на других сайтах Прочее
demvrem Опубликовано 24 Августа 2007 Жалоба Поделиться Опубликовано 24 Августа 2007 Небольшая проблема.Если создаёшь несколько мульти-опросов, то не выбрав вариантов в одном опросе, при попытке голосования вылетает Error7 Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 25 Августа 2007 Автор Жалоба Поделиться Опубликовано 25 Августа 2007 Так и должно быть, нужно же хоть что-то ответить. В оригинале тоже была бы ошибка Ссылка на комментарий Поделиться на других сайтах Прочее
holod2007 Опубликовано 29 Августа 2007 Жалоба Поделиться Опубликовано 29 Августа 2007 На 2.3.1 мод будет работать? Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения