• Страница 1 из 1
  • 1
Форум вебмастеров-Моды и хаки для трекера » Моды и Хаки » Готовые моды и хаки » Рефералы + блок вывода
Рефералы + блок вывода
InDiGoДата: Среда, 17.08.2011, 03:18 | Сообщение # 1
Administrator
Группа: Администраторы
Сообщений: 21
Репутация: 4
Статус: Offline
1) Запрос в базу
Code
CREATE TABLE IF NOT EXISTS `referrers` (  
   `id` int(11) NOT NULL auto_increment,  
   `parse_url` varchar(255) NOT NULL,  
   `parse_ref` varchar(255) NOT NULL,  
   `uid` int(10) NOT NULL default '0',  
   `ip` varchar(15) NOT NULL,  
   `numb` int(11) NOT NULL default '0',  
   `date` datetime NOT NULL default '0000-00-00 00:00:00',  
   `lastdate` datetime NOT NULL default '0000-00-00 00:00:00',  
   PRIMARY KEY  (`id`),  
   UNIQUE KEY `downo` (`parse_url`,`parse_ref`,`ip`,`uid`),  
   KEY `count` (`parse_url`),  
   KEY `owner` (`uid`),  
   KEY `time` (`date`)  
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;  


2) в fucntions.php добавляем в конец:
Code
function parse_referer($cache=false) {  
global $refer_parse, $CURUSER;  
/// рефер данные  
$referer = (isset($_SERVER["HTTP_REFERER"]) ? htmlentities($_SERVER["HTTP_REFERER"]):"");  
if (!empty($referer))  
$parse_site = parse_url($referer, PHP_URL_HOST);  
/// собственные данные о сайте  
$site_own = (($_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://").htmlspecialchars_uni($_SERVER['HTTP_HOST']);  
if (!empty($site_own))  
$parse_owner = parse_url($site_own, PHP_URL_HOST);  
$parse_owner = str_replace("www.","", $parse_owner);  
/// сравниваем данные  
if(!empty($refer_parse) && !empty($parse_site) && !stristr($parse_site,$parse_owner) && ($parse_owner<>$parse_site)){  
$ip = getip();  
$ref = ($referer);  
$uid = $CURUSER["id"];  
if (empty($uid))  
$uid = 0;  
sql_query("INSERT INTO referrers (parse_url,parse_ref,uid,ip,date,numb,lastdate) VALUES (".sqlesc($parse_site).",".sqlesc($ref).",".sqlesc($uid).",".sqlesc($ip).",".sqlesc(get_date_time()).",1,'0000-00-00 00:00:00')");  

if (!mysql_insert_id()){  
sql_query("UPDATE referrers SET numb=numb+1,lastdate=".sqlesc(get_date_time())." WHERE uid=".sqlesc($uid)." AND ip=".sqlesc($ip)." AND parse_url=".sqlesc($parse_site)." AND parse_ref=".sqlesc($ref)) or sqlerr(__FILE__,__LINE__);  
}  

if (date('i')>=30 && date('i')<=40)  
@unlink(ROOT_PATH."cache/block-top_refer.txt");  
}  
}  


3) Создаём папку cache с правами 777 в корне трекера или меняем пути так как нам нужно

4) Файл:
referer.php - ложим в корень трекера и ставим ссылку на сайте там где нам нужно, доступ у файла начинается с модератора
Code
<?
require "include/bittorrent.php";
dbconn();
loggedinorreturn();
if (get_user_class() <= UC_MODERATOR)
  stderr("Извините", "Доступа нет!");
