Beautiful PM. Часть 1: Ответ
Ужасно раздражает допотопная система обмена сообщениями на сайте, стартует цикл статей по улучшению этого модуля.
Часть 1: Ответ
Каждый пользователь DLE хоть раз да отвечал на сообщение пользователя в PM и знает сколько нужно сделать действий. И это ужасное цитирование, чувствуешь себя стариком, он тебе каждый раз вставляет цитирование только что отправленного сообщения, ужс.
Обойдем действие кнопки ответ и выведем окно ответа и возможные ограничения сразу при чтении сообщения.
Установка
1. Открываем engine/modules/pm.php
Находим:
land, icq, xfields
Заменяем на:
land, icq, xfields, pm_all
Найти:
$tpl->set( '{text}', stripslashes( $row['text'] ) );
Заменить на:
$tpl->set( '{pm-text}', stripslashes( $row['text'] ) ); $ar = true; /* Начинаем вывод поля для ответа*/ // Проверка, что не гасится $srow = $db->super_query( "SELECT id FROM " . USERPREFIX . "_ignore_list WHERE user=(SELECT user_id FROM " . USERPREFIX . "_users WHERE name='{$row['user_from']}' ) AND user_from='{$member_id['name']}'" ); if(!empty($srow)) {$ar = false; $err .= "<p>".$lang['pm_ignored']."</p>";} $db->free(); // Проверка на максимум сообщений у него if( $user_group[$row['user_group']]['max_pm'] AND $row['pm_all'] >= $user_group[$row['user_group']]['max_pm'] AND $member_id['user_group'] != 1 ) { $ar = false; $err .= "<p>".$lang['pm_err_8']."</p>"; } if ($ar AND $row['folder'] == "inbox") { $ajax_form = <<<HTML <span id="dle-pm-preview"></span> <script language="javascript" type="text/javascript"> <!-- function dlePMPreview( ){ if (dle_wysiwyg == "1") { submit_all_data(); } if (dle_wysiwyg == "2") { var pm_text = tinyMCE.get('comments').getContent(); } else { var pm_text = document.getElementById('dle-comments-form').comments.value; } if(document.getElementById('dle-comments-form').name.value == '' || document.getElementById('dle-comments-form').subj.value == '' || pm_text == '') { DLEalert('{$lang['comm_req_f']}', dle_info);return false; } var name = document.getElementById('dle-comments-form').name.value; var subj = document.getElementById('dle-comments-form').subj.value; ShowLoading(''); $.post(dle_root + "engine/ajax/pm.php", { text: pm_text, name: name, subj: subj, skin: dle_skin }, function(data){ HideLoading(''); $("#dle-pm-preview").html(data); $("html"+( ! $.browser.opera ? ",body" : "")).animate({scrollTop: $("#dle-pm-preview").position().top - 70}, 1100); setTimeout(function() { $("#blind-animation").show('blind',{},1500)}, 1100); }); }; function reload () { var rndval = new Date().getTime(); document.getElementById('dle-captcha').innerHTML = '<img src="' + dle_root + 'engine/modules/antibot.php?rand=' + timeval + '" border=0><br /><a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a>'; }; //--> </script> HTML; $tpl->set( '[quick-reply]', $ajax_form ); $tpl->set( '[/quick-reply]', "" ); if( $user_group[$member_id['user_group']]['captcha_pm'] ) { if ( $config['allow_recaptcha'] ) { $tpl->set( '[recaptcha]', "" ); $tpl->set( '[/recaptcha]', "" ); $tpl->set( '{recaptcha}', ' <script language="javascript" type="text/javascript"> <!-- var RecaptchaOptions = { theme: ''.$config['recaptcha_theme'].'', lang: ''.$lang['wysiwyg_language'].'' }; //--> </script> <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k='.$config['recaptcha_public_key'].'"></script>' ); $tpl->set_block( "'[sec_code](.*?)[/sec_code]'si", "" ); $tpl->set( '{sec_code}', "" ); } else { $tpl->set( '[sec_code]', "" ); $tpl->set( '[/sec_code]', "" ); $path = parse_url( $config['http_home_url'] ); $tpl->set( '{sec_code}', "<span id="dle-captcha"><img src="" . $path['path'] . "engine/modules/antibot.php" alt="${lang['sec_image']}" border="0" /><br /><a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a></span>" ); $tpl->set_block( "'[recaptcha](.*?)[/recaptcha]'si", "" ); $tpl->set( '{recaptcha}', "" ); } } else { $tpl->set( '{sec_code}', "" ); $tpl->set( '{recaptcha}', "" ); $tpl->set_block( "'[recaptcha](.*?)[/recaptcha]'si", "" ); $tpl->set_block( "'[sec_code](.*?)[/sec_code]'si", "" ); } if( $user_group[$member_id['user_group']]['pm_question'] ) { $tpl->set( '[question]', "" ); $tpl->set( '[/question]', "" ); $question = $db->super_query("SELECT id, question FROM " . PREFIX . "_question ORDER BY RAND() LIMIT 1"); $tpl->set( '{question}', "<span id="dle-question">".htmlspecialchars( stripslashes( $question['question'] ), ENT_QUOTES, $config['charset'] )."</span>" ); $_SESSION['question'] = $question['id']; } else { $tpl->set_block( "'[question](.*?)[/question]'si", "" ); $tpl->set( '{question}', "" ); } $text = ""; $tpl->set( '{reply-author}', $row['user_from'] ); if (strpos ( $row['subj'], "RE:" ) === false) $tpl->set( '{reply-subj}', "RE: " . stripslashes( $row['subj'] ) ); else $tpl->set( '{reply-subj}', stripslashes( $row['subj'] ) ); if( $config['allow_comments_wysiwyg'] ) { include_once ENGINE_DIR . '/editor/comments.php'; $bb_code = ""; $allow_comments_ajax = true; } else include_once ENGINE_DIR . '/modules/bbcode.php'; if( $config['allow_comments_wysiwyg'] ) { $tpl->set( '{editor}', $wysiwyg ); } else { $tpl->set( '{editor}', $bb_code ); } $tpl->set( '{text}', $text ); if( $config['sec_addnews'] ) { $salt = str_shuffle("abchefghjkmnpqrstuvwxyz"); $random_key = ""; for($i = 0; $i < 8; $i ++) { $random_key .= $salt{rand( 0, 23 )}; } $_SESSION['id_key'] = $random_key; $random_key = "<input name="{$random_key}" type="hidden" value="{$dle_login_hash}" />"; } else $random_key = ""; if( $config['allow_comments_wysiwyg'] == "2") $tpl->copy_template = "<form method="post" name="dle-comments-form" id="dle-comments-form" onsubmit="document.getElementById('comments').value = tinyMCE.get('comments').getContent(); if(document.getElementById('dle-comments-form').name.value == '' || document.getElementById('dle-comments-form').subj.value == '' || document.getElementById('comments').value == ''){DLEalert('{$lang['comm_req_f']}', dle_info);return false}" action="">n" . $tpl->copy_template . "{$random_key}<input name="send" type="hidden" value="send" /></form>"; else $tpl->copy_template = "<form method="post" name="dle-comments-form" id="dle-comments-form" onsubmit="if(document.getElementById('dle-comments-form').name.value == '' || document.getElementById('dle-comments-form').subj.value == '' || document.getElementById('comments').value == ''){DLEalert('{$lang['comm_req_f']}', dle_info);return false}" action="">n" . $tpl->copy_template . "{$random_key}<input name="send" type="hidden" value="send" /></form>"; } else $tpl->set_block( "'[quick-reply].*?[/quick-reply]'si", $err );
2. Открыть templates/YOURTEMPLATE/pm.tpl
Между тегами [readpm] ... [/readpm] в нужное вам место вставить:
[quick-reply] <div class="baseform"> <table class="tableform" style="width:100%;"> <tr> <td style="width:100px;"></td> <td class="editorcomm" style="text-align:center;">{editor}<br /><input type="hidden" id="outboxcopy" name="outboxcopy" value="1" /> </td> </tr> [sec_code] <tr> <td class="label"> Код:<span class="impot">*</span> </td> <td> <div>{sec_code}</div> <div><input type="text" name="sec_code" id="sec_code" style="width:115px" class="f_input" /></div> </td> </tr> [/sec_code] [recaptcha] <tr> <td class="label"> Введите два слова, показанных на изображении:<span class="impot">*</span> </td> <td> <div>{recaptcha}</div> </td> </tr> [/recaptcha] [question] <tr> <td class="label"> Вопрос: </td> <td> <div>{question}</div> </td> </tr> <tr> <td class="label"> Ответ:<span class="impot">*</span> </td> <td> <div><input type="text" name="question_answer" id="question_answer" class="f_input" /></div> </td> </tr> [/question] </table> <input type="hidden" name="name" value="{reply-author}"/> <input type="hidden" name="subj" value="{reply-subj}"/> <div class="fieldsubmit"> <input type="button" class="btn btn-info" onclick="dlePMPreview()" title="Просмотр" value="Просмотр" /> <button type="submit" name="add" class="btn btn-primary"><span>Отправить</span></button> </div> </div> [/quick-reply]
Я лично удалил кнопку просмотра сообщения, но в инструкции оставил (кто нибудь ей вообще пользовался !?) )
Найти между тегами [newpm] ... [/newpm]:
{text}
Заменить на
{pm-text}
3. Открыть engine/ajax/pm.php
Найти:
$tpl->set( '{text}', stripslashes($text) );
Заменить на:
$tpl->set( '{pm-text}', stripslashes($text) ); $tpl->set_block( "'[quick-reply].*?[/quick-reply]'si", "" ); $tpl->set_block( "'[reply].*?[/reply]'si", "" ); $tpl->set_block( "'[del].*?[/del]'si", "" ); $tpl->set_block( "'[complaint].*?[/complaint]'si", "" ); $tpl->set_block( "'[ignore].*?[/ignore]'si", "" );
Тем самым еще удалили при просмотре кнопки Пожаловаться / Удалить / Игнорить / Ответить
Готово.