Popup Layer on New PMs - Новое уведомление о ЛС
Сегодня хотелось бы представить очередной полезный мод для phpbb3, а именно Popup Layer on New PMs/Новое уведомление о ЛС. В чем суть мода ??? Объясню на пальцах - в стандартном функционале phpbb3 уже вшито уведомление пользователей о новом личном сообщении, но оно реализовано посредством всплывающего окна. Чем это плохо? У многих пользователей, заботящихся о интернет-безопасности, в браузере установлено блокирование всех всплывающих окон, сами видели много сайтов с надоедливой рекламой. Так вот, анонсируемый мной мод устроен немного иначе - он осуществляет уведомление не посредством всплывающего окна, а с помощью нового всплывающего слоя. - от автора темы DeaDRoMeO.
На одном из моих сайтов эта модификация выглядела так:

Если вам это интересно - приступим к установке:
Скачать модификацию из архива сайта
скачать из архива сайта
распаковать и содержимое папки root скопировать в корень сайта (где файл config.php). после чего приступаем к редактированию файлов форума.
Открыть includes/functions.phpНайти Код: Выделить всё $l_privmsgs_text = $l_privmsgs_text_unread = ''; $s_privmsg_new = false;
Вставить после найденного Код: Выделить всё //Popup Layer on New PMs $l_new_message_popup = $pm_popup_click = '';
Найти Код: Выделить всё $sql = 'UPDATE ' . USERS_TABLE . ' SET user_last_privmsg = ' . $user->data['session_last_visit'] . ' WHERE user_id = ' . $user->data['user_id']; $db->sql_query($sql);
$s_privmsg_new = true;Вставить после найденного Код: Выделить всё //Popup Layer on New PMs $l_new_message_popup = ($user->data['user_new_privmsg'] == 1) ? $user->lang['YOU_NEW_PM'] : $user->lang['YOU_NEW_PMS']; $pm_popup_click = sprintf($user->lang['CLICK_VIEW_PRIVMSG'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox') . '">', '</a>');
Найти Код: Выделить всё 'A_COOKIE_SETTINGS' => addslashes('; path=' . $config['cookie_path'] . ((!$config['cookie_domain'] || $config['cookie_domain'] == 'localhost' || $config['cookie_domain'] == '127.0.0.1') ? '' : '; domain=' . $config['cookie_domain']) . ((!$config['cookie_secure']) ? '' : '; secure')),
Вставить после найденного Код: Выделить всё //Popup Layer on New PMs 'PM_POPUP_MESSAGE' => $l_new_message_popup, 'PM_POPUP_CLICK_TO_VIEW' => $pm_popup_click,

