ОБСУЖДЕНИЕ

Звуковое оповешение

17 сообщений1 просмотровЗакрыта
#1
Здравствуйте, вот код, который оповещает о новой сообщений:
PHP
echo '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>';

echo'
<script>

 $('<audio id="sound" ><source src="/sound/notify.mp3" type="audio/mpeg" /><source src="/sound/notify.ogg" type="audio/ogg" /><source src="/sound/notify.wav" type="audio/wav" /></audio>').appendTo("body");
var content = $("#content");


$(document).ready(function () {
var divContent = "";


function show()
{


    $.ajax({
    url: "/enter.php",
    cache: false,
    dataType: "html",
    success: function(html) {
       if(divContent !== html) {$("#sound")[0].play();}
        divContent = html;
        $("#content").html(divContent );
    }
    });

}
show();
setInterval('show()',5000);

});

</script>
  <div id="content"></div>';



Все нормально работает, оповещает при входящей сообщений, но даже при отсутствие сообщений когда переходим по страницам сайта и при обновление страницы издает звук.
Скажите пожалуйста, в чем проблема.
#2
а проблма в том, что надо делать условие, есть ли новые сообщения, или нет..

Есть таблица mail - хранятся переписки пользователей
примерно такая структура

id - порядковый номер сообщения
mess - текст сообщения
author - кто пишет (id пользователя)
addressee - кому пишут (id пользователя)
status - по умолчанию значение ноль (не прочитано)
status_sound - по умолчанию ноль, а после первого звука, пишеш туда единицу, тоесть, что звук уже был

Тебе нужно выполнить проверку типа
if(mysql_result(mysql_query("SELECT COUNT(*) FROM `mail` WHERE status_sound = 0 AND `addressee` = 'id пользователя'"),0))
{
//и тут код который выводит звук
//и запрос который запишет значение status_sound =1
mysql_query ("UPDATE `mail` SET `status_sound`='1' WHERE `addressee`='id пользователя'");
// Значение LIMIT 1 ставить не надо! (это на всякий случай уточнил)
#3
Valen, спасибо большое, как то не подумал, сделал так:
BASH
if (!isset($_COOKIE['new_mes'])) $_COOKIE['new_mes'] = 0;
if ($new_mes > 0) {
setcookie('new_mes', $new_mes);

if ($_COOKIE['new_mes'] != $new_mes) {
echo '<audio id="sound" autoplay><source src="/sound/tone.mp3" type="audio/mpeg"/><source src="/sound/tone.ogg" type="audio/ogg"/><source src="/sound/tone.wav" type="audio/wav"/></audio>';
}
}


Пока что нормально работает.
#4
Файлы оповещения можно? Там звук и в какую папку . можно?
#5
Karayazi, не откажусь от спасибо суда
https://masteram.us/sps.php?id=18
#6
не понял?
#7
Valen, теперь вот что я заметил, при первой сообщений визуальное оповещение показывает а звуковое нет, звуковое оповещение только во втором сообщение появляется, почему?
#8
выполни вывод на AJAX

Создай блок где будет выводится текст тиав +2 сообщения, и там подключи вывод звука.. лучше всего это реализувать на Flash (делаеш ролик 1х1 px и в него помещаеш звуковой файл)

Как раз идет такой вывод на этом сайте...
Кстати система работы оповещения тоже такая...
#9
Valen, Короче, вот что я сделал:
PHP
<?php
function aut(){

echo '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>';

echo '<div id="contentt"></div>




<script>
function show()
{
$.ajax({
url: "/enter.php",
cache: false,
success: function(html){
$("#contentt").html(html);
}
});
}

$(document).ready(function(){
show();
setInterval('show()',5000);
});
</script>';


}
?>

А это enter.php:
PHP
<?php

include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/start.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/compress.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/sess.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/home.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/settings.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/db_connect.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/ipua.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/fnc.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/sys/inc/user.php';
$new_mes = 0;

echo "<div align='center' class='aut'>";

if (isset($user))
{

echo "<a href='/index.php'><img src='/style/up/home.png'></a>";

echo "<a href='/umenu.php'><img src='/style/up/kabinet.png'></a>";


$in_new = mysql_num_rows(mysql_query("select * from `pochta` WHERE `komu_id` = '".$user['id']."' and `status` = '1' and `save` = '0'"));
if ($in_new>0){
$new_mes = $new_mes+$in_new;

echo "<a href=\"/mail/in.php\"><img src='/style/up/mail.png'><font color=\"aqua\">+$in_new</font></a>";
}

$knm=mysql_result(mysql_query("SELECT COUNT(*) FROM `mail` WHERE `id_kont` = '$user[id]' AND `read` = '0'"), 0);

if ($knm>0){
$new_mes = $new_mes+$knm;
echo "<a href=\"/mail.php?id=2\" title=\"Sistem\"><img src='/style/up/sistem.png'><font color=\"lime\">+$knm</font></a>\n";

}
if ($knm==0 AND $in_new==0){
echo "<a href='/exit.php'><img src='/style/up/exit.png'></a>\n";

}

echo "<br/>\n";
$k_n_s_zak=0;
$q23=mysql_query("SELECT `id_them`, `time` FROM `forum_zakl` WHERE `id_user` = '$user[id]'");
while ($zakl = mysql_fetch_array($q23))
{
$k_n_s_zak+=mysql_result(mysql_query("SELECT COUNT(*) FROM `forum_p` WHERE `id_them` = '$zakl[id_them]' AND `time` > '$zakl[time]'"),0);
}

if ($k_n_s_zak>0){
$new_mes = $new_mes+$k_n_s_zak;
echo "<b><a href=\"/zakl.php\" title=\"Əlfəcinlərdəki yeni mesajlar\">Əlfəcindəki mesajlar  ($k_n_s_zak)</a></b><br />\n";
}


}
else
{
echo "<a href='/aut.php'><img src='/style/up/log.png'></a> | <a href='/reg.php'><img src='/style/up/reg.png'></a><br />\n";

}
echo "</div>\n";
}