$h = date('H'); // проверяем час
if (($h >= 19)&&($h <= 21) || ($h >= 08)&&($h <= 10)){

global $refer_parse,$refer_day;
if ($refer_parse=="1") {

if (empty($refer_day))
$refer_day = 2;

$secs = $refer_day * (86400 * 31); // удаляем старые данные старше N месяцев

$dt = get_date_time(gmtime() - $secs);
sql_query("DELETE FROM referrers WHERE date < ".sqlesc($dt)) or sqlerr(__FILE__,__LINE__);
}
}
$d = (empty($_GET["d"]) ? "":$_GET["d"]);
$id = (empty($_GET["ass"]) ? "":$_GET["ass"]);
$r = (!is_valid_id($_GET["r"]) ? "":$_GET["r"]);
if (!empty($d) && !empty($id) && is_valid_id($id)) {
if ($d=="one"){
stdhead("Удаление реферала с базы id: $id");
$a = sql_query("SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__, __LINE__);
$a2 = mysql_fetch_assoc($a);
$count = $a2["parse_url"];
$ass = sql_query("SELECT min(id) AS mini FROM referrers AS ref WHERE ref.parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) AND ref.id<>".sqlesc($id)." ORDER BY ref.id DESC") or sqlerr(__FILE__, __LINE__);
$sqass = mysql_fetch_assoc($ass);
if (!empty($sqass["mini"]))
$r=$sqass["mini"];
if (!$count) {
stdmsg("Извините", "Нет в базе $id");
echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."".($r<>$id ? "?id=".$r:"")."\"', 5000);</script>";
stdfoot();
die;
}
else
{
sql_query("DELETE FROM referrers WHERE id=".sqlesc($id));
stdmsg("Готово", "Удален <b>$count</b>");
echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."".($r<>$id ? "?id=".$r:"")."\"', 5000);</script>";
stdfoot();
die;
}
}
elseif ($d=="all"){
stdhead("Удаление рефералов с базы id: $id");
$a = sql_query("SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__, __LINE__);
$a2 = mysql_fetch_assoc($a);
$count = $a2["parse_url"];

if (!$count) {
stdmsg("Извините", "Нет в базе рефералов для удаления по id $id");
echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 5000);</script>";
stdfoot();
die;
}
else  
{
sql_query("DELETE FROM referrers WHERE parse_url=".sqlesc($count))or sqlerr(__FILE__, __LINE__);
stdmsg("Готово", "Удалены все рефералы по сайту <b>$count</b>");
echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 5000);</script>";
stdfoot();
die;
}
}
else
echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 1000);</script>";
}
$id = (empty($_GET["id"]) ? "":$_GET["id"]);
if (!empty($id) && is_valid_id($id)) {
$count = get_row_count("referrers","WHERE parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1)");
if (!empty($count)){
$ass = sql_query("SELECT min(id) AS mini,(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) AS parse_url FROM referrers AS ref WHERE ref.parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) ORDER BY ref.id DESC") or sqlerr(__FILE__, __LINE__);
$sqass = mysql_fetch_assoc($ass);
$mini=$sqass["mini"];
stdhead("Просмотр реферала с ".$sqass["parse_url"]);
}
else
{
stdhead("Нет значения в базе для ".$id);
stdmsg("Извините", "В базе нет значений для ".$id);
echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 3000);</script>";
stdfoot();
exit;
}
echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">";
echo "<tr>
<td class=colhead colspan=\"3\" width=\"100%\">Главная <a href=\"referer.php\" class=\"altlink_white\">Рефералов</a><br>Просмотр реф ссылок по ".$sqass["parse_url"]." (".$count.")</td></tr>";
echo "</table>";
$limited = 500;
list($pagertop, $pagerbottom, $limit) = pager($limited, $count, "referer.php?id=".$id."&");  
$a = sql_query("SELECT * FROM referrers AS ref WHERE ref.parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) ORDER BY ref.id DESC $limit") or sqlerr(__FILE__, __LINE__);
$c=1;
echo $pagertop;
echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">";
echo "<tr>
<td class=colhead width=\"5%\">#</td>
<td class=colhead align=\"left\">Реферальный откуда</td>
<td class=colhead width=\"20%\" align=\"left\">ip адрес / количество</td>
<td class=colhead width=\"20%\">Добавление / Обновление</td>
</tr>\n";
while($sqlrow = mysql_fetch_assoc($a)){
if (!empty($sqlrow["uid"])){
$ara = sql_query("SELECT username,class FROM users WHERE id=".sqlesc($sqlrow["uid"])." ORDER BY last_access DESC LIMIT 1") or sqlerr(__FILE__, __LINE__);
$row = mysql_fetch_assoc($ara);
}
if ($c%2==0) {
$class="a"; $class2="b";  
} else {
$class="b";   
$class2="a";
}
$parse_url=htmlspecialchars_decode($sqlrow['parse_url']);
$parse_ref=htmlspecialchars_decode($sqlrow['parse_ref']);
$parse_ref = str_replace($parse_url,"<b><a href='".$parse_ref."' target='_blank'>".$parse_url."</a></b>",$parse_ref);
echo "
<tr align=center>
<td class=".$class." width=\"5%\">".$sqlrow['id']."</td>
<td class=".$class2." align=\"left\">".$parse_ref."
<div align=\"right\">".(!empty($sqlrow["uid"]) ? "Вход от <a href=\"userdetails.php?id=".$sqlrow['uid']."\">
".get_user_class_color($row['class'],$row['username'])."</a> ":"")."
<a href=\"referer.php?d=one&ass=".$sqlrow['id']."&r=".$mini."\"><font color=red alt=\"Удалить этот реферал\">X</font></a>
</div>
</td>
<td class=".$class." width=\"20%\" align=\"left\"><a href=\"usersearch.php?ip=".$sqlrow['ip']."\">".$sqlrow['ip']."</a> <b>(".$sqlrow['numb'].")</b></td>
<td class=".$class2." width=\"20%\">".normaltime($sqlrow["date"],true)." <br>
".($sqlrow["lastdate"]=="0000-00-00 00:00:00" ? "обновления нет":normaltime($sqlrow["lastdate"],true))."</td>
</tr>\n";
++$c;
unset($row['class'],$row['username']);
}
echo "</table>";
echo $pagerbottom;
stdfoot();
die;
}
stdhead("ТОП сайтов, от которых мы получаем посетителей");
$count = get_row_count("referrers");  
$a = sql_query("SHOW INDEXES FROM referrers WHERE Key_name = 'count'") or sqlerr(__FILE__, __LINE__);
$sq= mysql_fetch_assoc($a);
$count=$sq["Cardinality"];
if (!$count) {
stdmsg("Извините", "В базе нет значений");
stdfoot();
exit;
}
echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">";
echo "<tr>
<td class=colhead colspan=\"3\" width=\"100%\">Главная Рефералов <br>Все входы с внешних рессурсов, включая первое / последнее вхождение, ip адреса пользователей и количество входов по реферальному сайту.</td></tr>";
if (empty($refer_parse))
echo "<tr><td align=\"center\" class=\"a\" colspan=\"3\" width=\"100%\">Функция записи рефералов отключена.</td></tr>";
echo "</table>";
$limited = 300;
list($pagertop, $pagerbottom, $limit) = pager($limited, $count, "referer.php?");  
echo $pagerbottom;
echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">";
echo "<tr>
<td class=colhead width=\"10%\"># в базе</td>
<td class=colhead>Реферальный сайт</td>
<td class=colhead width=\"20%\">Дата добавления</td>
</tr>\n";
$a = sql_query("SELECT *,(SELECT COUNT(*) FROM referrers WHERE referrers.parse_url=ref.parse_url) AS vhozh FROM referrers AS ref GROUP BY ref.parse_url ORDER BY ref.id DESC $limit") or sqlerr(__FILE__, __LINE__);
$c=1;
while($sqlrow = mysql_fetch_assoc($a)){
if ($c%2==0) {
$class="a"; $class2="b";  
} else {
$class="b";   
$class2="a";
}
$parse_url=htmlspecialchars_decode($sqlrow['parse_url']);
echo "
<tr align=center>
<td class=".$class." width=\"10%\">".$sqlrow['id']."</td>
<td class=".$class2.">".$parse_url." <a href=\"referer.php?id=".$sqlrow['id']."\" class=\"altlink_white\">(".$sqlrow['vhozh'].")</a>  
<div align=\"right\">
<a href=\"referer.php?d=all&ass=".$sqlrow['id']."\"><font color=red alt=\"Удалить с базы все рефералы по этому сайту\">X</font></a>
</div>
</td>
<td class=".$class." width=\"20%\">".normaltime($sqlrow["date"],true)."</td>
</tr>\n";
++$c;
}
echo "</table>";
stdfoot();
?>

