IMHOblog.ORG » Веб, сайты, движки » DataLife Engine DLE ДЛЕ модули хаки простой треп » Не показывать форму голосования тем кто проголосовал
МЫСЛИ
cms,

php

,
блог
,

веб

,

движки

, женщины, записки инет натуралиста, здоровье,
интернет
, кидалы, мир, модули,

сайтостроение

, сео,
скрипты
, сплетни, феменизм, халява,
юмор
, Яндекс
ВАШЕ МНЕНИИЕ
Почему Вы здесь?

Блог у тебя класный smile
Пришел почитать умные мысли bully
Фиг знает no
Я? Где я? tongue
ПАНЕЛЬ УПРАВЛЕНИЯ
Логин:
Пароль:
 
Новые комментарии
» Есть вопросы? (4)
» Принимаю "заявки" ... (1)
» Просмотры ... (1)
» Кирилические url (2)
» Летнее время ... (5)
Найти на сайте


Точное вхождение
Подписаться на новости сайта
Введите Ваш e-mail:

Вы не робот?
Включите эту картинку для отображения кода безопасности

Отказаться о подписки

  Популярные записи в блоге

Летнее время (перевод часов, ... Сегодня ночью, множество стран мира в очередной раз перевили часы на летнее время, т.е. на один час ...

Есть вопросы? Тут посмотрел статистику посещаемости и подумалось что люди ищут ответы на различные вопросы, чаще ...

Кирилические url Вот как-то так сделал, как видете на блоге появились url в нестандартном зато кириличсеком ...

Просмотры страницы (делаем ... При просмотре новости скрипт DLE считает просмотры (если конечно включено в настройках, вот только ...

Принимаю "заявки" :) Если вам нужно сделать модуль или хак для ДЛЕ, но Вы не знаете как, то вам сюда :) жмем подробнее...

Не показывать форму голосования тем кто проголосовал

В ДЛЕ в случае если посетитель проголосовал повторно его голос неучитываестя, однако форма голосовани на сайте ему выводится как обычно, вот это мы и будем править, чесно говоря не думаю что в этом есть смысл, так как голос то всеравно не защитывается, а лишний запрос к БД нам явно не нужен.
Собсно раз уж это кому-то нужно то вперед.
Файл голосования как и положено зовется vote.php, лежит этот файл в папке engine/modules/
Открываем его и смотрим, файл то не такой и сложный, но если вы всеравно не фига не понимаете что значат эти английские слова, значки и прочее, то это и не обязательно, так как ниже инструкция как и что туда добавить.
Собсно смотрим как этот скрипт проверяет голосовал ли посетитель, видим что поверка идет через БД, сиречь скрипт просто смотрит голосовал посетитель или нет, сверяя или логин или ip (для гостей).
Собсно этого достаточно, вто только проверяет это только при самом голосовании, в принципе этого достаточно и можно дальше не читать, а просто забить, подумаешь выводиться форма, всеравно ведь дважды прголосовать не выйдет.
Я бы так и сделал, но как оказалось некоторым важно чтобы пользователь видел что уже голосовал, собсно так конечно лучше :)
Тогда нам нужно просто это проверку перенести внезависимости от того голосует посетитель или просто смотрит страницу.
Только вот тогда то будет еще один запрос к БД, а нафиг нам это нужно.
Тут напомощь придут cookie, мы будем делать запрос к бд (всеравно без него никак) но после получения результатов, вешать cookie, сиречь что запрос на одного посетилея будет только один.
Вроди бы не мало, но представьте себе если у вас будет посещаемость хотябы 5000 посетителей в день, это уже 5000 лишних запросов к БД.
Еще не передумали?
тогда вперед, мы не будем изобретать велосипед, мы его только погнем :)
В вашеназванном файле.
найти строку
  $max   = $vote_info[$rid]['vote_num'];

ниже вставить:
  if($_COOKIE['vote_'.$rid] == 'n'){$is_voted = false;}
  elseif ($_COOKIE['vote_'.$rid] == 'y') {$is_voted = true;$flag = 1;}
  elseif($_COOKIE['vote_'.$rid] != 'y') {
      $_IP = $db->safesql($_SERVER['REMOTE_ADDR']);
      if (isset($member_id['name'])) $nick = $member_id['name']; else $nick = '';
      if ($is_logged)
      $row  = $db->super_query("SELECT count(*) as count FROM ".PREFIX."_vote_result WHERE vote_id='$rid' AND name='$nick'");
      else
      $row  = $db->super_query("SELECT count(*) as count FROM ".PREFIX."_vote_result WHERE vote_id='$rid' AND ip='$_IP'");
      if ($row['count'] == 0) {$is_voted = false;setCookie("vote_".$rid, 'n', time()+31536000, "/", "site.ru");}
      else {$is_voted = true; $flag = 1;setCookie("vote_".$rid, 'y', time()+31536000, "/", "site.ru");}
  }