if (!isset($_COOKIE['new_mes'])) $_COOKIE['new_mes'] = 0;
if ($new_mes > 0) {

setcookie('new_mes', $new_mes);
if ($_COOKIE['new_mes'] != $new_mes) {
echo '<audio id="content" autoplay><source src="/style/sound/tone.mp3" type="audio/mpeg"/><source src="/style/sound/tone.ogg" type="audio/ogg"/><source src="/style/sound/tone.wav" type="audio/wav"/></audio>';
}


}

?>

вывод:
aut();
первое оповещание без звука.
#10
if ($in_new>0){
echo '<audio id="content" autoplay><source src="/style/sound/tone.mp3" type="audio/mpeg"/><source src="/style/sound/tone.ogg" type="audio/ogg"/><source src="/style/sound/tone.wav" type="audio/wav"/></audio>';

Вот где музыка должна идти

а тут if ($_COOKIE['new_mes'] != $new_mes) {
не работает потому что первый раз идет установка кука
setcookie('new_mes', $new_mes);
а только на второй проход по скрипту он уже $_COOKIE['new_mes'] существует

Да и нафиг те куки.. короче, тот код можно как минимум сократить на половину и сделать в разы более читабельным
#11
Valen, $k_n_s_zak и $knm
А с этими тогда как, если у всех этих одновременно появится новое.
#12
делай две записи... одну для отправителя, одну для получателя... таким образом и сообщения можно будет удалять... Имею виду что если один юзер удалит, будет все равно у другого вся переписка.. удобно во многом.. ну и манипуляции проводить тоже проще...
Диалоги есть готовый скрипт, там есть wap и Ajax интерфейс, возможночть манипуляциями с сообщениями и все такое.. в обще если что, могу показать пример
#13
Valen, Что то ко мне не доходить.


Делаю вот такой вывод на страницу:
BASH
echo 'Mes = '.$new_mes.'<br/>Cookie = '.$_COOKIE['new_mes'];

Когда $new_mes==0 то $_COOKIE['new_mes'] все время равен к 1, почему не обнуляется?
#14
Что то никак не получается уже голова болит.
#15
оставь, завтра на свежую голову почитаеш что я те писал, и думаю все получется у там
#16
у кого какие варианты, я уже не могу?
#17
Тему закрыл Karayazi!
Причина: Решено