Данный хак позволяет выводить результаты опросов тем кто уже проголосовал на сайте.
Тоесть на данный момент с голосованием такая, может быть фишка а может не доработка, после голосования если обновить страницу то опять предлагается голосовать в том же самом опросе, хотя после повторного голосования голос и не учитывается.
Существующие решения используют постоянный дополнительный запрос проверки, что для крупных сайтов является довольно таки не желательным.
Данный хак решает все эти проблемы!
Для хака необходимо чтоб на сервере/хостинге поддерживалась система кеширования Memcache
Версия хака без использования Memcache будет выложена после новогодних праздников :))
Файл: /engine/modules/vote.php
Найти:
$max = $vote_info[$rid]['vote_num'];
Добавить ниже:
//****** VoteResult v.Memcache by MSW *** start ******//
$memcache = new Memcache();
$memcache->connect('localhost', 11211);
$arr = $memcache->get("vote_{$rid}");
if(!$arr) {
$voted_a = array();
$rowz = $db->query("SELECT name FROM ".PREFIX."_vote_result WHERE vote_id='{$rid}'");
while($r2 = $db->get_row($rowz)) {
$voted_a[]= $r2['name'];
}
$arr = implode(",",$voted_a);
$memcache->set("vote_{$rid}", $arr);
} else {
$voted_a = explode(",",$arr);
}
if(in_array($member_id['name'], $voted_a)) {
$is_voted = true;
$flag = 1;
} else {
$is_voted = false;
}
//****** VoteResult v.Memcache by MSW *** stop ******//
$memcache = new Memcache();
$memcache->connect('localhost', 11211);
$arr = $memcache->get("vote_{$rid}");
if(!$arr) {
$voted_a = array();
$rowz = $db->query("SELECT name FROM ".PREFIX."_vote_result WHERE vote_id='{$rid}'");
while($r2 = $db->get_row($rowz)) {
$voted_a[]= $r2['name'];
}
$arr = implode(",",$voted_a);
$memcache->set("vote_{$rid}", $arr);
} else {
$voted_a = explode(",",$arr);
}
if(in_array($member_id['name'], $voted_a)) {
$is_voted = true;
$flag = 1;
} else {
$is_voted = false;
}
//****** VoteResult v.Memcache by MSW *** stop ******//
Найти:
$max ++;
Добавить ниже:
//****** VoteResult v.Memcache by MSW *** start ******//
$memcache->delete("vote_{$rid}");
//****** VoteResult v.Memcache by MSW *** stop ******//
$memcache->delete("vote_{$rid}");
//****** VoteResult v.Memcache by MSW *** stop ******//
Файл: /engine/ajax/vote.php
Найти:
@unlink( ENGINE_DIR . '/cache/system/vote.php' );
Добавить ниже:
//****** VoteResult v.Memcache by MSW *** start ******//
$memcache = new Memcache();
$memcache->connect('localhost', 11211);
$memcache->set("vote_{$rid}", "");
//****** VoteResult v.Memcache by MSW *** stop ******//
$memcache = new Memcache();
$memcache->connect('localhost', 11211);
$memcache->set("vote_{$rid}", "");
//****** VoteResult v.Memcache by MSW *** stop ******//
Автор: MSW
Версия DLE: 9.0 (возможно и на других)
Сайт поддержки: _0-web.ru