Всем доброго времени суток.
--предыстория--Идея привязать звук к Плагину "Новые сообщения" от SJen появилась сразу как только поставил себе этот плагин. Реализация с постоянным звучанием (каждые несколько секунд) была мной реализована и тут же заставила морщиться — ну не нравится мне, слишком навязчиво и назойливо.
--сделано--
Итак, что имеем:
— звук сообщения приходит один раз для каждого нового сообщения
— в случае, когда есть "Сообщения(1)" и приходит новое — звучит еще одно оповещение, и т.д. для каждого нового сообщения
— в таблицу cms_user_msg добавлено поле is_sound, которое говорит, "звучало" уже это сообщение, или нет
— в таблицу cms_user добавлено поле newmes, которое говорит, сколько новых сообщений было во время предыдущего запроса
— увеличилось количество запросов к бд: теперь их от 5 до 7 на каждом обновлении(это в графу "минусы" моей реализации)
--как сделано--
Итак, что делаем.
Заменяем файл plugins/p_newmessages/update.php на
<?php if ($user_id){ include(PATH.'/includes/config.inc.php'); $sql = "select count(distinct id) from {$_CFG['db_prefix']}_user_msg where to_id = {$user_id} and is_new = 1 and to_del = 0 and from_del = 0"; $sql="select newmes from {$_CFG['db_prefix']}_users where id={$user_id}"; if ($newmsg!=0 ){ $idsound=mysql_result(mysql_query("select id from {$_CFG['db_prefix']}_user_msg where to_id = {$user_id} and is_new = 1 and to_del = 0 and from_del = 0"),0); $issound=mysql_result(mysql_query("select is_sound from {$_CFG['db_prefix']}_user_msg where id={$idsound}"),0);} if ($newmsg!=0 ){ if ($issound!=1 || $newmsg>$colnew){ echo '<audio src="/mes.ogg" autoplay autobuffer></audio><a class="has_new" href="/users/'.$user_id.'/messages.html">Сообщения ('.$newmsg.')</a>'; $sql = "UPDATE cms_user_msg SET is_sound = 1 WHERE id= {$idsound}"; $sql = "UPDATE cms_users SET newmes = {$newmsg} WHERE id= {$user_id}"; }else { echo '<a class="has_new" href="/users/'.$user_id.'/messages.html">Сообщения ('.$newmsg.')</a>'; } if ($newmsg<$colnew){ $sql = "UPDATE cms_users SET newmes = {$newmsg} WHERE id= {$user_id}"; } return ; }else{ echo '<a href="/users/'.$user_id.'/messages.html">Мои Сообщения</a>'; } } ?>
Кладем его в /plugins/p_newmessages
Создаем поля в бд.(выбрать таблицу -> структура -> добавить поле(я))
Параметры is_sound(вставляем в таблицу cms_user_msg):
Поле: is_sound
Тип: INT
По умолчанию: NULL
Параметры newmes(вставляем в таблицу cms_users):
Поле: newmes
Тип: INT
Длина/значения: 11
По умолчанию: "Как определено: 0"
--эпилог--
Вроде все, если ничего не забыл...
--на пиво--
WMID: 167739785201
Z354035537647
R235136301990
Реклама #
Майкл 12 лет назад #
http://instantcms.ru/blogs/poleznosti-ot-sjen/zvuk-v-plagine-novye-sobshenija-i-bag-v-hake-optimizacija-vyvoda-komentariev.html
Def 12 лет назад #
Майкл 12 лет назад #
SJen 12 лет назад #
Смысл доработки понятен, ну и цели вы достигли (звук играет один раз). Только вот решение, если честно, не очень красивое.
ИМХО, я бы лучше вынес настройки звука в профиль - чтобы каждый посетитель сам выбрал играть звук один раз или много (мне, например, удобнее было, чтобы играло периодически - если я, скажем, отошел за чашкой чая на кухню - пусть пиликает пока я не услышу).
Покритиковал, но от меня плюсик однозначно - цель достигнута, хоть и не самым коротким путем.
PS Проверку играл ли звук и не изменилось ли количество новых сообщений можно сделать одной строкой в javascript при получении ответа от сервера (если интересно как - стучите в личку, подскажу).
PPS Критика исключительно ради того, чтобы вы поняли минусы своего решения, которое тем не менее имеет право на жизнь и кому-то тоже окажется полезно.
ByMind 12 лет назад #
Александр Сергеевич 12 лет назад #
в таблице cms_user_msg По умолчанию: NULL не выставляется, выдаёт ошибку, ставлю нет тогда сохраняется.
Александр Сергеевич 12 лет назад #
SQL-запрос:
ALTER TABLE `cms_user_msg` CHANGE `is_sound` `is_sound` INT NOT NULL DEFAULT NULL
Ответ MySQL:
#1067 - Invalid default value for 'is_sound'
ByMind 12 лет назад #
Виктор Данилов 12 лет назад #
<audio src="/plugins/p_newmessages/mes.ogg"