для стилей на основе prosilver
Открыть styles/prosilver/template/overall_header.htmlНайти и Удалить код Код: Выделить всё <!-- IF S_USER_PM_POPUP --> if ({S_NEW_PM}) { var url = '{UA_POPUP_PM}'; window.open(url.replace(/&/g, '&'), '_phpbbprivmsg', 'height=225,resizable=yes,scrollbars=yes, width=400'); } <!-- ENDIF -->
Найти Код: Выделить всё <script type="text/javascript" src="{T_TEMPLATE_PATH}/forum_fn.js"></script>
Вставить после найденного Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> <script type="text/javascript" src="{T_TEMPLATE_PATH}/opacity.js"></script> <!-- ENDIF -->
Найти Код: Выделить всё <!-- IF S_CONTENT_DIRECTION eq 'rtl' --> <link href="{T_THEME_PATH}/bidi.css" rel="stylesheet" type="text/css" media="screen, projection" /> <!-- ENDIF -->
Вставить после найденного Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> <!--[if lt IE 7]> <link rel="stylesheet" href="{T_THEME_PATH}/ie6-position-fixed.css" type="text/css" media="screen, projection" /> <![endif]--> <!-- ENDIF -->
Найти Код: Выделить всё <body id="phpbb" class="section-{SCRIPT_NAME} {S_CONTENT_DIRECTION}">
Вставить после найденного Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> <div id="pm-popup" class="panel"> <p>{PM_POPUP_MESSAGE}<br /><br />{PM_POPUP_CLICK_TO_VIEW}</p> <p class="small"><a href="#" onclick="setOpacity('main-block',1);document.getElementById('pm-popup').style.display='none';return false;">{L_CLOSE_WINDOW}</a></p> </div> <!-- ENDIF -->
<div id="main-block">
Открыть styles/prosilver/template/overall_footer.htmlНайти Вставить перед найденным Код: Выделить всё </div>
<!-- IF S_USER_PM_POPUP and S_NEW_PM --> <script type="text/javascript"> setOpacity('main-block', 0.3); </script> <!--[if lt IE 7]> <script type="text/javascript"> var pmPopupDiv = document.getElementById('pm-popup'); function pmPopup() { if (pmPopupDiv.style.display != 'none') { pmPopupDiv.style.top = (document.documentElement.scrollTop + parseInt(document.documentElement.clientHeight / 2)) + 'px'; } } window.onscroll = pmPopup; </script> <![endif]--> <!-- ENDIF -->
Открыть styles/prosilver/theme/common.cssНайти Вставить перед найденным Код: Выделить всё #pm-popup { position: fixed; left: 50%; top: 50%; z-index: 2; width: 400px; text-align: center; margin-left: -200px; margin-top: -100px; border: 1px solid #d7e0e4; padding: 10px; }
#main-block { width: 100%; background-color: white; }

для стилей на основе subsilver2
Открыть styles/subsilver2/template/overall_header.htmlНайти Код: Выделить всё <link rel="stylesheet" href="{T_STYLESHEET_LINK}" type="text/css" />
Вставить после найденного Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> <!--[if lt IE 7]> <link rel="stylesheet" href="{T_THEME_PATH}/ie6-position-fixed.css" type="text/css" /> <![endif]--> <!-- ENDIF -->
Найти и Удалить код Код: Выделить всё <!-- IF S_USER_PM_POPUP --> if ({S_NEW_PM}) { popup('{UA_POPUP_PM}', 400, 225, '_phpbbprivmsg'); } <!-- ENDIF -->
Найти Вставить после найденного Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> <script type="text/javascript" src="{T_TEMPLATE_PATH}/opacity.js"></script> <!-- ENDIF -->
Найти Вставить после найденного Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> <table border="0" cellspacing="0" cellpadding="10" id="pm-popup"> <tr> <td> <table width="100%" border="0" cellspacing="1" cellpadding="4" class="tablebg"> <tr class="row1"> <td valign="top" align="center"> <br /><span class="gen"> {PM_POPUP_MESSAGE}<br /><br />{PM_POPUP_CLICK_TO_VIEW} </span> <br /><br /><span class="genmed"><a href="#" onclick="setOpacity('main-block',1);document.getElementById('pm-popup').style.display='none';return false;">{L_CLOSE_WINDOW}</a></span><br /><br /> </td> </tr> </table> </td> </tr> </table>
<!-- ENDIF -->
<div id="main-block">
Открыть styles/subsilver2/template/overall_footer.htmlНайти Вставить перед найденным Код: Выделить всё </div>
<!-- IF S_USER_PM_POPUP and S_NEW_PM --> <script type="text/javascript"> setOpacity('main-block', 0.3); </script> <!-- ENDIF -->
Открыть styles/subsilver2/theme/stylesheet.cssНайти Вставить перед найденным Код: Выделить всё #pm-popup { position: fixed; top: 50%; left: 50%; margin-left: -200px; margin-top: -100px; width: 400px; z-index: 2; text-align: center; }
#main-block { width: 100%; background-color: white; }
На этом всё. Чистим кэш и радуемся новой доработке.

