Breizh Shoutbox - чат для форума
внимание
Поступила информация, что в 2017 году с чатом начали наблюдаться проблемы в работе. В чате нельзя удалять копирайты автора - иначе может перестать работать. но, вроде ещё и скрипт (для проверки) связывается с сервером автора - а тот перестал отвечать. в результате чат тоже выходит из строя. у меня демо пока работает. но предупреждение было: (ссылка )
Довольно удобный чат для форума (бывает временами надо что-то быстро обсудить - форум для этого не очень подходит). Чат позволяет добавлять смайлики, цвета, специальные символы, картинки и ссылки. Имеет ещё кучу функций. Выводит аватару пользователя. Имеет "приватный раздел"... короче навороченная штука, но, вроде, сайт не грузит.
Итак, если вы решили поставить этот мод - приступаем.
1.
Скачать сам мод из архива сайта :
Скачать из файлового архива сайта распаковать и содержимое папки
root загрузить в корень сайта (где файл config.php).
в моде присутствует папка
install - форум будет недоступен для пользователей до конца установки.
2.
Редактируем файлы форума :
Открыть
common.php Найти
Код: Выделить всё
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox require($phpbb_root_path . 'includes/functions_shoutbox.' . $phpEx); // End Breizh Shoutbox --
Открыть
index.php Найти
Код: Выделить всё
display_forums('', $config['load_moderators']);
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox if (isset($config['shout_version'])) { if ($config['shout_enable'] && $config['shout_index']) { shout_display(); } } // End Breizh Shoutbox --
Открыть
mcp.php Найти
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox $user->add_lang('mods/info_acp_shoutbox'); // End Breizh Shoutbox --
Открыть
posting.php Найти
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox $user->add_lang('mods/shout'); $post_data['hide_robot'] = true; // End Breizh Shoutbox --
Найти
Код: Выделить всё
$post_data['enable_sig'] = (!$config['allow_sig'] || !$auth->acl_get('f_sigs', $forum_id) || !$auth->acl_get('u_sig')) ? false : ((isset($_POST['attach_sig']) && $user->data['is_registered']) ? true : false);
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox $post_data['hide_robot'] = (isset($_POST['hide_robot'])) ? true : false; // End Breizh Shoutbox --
Найти
Код: Выделить всё
'filename_data' => $message_parser->filename_data,
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox 'hide_robot' => (bool) $post_data['hide_robot'], // End Breizh Shoutbox --
Найти
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox $shout_hide_checked = $post_data['hide_robot']; // End Breizh Shoutbox --
Найти
Код: Выделить всё
// Start assigning vars for main posting page ...
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox $s_hide_robot = true; // !important $exclude_forums = array(); if ($config['shout_exclude_forums']) { $exclude_forums = explode(',', $config['shout_exclude_forums']); if (in_array($forum_id, $exclude_forums)) { $s_hide_robot = false; } } // End Breizh Shoutbox --
Найти
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox 'S_SHOUT_HIDE_CHECKED' => ($shout_hide_checked) ? ' checked="checked"' : '', 'S_SHOUT_HIDE_ALLOWED' => ($auth->acl_get('u_shout_hide') && $s_hide_robot) ? (($mode == 'edit' && !$config['shout_edit_robot'] && !$config['shout_edit_robot_priv']) ? false : true) : false, // End Breizh Shoutbox --
Открыть
viewforum.php Найти
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox if (isset($config['shout_version'])) { if ($config['shout_enable'] && $config['shout_forum']) { shout_display(); } } // End Breizh Shoutbox --
Открыть
viewtopic.php Найти
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox if (isset($config['shout_version'])) { if ($config['shout_enable'] && $config['shout_topic']) { shout_display(); } } // End Breizh Shoutbox --
Открыть
includes/constants.php Найти
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox define('SHOUTBOX_TABLE', $table_prefix . 'shoutbox'); define('SHOUTBOX_PRIV_TABLE', $table_prefix . 'shoutbox_priv'); if (!defined('ROBOT')) { define('ROBOT', 0); } // End Breizh Shoutbox --
Открыть
includes/functions.php Найти
Код: Выделить всё
$template->set_filenames(array( 'body' => 'login_body.html')
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox panel_no_display(); // End Breizh Shoutbox --
Найти
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox panel_no_display(); // End Breizh Shoutbox --
Найти
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox panel_no_display(); // End Breizh Shoutbox --
Найти
Код: Выделить всё
function obtain_users_online_string($online_users, $item_id = 0, $item = 'forum')
Заменить найденное на
Код: Выделить всё
function obtain_users_online_string($online_users, $item_id = 0, $item = 'forum', $shout = false)
Найти
Код: Выделить всё
$user_online_link = get_username_string(($row['user_type'] <> USER_IGNORE) ? 'full' : 'no_profile', $row['user_id'], $row['username'], $row['user_colour']);
Заменить найденное на
Код: Выделить всё
// Start Breizh Shoutbox if ($shout && $row['user_type'] <> USER_IGNORE) { $url = generate_board_url().'/memberlist.php?mode=viewprofile'; $user_online_link = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour'], false, $url); $user_online_link = construct_action_shout($user_online_link, $row['user_id']); } else { $user_online_link = get_username_string(($row['user_type'] <> USER_IGNORE) ? 'full' : 'no_profile', $row['user_id'], $row['username'], $row['user_colour']); } // End Breizh Shoutbox --
Найти
Код: Выделить всё
// The following assigns all _common_ variables that may be used at any point in a template.
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox $user->add_lang('mods/shout'); shout_panel(); // End Breizh Shoutbox --
Открыть
includes/functions_posting.php Найти
Код: Выделить всё
// To achieve this without cutting off between special chars we convert to an array and then count the elements.
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox $shout_title = $subject; // End Breizh Shoutbox --
Найти
Вставить перед найденным
Код: Выделить всё
// Start Breizh Shoutbox $data['hide_robot'] = (isset($data['hide_robot'])) ? (($auth->acl_get('u_shout_hide')) ? $data['hide_robot'] : true) : true; if (($config['shout_post_robot'] || $config['shout_post_robot_priv']) && $data['hide_robot']) { $is_global = ($topic_type == POST_GLOBAL) ? true : false; if ($config['shout_exclude_forums']) { $exclude_forums = array(); $exclude_forums = explode(',', $config['shout_exclude_forums']); if (!in_array($data['forum_id'], $exclude_forums)) { advert_post_shoutbox($user->data['user_id'], $user->ip, $data['topic_id'], $shout_title, $data['forum_id'], $url, $post_mode, $topic_type, $post_approval); } } else { advert_post_shoutbox($user->data['user_id'], $user->ip, $data['topic_id'], $shout_title, $data['forum_id'], $url, $post_mode, $topic_type, $post_approval); } } // End Breizh Shoutbox --
Открыть
includes/session.php Найти
Вставить после найденного
Код: Выделить всё
// Start Breizh Shoutbox if (isset($config['shout_version'])) { if ($config['shout_enable_robot'] && $config['shout_enable'] && function_exists('post_session_shout')) { if ($this->data['user_id'] != ANONYMOUS && !$bot && $this->data['user_lastvisit'] == 0) { shout_add_newest_user((int)$this->data['user_id']); } if ($this->data['user_id'] != ANONYMOUS && $viewonline && !$set_admin && $config['shout_sessions']) { post_session_shout((int)$this->data['user_id'], (string)$this->ip, (int)$bot); } } } // End Breizh Shoutbox --
для стилей на основе prosilver
Открыть
styles/prosilver/template/editor.js Найти
Код: Выделить всё
for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } txtarea.sel_start = sel_start;
Заменить найденное на
Код: Выделить всё
try { for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } txtarea.sel_start = sel_start; } catch(e) { }
Открыть
styles/prosilver/template/index_body.html Найти
Заменить найденное на
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and INDEX_SHOUT and INDEX_SHOUT_TOP --> <!-- INCLUDE shout_body.html --> <!-- ENDIF --> <!-- INCLUDE forumlist_body.html --> <!-- IF S_DISPLAY_SHOUTBOX and INDEX_SHOUT and INDEX_SHOUT_AFTER --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Найти
Вставить перед найденным
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and INDEX_SHOUT and INDEX_SHOUT_END --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Открыть
styles/prosilver/template/overall_header.html Найти
Вставить перед найденным
Код: Выделить всё
<!-- Breizh Shoutbox Start --> <!-- IF S_DISPLAY_SHOUTBOX --> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/shoutbox.js"></script> <script type="text/javascript" src="{U_SHOUT}"></script> <!-- IF U_CHARS --> <script type="text/javascript" src="{U_CHARS}"></script> <!-- ENDIF --> <!-- ENDIF --> <!-- Breizh Shoutbox End -->
Найти
Код: Выделить всё
<body id="phpbb" class="section-{SCRIPT_NAME}
Вставить после найденного
Код: Выделить всё
<!-- IF not S_IS_BOT and not S_CAN_SYNC and not KILL_LATERAL and (ACTIVE_PANEL and not S_DISPLAY_SHOUTBOX) or (S_DISPLAY_SHOUTBOX and PANEL_ALL) --> <script type="text/javascript"> // <![CDATA[ function chargeShout(el1,el2,el3){ var e_object=document.getElementById('box'),liBloc=document.getElementById('dtbox3'); document.getElementById(el1).style.display='block';document.getElementById(el2).style.display='none'; if(el3!=false){e_object.style.display=liBloc.style.display='block'; }else{e_object.style.display=liBloc.style.display='none';} } // ]]> </script> <div style="position:fixed;bottom:15px;left:0px;background-color:transparent;float:left;z-index:1000;"> <ul style="margin:0px;padding:0;"> <li id="dtbox1" style="display:block;margin:0px;padding:0;cursor:pointer;list-style-type:none;" title="{L_SHOUT_POP}"> <a href="javascript:void(0);" onclick="chargeShout('dtbox2','dtbox1',true);"> <img src="{PANEL_OPEN}" alt="{L_SHOUT_POP}" title="{L_SHOUT_POP}" /></a> </li> <li id="dtbox3" style="display:none;margin:0px;padding:0;list-style-type:none;"> <object id="box" data="{U_SHOUTBOX}" type="text/html" width="{PANEL_WIDTH}" height="{PANEL_HEIGHT}" style="display:none;background:transparent;border:0 none;overflow-y:hidden;"></object> </li> </ul> <ul style="margin:3px 0 0;padding:0;float:left;"> <li id="dtbox2" style="display:none;margin:0px;padding:0;cursor:pointer;list-style-type:none;" title="{L_CLOSE_WINDOW}"> <a href="javascript:void(0);" onclick="chargeShout('dtbox1','dtbox2',false);"> <img src="{PANEL_CLOSE}" alt="{L_CLOSE_WINDOW}" title="{L_CLOSE_WINDOW}" /></a> </li> </ul> </div> <!-- ENDIF -->
Открыть
styles/prosilver/template/posting_editor.html Найти
Код: Выделить всё
<!-- IF S_TYPE_TOGGLE or S_TOPIC_TYPE_ANNOUNCE or S_TOPIC_TYPE_STICKY -->
Вставить перед найденным
Код: Выделить всё
<!-- IF S_SHOUT_HIDE_ALLOWED --> <div><label for="hide_robot"><input type="checkbox" name="hide_robot" id="hide_robot" checked="checked" /> {L_SHOUT_SELECT_ROBOT} </label></div> <!-- ENDIF -->
Открыть
styles/prosilver/template/simple_header.html Найти
Вставить перед найденным
Код: Выделить всё
<!-- Breizh Shoutbox Start --> <!-- IF S_DISPLAY_SHOUTBOX --> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/shoutbox.js"></script> <script type="text/javascript" src="{U_SHOUT}"></script> <!-- IF U_CHARS --> <script type="text/javascript" src="{U_CHARS}"></script> <!-- ENDIF --> <!-- ENDIF --> <!-- Breizh Shoutbox End -->
Найти (написана только часть строки)
Часть строки
Заменить на
Код: Выделить всё
{S_CONTENT_DIRECTION}"<!-- IF S_IN_SHOUT_TEMP --> style="padding: 0;"<!-- ENDIF -->
Найти
Часть строки
Заменить на
Код: Выделить всё
id="simple-wrap"<!-- IF S_IN_SHOUT_TEMP --> style="padding: 0;"<!-- ENDIF -->
Найти
Часть строки
Заменить на
Код: Выделить всё
id="page-body"<!-- IF S_IN_SHOUT_TEMP --> style="margin: 0;"<!-- ENDIF -->
Открыть
styles/prosilver/template/viewforum_body.html Найти
Вставить после найденного
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_FORUM_TOP and FORUM_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Найти
Вставить перед найденным
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_FORUM_END and FORUM_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Открыть
styles/prosilver/template/viewtopic_body.html Найти
Вставить после найденного
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_TOPIC_TOP and TOPIC_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Найти
Вставить перед найденным
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_TOPIC_END and TOPIC_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Открыть
styles/prosilver/theme/stylesheet.css Найти
Вставить после найденного
для стилей на основе subsilver2
Открыть
styles/subsilver2/template/editor.js Найти
Код: Выделить всё
for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } txtarea.sel_start = sel_start;
Заменить найденное на
Код: Выделить всё
try { for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } txtarea.sel_start = sel_start; } catch(e) { }
Открыть
styles/subsilver2/template/index_body.html Найти
Заменить найденное на
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and INDEX_SHOUT and INDEX_SHOUT_TOP --> <!-- INCLUDE shout_body.html --> <!-- ENDIF --> <!-- INCLUDE forumlist_body.html --> <!-- IF S_DISPLAY_SHOUTBOX and INDEX_SHOUT and INDEX_SHOUT_AFTER --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Найти
Вставить перед найденным
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and INDEX_SHOUT and INDEX_SHOUT_END --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Открыть
styles/subsilver2/template/overall_header.html Найти
Вставить перед найденным
Код: Выделить всё
<!-- Breizh Shoutbox Start --> <!-- IF S_DISPLAY_SHOUTBOX --> <link rel="stylesheet" href="{T_THEME_PATH}/shout_sub.css" type="text/css" /> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/shoutbox.js"></script> <script type="text/javascript" src="{U_SHOUT}"></script> <!-- IF U_CHARS --> <script type="text/javascript" src="{U_CHARS}"></script> <!-- ENDIF --> <!-- ENDIF --> <!-- Breizh Shoutbox End -->
Найти
Вставить после найденного
Код: Выделить всё
<!-- IF not S_IS_BOT and not S_CAN_SYNC and not KILL_LATERAL and (ACTIVE_PANEL and not S_DISPLAY_SHOUTBOX) or (S_DISPLAY_SHOUTBOX and PANEL_ALL) --> <script type="text/javascript"> // <![CDATA[ function chargeShout(el1,el2,el3){ var e_object=document.getElementById('box'),liBloc=document.getElementById('dtbox3'); document.getElementById(el1).style.display='block';document.getElementById(el2).style.display='none'; if(el3!=false){e_object.style.display=liBloc.style.display='block'; }else{e_object.style.display=liBloc.style.display='none';} } // ]]> </script> <div style="position:fixed;bottom:15px;left:0px;background-color:transparent;float:left;z-index:1000;"> <ul style="margin:0px;padding:0;"> <li id="dtbox1" style="display:block;margin:0px;padding:0;cursor:pointer;list-style-type:none;" title="{L_SHOUT_POP}"> <a href="javascript:void(0);" onclick="chargeShout('dtbox2','dtbox1',true);"> <img src="{PANEL_OPEN}" alt="{L_SHOUT_POP}" title="{L_SHOUT_POP}" /></a> </li> <li id="dtbox3" style="display:none;margin:0px;padding:0;list-style-type:none;"> <object id="box" data="{U_SHOUTBOX}" type="text/html" width="{PANEL_WIDTH}" height="{PANEL_HEIGHT}" style="display:none;background:transparent;border:0 none;overflow-y:hidden;"></object> </li> </ul> <ul style="margin:3px 0 0;padding:0;float:left;"> <li id="dtbox2" style="display:none;margin:0px;padding:0;cursor:pointer;list-style-type:none;" title="{L_CLOSE_WINDOW}"> <a href="javascript:void(0);" onclick="chargeShout('dtbox1','dtbox2',false);"> <img src="{PANEL_CLOSE}" alt="{L_CLOSE_WINDOW}" title="{L_CLOSE_WINDOW}" /></a> </li> </ul> </div> <!-- ENDIF -->
Открыть
styles/subsilver2/template/posting_body.html Найти
Вставить перед найденным
Код: Выделить всё
<!-- IF S_SHOUT_HIDE_ALLOWED --> <tr> <td><input type="checkbox" class="radio" name="hide_robot"{S_SHOUT_HIDE_CHECKED} /></td> <td class="gen">{L_SHOUT_SELECT_ROBOT}</td> </tr> <!-- ENDIF -->
Открыть
styles/subsilver2/template/simple_header.html Найти
Вставить перед найденным
Код: Выделить всё
<!-- Breizh Shoutbox Start --> <!-- IF S_DISPLAY_SHOUTBOX --> <link rel="stylesheet" href="{T_THEME_PATH}/shout_sub.css" type="text/css" /> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script> <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/shoutbox.js"></script> <script type="text/javascript" src="{U_SHOUT}"></script> <!-- IF U_CHARS --> <script type="text/javascript" src="{U_CHARS}"></script> <!-- ENDIF --> <!-- ENDIF --> <!-- Breizh Shoutbox End -->
Найти
Часть строки
Заменить на
Код: Выделить всё
id="wrapcentre"<!-- IF S_IN_SHOUT_TEMP --> style="margin: 2px;"<!-- ENDIF -->
Открыть
styles/subsilver2/template/viewforum_body.html Найти
Вставить после найденного
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_FORUM_TOP and FORUM_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Найти
Вставить перед найденным
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_FORUM_END and FORUM_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Открыть
styles/subsilver2/template/viewtopic_body.html Найти
Вставить после найденного
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_TOPIC_TOP and TOPIC_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
Найти
Вставить перед найденным
Код: Выделить всё
<!-- IF S_DISPLAY_SHOUTBOX and POS_SHOUT_TOPIC_END and TOPIC_SHOUT --> <!-- INCLUDE shout_body.html --> <!-- ENDIF -->
3.
Завершение установки :
Для завершения установки необходимо запустить установочный файл через браузер по адресу
после отработки скрипта удалить папку install с сервера.
Установка данного мода автором выполнена пошагово, поэтому сама "прописка" займёт энное время. если хотите установить все функции мода (их потом можно редактировать/отключать в админке) - просто соглашайтесь со всем, что предлагает установщик и потихоньку дойдёте до завершения установки.
После установки почистите кэши и проверьте настройки мода. находится по адресу Админка - Чат.
правок многовато, но они несложные. чат запустился сразу - глюков, вроде, не наблюдается.