Как видете тут мы только перенесли проверку внезависимости от того голосует ли посетитель, ну еще добавили cookie.
Идем дальше.
найти
@unlink(ENGINE_DIR.'/cache/system/vote.php');

ниже вставить
      @unlink(ENGINE_DIR.'/cache/vote.tmp'); // Удаление кеша
      setCookie("vote_".$rid, 'y', time()+31536000, "/", "site.ru");


найти чуть ниже
      $max++;
   }
  }

ниже встаавить

$vote = dle_cache("vote");//чтение кеша
  if(!$vote){

чуть ниже найти
       $db->free();

      }

ниже встаивить
}

найти
     $entry = "<div id=\"dle-vote\">$entry</div>";

     $tpl->load_template('vote.tpl');
  $tpl->set('{list}', $entry);


Замениь
     $entry = "<div id=\"dle-vote\">$entry</div>";
     if(!$vote){$vote = $entry; create_cache ("vote", $entry);} // создание кеша
     $tpl->load_template('vote.tpl');
            $tpl->set('{list}', $vote);



файл engine/ajax/vote.php
найти
  if (!$row['count'] AND count(explode(".", $_IP)) == 4) $is_voted = false;
  else $is_voted = true;

    if ($is_voted == false) {
  
     if (!$is_logged) $nick = "guest";

      $db->query("INSERT INTO ".PREFIX."_vote_result (ip, name, vote_id, answer) VALUES ('$_IP', '$nick', '$rid', '$vote_check')");

      $db->query("UPDATE ".PREFIX."_vote set vote_num=vote_num+1 where id='$rid'");

      @unlink(ENGINE_DIR.'/cache/system/vote.php');
    }


замениь
  if (!$row['count'] AND count(explode(".", $_IP)) == 4){ $is_voted = false;}
  else {$is_voted = true;setCookie("vote_".$rid, 'y', time()+31536000, "/", "site.ru");}

    if ($is_voted == false) {
  
     if (!$is_logged) $nick = "guest";

      $db->query("INSERT INTO ".PREFIX."_vote_result (ip, name, vote_id, answer) VALUES ('$_IP', '$nick', '$rid', '$vote_check')");

      $db->query("UPDATE ".PREFIX."_vote set vote_num=vote_num+1 where id='$rid'");

      @unlink(ENGINE_DIR.'/cache/system/vote.php');
      @unlink(ENGINE_DIR.'/cache/vote.php');
   }

собсно все, результат работы можете видеть на этом блоге.
p.s.
везде по тексту изменить строку:
31536000, "/", "site.ru"
на свои данные
31536000 - это время жизни cookie в секундах
"/" папка из которой будет доступно чтение cookie (можно не менять)
"site.ru" - замените на ваш домен

Читайте также: Кирилические url, Просмотры страницы (делаем только уникальные), Ник получателя в рассылке, Делаем красивывми leech ссылки, Отправка сообщений об mysql ошибках

Ключевые теги: веб, интернет, cms, сайтостроение, скрипты, php, движки
 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Рейтинг:
  • 51
| 1 | 2 | 3 | 4 | 5 |  (голосов: 12)
Комментарии (0)  Распечатать
html-cсылка на публикацию:
BB-cсылка на публикацию:
Прямая ссылка на публикацию:  

Закладки:
Добавить на News2.ru Google slashdot YahooMyWeb Digg Technorati Delicious Забобрить эту страницу! Добавить на Newsland.ru Добавить на СМИ2 Добавить на RUmarkz Добавить на Ваау! Добавить на rucity.com Добавить в закладки МоёМесто.ru Добавить на Habr Добавить на Moi Novosti Добавить страницу к Mister Wong Добавить на Moikrug Добавить на Myscoop Добавить на 100zakladok Добавить на NewsGrad
Информация
 
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.

 
 
© 2009 ИМХО блог
Программирование: Alex
При использваонии материалов указание источника IMHOblog.ORG и гипертекстовая ссылка на http://www.imhoblog.org/ обязательны
Время генерации страницы: 0.02413 секунд
Время компиляции шаблона: 0.00111 секунд
MySQL запросов: 4 (0.00644 секунд)