информация по настройке мода
В общем то, чтобы данный мод работал, пользователям необходимо в настройках своего профиля активировать опцию Всплывающее окно при получении личного сообщения, но ведь не все они сразу же ринутся делать это. Мы, как админы своих форумов, можем облегчить им это дело: 1) Устанавливаем эту опцию для всех зарегистрированныхСкачиваем скрипт, прикрепленный ниже и помещаем его в корень форума: Вложение:
set_popup.zip [932 байт]
Скачиваний: 4
распаковываем и скрипт загружаем в корень сайта. после чего запускаем скрипт в браузере по адресу после отработки скрипта удаляем его с сервера. 2) Делаем эту опцию активной для новых пользователейВ предыдущем пункте мы активировали опцию Всплывающее окно при получении личного сообщения для уже зарегистрированных пользователей, но ведь у нас еще будут регистрироваться новые пользователи, а у них эта опция будет отключена. И запускать скрипт опять каждый раз не очень удобно. Поэтому необходимо "включить" эту функцию. Делается это так: Открыть includes/functions_user.phpНайти Число у каждого может быть разным, но это не важно. Прибавляем к этому числу 1024 и полученной суммой заменяем бывшее число !!!Для примера, у меня было такое число: После прибавления стало Необходимо провести у вас эту правку так же.

как сделано на этом форуме
у меня уже сильно переделанный стиль и поэтому доработка в стандартом варианте выглядит некрасиво. немного переделал - получилось так: Вложение:
letter.png [ 112.34 КБ | Просмотров: 60 ]
letter.png
мой вывод (у меня subsilver2): я ввёл блок слоя под условие вывода появления сообщения. Открыть overall_header.htmlНайти (показана часть строки) Вставить после найденного (заменить то, что установили) Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM -->
<div id="main-block">
<table border="0" cellspacing="0" cellpadding="10" id="pm-popup"> <tr> <td> <table width="100%" border="0" cellspacing="1" cellpadding="4"> <tr> <td valign="bottom" align="center"> <br /><br /><br /><br /><br /> <br /><span class="gen"> {PM_POPUP_MESSAGE}<br /><br />{PM_POPUP_CLICK_TO_VIEW} </span> <br /><br /><span class="genmed"><a href="#" onclick="setOpacity('main-block',1);document.getElementById('pm-popup').style.display='none';return false;">Закрыть письмо</a></span><br /><br /> </td> </tr> </table> </td> </tr> </table>
<!-- ENDIF -->Открыть overall_footer.htmlНайти Вставить перед найденным Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> </div> <script type="text/javascript"> setOpacity('main-block', 1,0); </script> <!-- ENDIF -->Открыть theme/stylesheet.cssДобавить в конец файла Код: Выделить всё #pm-popup { position: fixed; top: 50%; left: 50%; margin-left: -200px; margin-top: -100px; width: 400px; height: 200px; z-index: 5000; text-align: center; background-image:url('images/letter.jpg'); }
#main-block { width: 100%; }в процессе применения столкнулся с интересным наблюдением, что браузеры не хотят "подхватывать" новый css-код и вывод не получается. устранил добавлением этого кода прямо в шапку форума. вот так: открыть overall_header.htmlнайти Код: Выделить всё <!-- IF S_USER_PM_POPUP and S_NEW_PM --> <!--[if lt IE 7]> <link rel="stylesheet" href="{T_THEME_PATH}/ie6-position-fixed.css" type="text/css" /> <![endif]--> <!-- ENDIF -->
вставить после найденного Код: Выделить всё <style> #pm-popup { position: fixed; top: 50%; left: 50%; margin-left: -200px; margin-top: -100px; width: 400px; height: 200px; z-index: 5000; text-align: center; background-image:url('{T_THEME_PATH}/images/letter.jpg'); }
#main-block { width: 100%; } </style>после очистки кэша всё заработало. само собой код для stylesheet.css прописывать не надо. Загрузить картинку в папку /theme/images/ вашего стиля: Вложение:
letter.jpg [ 9.36 КБ | Просмотров: 63 ]
letter.jpg
|