Сообщество uSite — Мгновенное оповещение как на ВК - Веб-мастерская - PHP - Форум
Мгновенное оповещение как на ВК
Бывалый
321 сообщениий
Мужчина
Всем привет, вот решил написать небольшой скрипт мгн. оповещений как на ВК. Работаем по тому же принципу как и в теме мгн. обновления: http://usite.su/forum/31-3667-1 В любом шаблоне перед
пишем:
Code
<div class="uBox"></div>
создаём папку js и в ней два файла: cookie.js, ualert.js и вставляем перед В ualert.js пишим:
Code
setTimeout(function () { var source = new EventSource('/php/evstream/index.php'); source.addEventListener('message', function(e) { // Пришли какие-то данные var data = e.data; data = data.split('alert: '); eval('var newalert = '+data[1]+';'); for( i = 0; i < 4; i++ ){ if(!$('#uBox_'+newalert[i].id).html() && cookie('uBox_'+newalert[i].id)==null){ $('#pmm_player').remove(); $('body').append('<embed type="application/x-shockwave-flash" id="pmm_player" src="http://upost.su/flash/player.swf?song_url=http://upost.su/u/mp3/new_ls.mp3&autoplay=1&loop=0" width="0" height="0"/>'); $('.uBox').animate({bottom:'10'}, {queue:false}).fadeIn().append('<div class="uBoxMesssge" id="uBox_'+newalert[i].id+'"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td colspan="2" valign="top" align="left" class="uBoxTitle"><div class="uBox_close"><a class="uBox_close_s" title="Закрыть" href="javascript://" onclick="ualert_hide('+newalert[i].id+')"></a></div><b>Новое уведомление от '+newalert[i].title+'</b></td></tr><tr><td rowspan="2" width="50px" valign="top"><a href="/index/8-0-"><img class="uBoxAva" src="'+newalert[i].photo+'" border="0"></a></td><td valign="top" align="left" class="uBoxTheme">Тема: '+newalert[i].message+'</td></tr><tr><td valign="top" align="left" class="uBoxMessaged"><a style="word-wrap:break-word;text-decoration:none;text-align:left" href="javascript://"></a></td></tr></table></div>'); } } }, false); source.addEventListener('open', function(e) { // Соединение было открыто }, false); source.addEventListener('error', function(e) { if (e.eventPhase == EventSource.CLOSED) { // Соединение закрыто } }, false); }, 5); function ualert_hide(id){ cookie('uBox_'+id, '1', {expires: 1}); $('#uBox_'+id).animate({bottom:'10'}).fadeOut(); }
В cookie.js пишим:
Code
function cookie(name, value, options) { if (typeof value != 'undefined') { options = options || {}; if (value === null) { value = ''; options.expires = -1; } var expires = ''; if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { var date; if (typeof options.expires == 'number') { date = new Date(); date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); } else { date = options.expires; } expires = '; expires=' + date.toUTCString(); } var path = options.path ? '; path=' + (options.path) : ''; var domain = options.domain ? '; domain=' + (options.domain) : ''; var secure = options.secure ? '; secure' : ''; document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); } else { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } };
Создаём в папке php папку evstream , в ней создаём 2 файла: base.php, index.php Своего рода базой является base.php, в нём пишем:
Code
<? /* //Автор: faforty Файл: base.php Назначение: исполняет роль базы оповещений */ if (! defined ( 'FAFORTYDEV' )) { die ( "Hacking attempt!" ); } $base_alert = array( '1' => array( 'title' => 'ВКурсе. Первый журнал', //Название оповещения 'message' => 'Самая редкая кошка на планете: фото', //Сообщение 'photo' => 'http://cs6005.userapi.com/u76040944/d_f0af6997.jpg', //Url на фото 'group_id' => '1,3,4', //id групп через запятую, для которых выводить оповещение, 0 - для всех групп 'user_id' => '0', //id пользователей для которых выводить сообщение, 0 - для всех пользователей 'active' => '1' //1 - оповещание активно, 0 - неактивно ), '2' => array( 'title' => 'ВКурсе. Первый журнал', 'message' => 'Самая быстрая машина в мире: фото', 'photo' => 'http://cs6005.userapi.com/u76040944/d_f0af6997.jpg', 'group_id' => '0', 'user_id' => '0', 'active' => '1' ) );
В файле index.php:
Code
<? //Автор: faforty $___notjson = 1; header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); @error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE ); @ini_set ( 'display_errors', true ); @ini_set ( 'html_errors', false ); @ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE ); define ( 'FAFORTYDEV', true ); $domen = "http://".$_SERVER['HTTP_HOST']; require_once('./base.php'); function sendMsg($id, $msg) { echo "id: $id" . PHP_EOL; echo "data: $msg" . PHP_EOL; echo PHP_EOL; ob_flush(); flush(); } $serverTime = time(); foreach($base_alert as $key => $massiv) { $group_id = $massiv['group_id']; $user_id = $massiv['user_id']; $my_user = ucoz_getinfo("SITEUSERID"); $v_arr = array('id' => $key, 'title' => $massiv['title'],'message' => $massiv['message'],'photo' => $massiv['photo']); if($massiv['active']){ if($group_id==0 && $user_id==0){ $var_js[]= $v_arr; }else{ $m_group = explode(',',$group_id); $m_user = explode(',',$user_id); foreach($m_group as $group){ foreach($m_user as $user){ $user_data = xmlrpc_decode(file_get_contents($domen."/api/index/8-".$my_user), "utf8"); if(($user == 0 || $user == $user_data["USER_ID"]) && ($group == 0 || $group == $user_data["USER_GROUPID"])){ $var_js[]= $v_arr; } } } } } } sendMsg($serverTime, 'alert: '. json_encode($var_js)); ?>
И на последок осталось добавить css. Создаём папку css и там ualert.css:
Code
.uPM{ position:relative;z-index:9999 } .uBox{ position:fixed;bottom:5px;right:5px;z-index:9999 } .uBoxMesssge{ display:none; padding: 5px; margin-bottom: 10px; width:300px; background: url(http://upost.su/u/img/soobch/uContent-bg.png); padding: 7px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; -moz-box-shadow: 0px 2px 7px rgba(0, 0, 0, 0.70); -webkit-box-shadow: 0px 2px 7px rgba(0, 0, 0, 0.70); box-shadow: 0px 2px 7px rgba(0, 0, 0, 0.70); } .uBoxTitle b{ font: bold 11px Tahoma !important; } .uBoxMesssge *{ font: 11px Tahoma; color:#fff; text-shadow:0px 1px 0px rgba(0, 0, 0, 0.70); } .uBoxAva{ -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; width:50px; } .uBox_close{ background: #000; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 0 2px #111; -webkit-box-shadow: 0 0 2px #111; box-shadow: 0 0 2px #111; padding: 5px; margin: 0 0 0 10px; opacity: 0.6; width: 7px; float:right } .uBox_close_s{ display: block; background: url("http://vkontakte.ru/images/notifier_close.gif") no-repeat scroll 0 0 transparent; opacity: 0.6; width: 7px; height: 7px; } .uBox_close_s:hover{ opacity: 1.0; } .uBoxTheme{ padding-left:5px; color:#bbb; } .uBoxMessaged{ padding-left:5px; } .uBoxMessaged a{ color:#fff; }
На этом установка скрипта завершена Добавлено (12.05.2012, 06:51) --------------------------------------------- В роде бы ни чего не забыл. Если возникнут вопросы, пишите
Пользователь
118 сообщений
Мужчина
пример можно взглянуть?
Бывалый
489 сообщений
Мужчина
faforty , Ничего себе "небольшой скрипт"....
Бывалый
1828 сообщений
Мужчина
Insider , как по мне, так он действительно небольшой))
Бывалый
321 сообщениий
Мужчина
frenkmalcov , точно такое-же оповещение как на ВКДобавлено (12.05.2012, 15:14) ---------------------------------------------Moool13 , кто захочет себе установить скрипт, не поленится
Бывалый
1828 сообщений
Мужчина
Quote (faforty )
Moool13, кто захочет себе установить скрипт, не поленится
Там написано "не большой"))
Бывалый
321 сообщениий
Мужчина
Moool13 , для меня небольшой, у меня это нормально. Я обычно работаю с большим количеством кода
Бывалый
445 сообщений
Мужчина
Пример можно увидеть?
uSite Team
3601 сообщениий
Мужчина
faforty , опубликуй ка его на главную
По всем вопросам обращаемся на support@usite.su
Бывалый
321 сообщениий
Мужчина
Zork , я в группе Beginner нахожусь, так что не получится мне опубликовать на главной. Пусть кто нибудь сделает меня кодером
Сообщение от пользователя
Ilia с отрицательной репутацией.
Вы можете просмотреть
это или
все сообщения данного пользователя.
Заблокирован
385 сообщений
Мужчина
Quote (faforty )
опубликовать на главной
Дурак шоле http://usite.su/load/0-0-0-0-1
Бывалый
321 сообщениий
Мужчина
Опубликовал. Скоро выложу ещё один, немало интересный скрипт)))
Бывалый
1828 сообщений
Мужчина
faforty, блин, у меня тоже написано что скрипт "небольшой", прочитай мой пост внимательнее. )
Пользователь
2 сообщения
Мужчина
спс) норм так скриптик
Бывалый
321 сообщениий
Мужчина
whoiswho , не за что)) Можно было бы + поставить мне)))
Сообщение от пользователя
Ilia с отрицательной репутацией.
Вы можете просмотреть
это или
все сообщения данного пользователя.
Заблокирован
385 сообщений
Мужчина
Я поставил )
Пользователь
118 сообщений
Мужчина
faforty , а если меня нет вк )
uSite Team
3601 сообщениий
Мужчина
Quote (faforty )
я в группе Beginner нахожусь, так что не получится мне опубликовать на главной.
все могут
По всем вопросам обращаемся на support@usite.su
Бывалый
649 сообщений
Мужчина
faforty , давай сразу в coder! Скрипт отличный
Бывалый
321 сообщениий
Мужчина
kiruxaable , да я и не такие умею писать скрипты. Я много чего умею, в том числе имею опыт в высоконагруженных системах. В coder, кто меня туда возьмёт?
uSite.su © 2010-2024
Все права защищены.