и block-top_refer.php - в папку blocks и подключаем его! Блок на кеше, путь сохранения кеша папка cache/ в корне трекера, также пути сменить можно.
Code
<?
if (!defined('BLOCK_FILE')) {
header("Location: ../index.php");
exit;
}
// начинаем кешировать
$cacheStatFile = "cache/block-top_refer.txt";  
$expire = 60*60; // 60 минут на кеш, после обновление  
if (file_exists($cacheStatFile) && filesize($cacheStatFile)<>0 && filemtime($cacheStatFile) > (time() - $expire)) {  
    $content.=file_get_contents($cacheStatFile);  
} else  
{
// тело - то, что кешируем - начало
global $refer_parse;

if ($refer_parse==1){
$content .= "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\" class=\"table>\"";  

$content .= "<tr><td align=\"center\" class=\"colhead\">Топ 15</td></tr>";  
$count = number_format(get_row_count("referrers"));

$maxdt = get_date_time(gmtime() - 86400*31);  /// если месяц назад

$zapros = sql_query("SELECT parse_url, parse_ref, COUNT(*) AS coun FROM referrers
WHERE date > ".sqlesc($maxdt)." GROUP BY parse_url ORDER BY (SELECT COUNT(*) FROM referrers AS rf WHERE rf.parse_url=referrers.parse_url AND date > ".sqlesc($maxdt).") DESC LIMIT 15") or sqlerr(__FILE__, __LINE__);  

$number=0;

while ($row = mysql_fetch_array($zapros)) {

if ($number%2==0) {
$class="a"; $class2="b";  
} else {
$class="b";   
$class2="a";
}
$parse_ref = htmlspecialchars_decode($row["parse_ref"]);  
$parse_url = htmlspecialchars_decode($row["parse_url"]);
$content .= "<tr><td align=\"center\" class=\"".$class2."\"><a title=\"".$row["coun"]." посещений\" rel=\"nofollow\" href=\"".$parse_ref."\">".$parse_url."</a></td></tr>";  
++$number;
}
if ($number==0) {
$content .= "<tr><td align=\"center\" class=\"$class2\">Данных нет</td></tr>";  
}
else
$content .= "<tr><td align=\"center\" class=\"colhead\">Всего данных: ".$count."</td></tr>";  

$content .= "</table>";  
}
else  
{
$content .= "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\" class=\"table>\"";  
$content .= "<tr><td align=\"center\" class=\"$class2\"><b>Функция отключенна</b></td></tr>";  
$content .= "</table>";  
}

$blocktitle = "Рефералы";
// тело - то, что кешируем - конец

$fp = fopen($cacheStatFile,"w");
    if($fp)
    {  
     fputs($fp, $content);  
     fclose($fp);  
    }
  }
// заканчиваем кешировать
?>

5)
Code
parse_referer();  

- ставим вызов функции на файлы которые нам нужно чтобы с них шёл весь учёт посещалки! Если не хотите лишней мороки с поиском файлов то поставьте вызов в файл themes/имя вашей темы/stdhead.php примерно таким способом

Code
<?   
parse_referer("");  
?>

6) добавляем ниже код в include/config.php
Code
$refer_parse = 1; // Включить рефер функцию (показ в блоке block-top_refer)   
поясняю: 1 - включено  
2 - выключено    
$refer_day = 6; // Удалять истекшие рефер ссылки спустя N мес

поясняю:
6 - число месяцев


я бы изменил мир, но бог не даёт исходники
 
Форум вебмастеров-Моды и хаки для трекера » Моды и Хаки » Готовые моды и хаки » Рефералы + блок вывода
  • Страница 1 из 1
  • 1
Поиск: