редактирование в Админке комментария теперь в модальном окне работаетю но по дефолту функций - будем добавлять.

This commit is contained in:
2026-01-18 17:17:01 +05:00
parent 0df128e980
commit da8e2f369b
3 changed files with 200 additions and 126 deletions

View File

@@ -1601,69 +1601,84 @@ function commentAdminListShow($tpl_dir)
*
* @param string $tpl_dir - путь к шаблонам модуля
*/
function commentAdminPostEdit($tpl_dir)
{
global $AVE_DB, $AVE_Template;
/**
* Метод, предназначенный для редактирования комментариев в Административной части.
*
* @param string $tpl_dir - путь к шаблонам модуля
*/
function commentAdminPostEdit($tpl_dir)
{
global $AVE_DB, $AVE_Template;
// Используем оператор объединения с null для PHP 8.4
$post_sub = $_POST['sub'] ?? '';
$request_id = (int)($_REQUEST['Id'] ?? 0);
$request_docid = (int)($_REQUEST['docid'] ?? 0);
// Используем оператор объединения с null для PHP 8.4
$post_sub = $_POST['sub'] ?? '';
$request_id = (int)($_REQUEST['Id'] ?? 0);
$request_docid = (int)($_REQUEST['docid'] ?? 0);
$is_ajax = isset($_REQUEST['ajax']);
// Выполняем запрос к БД на получение информации о редактируемом комментарии
$row = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_comment_info
WHERE Id = '" . $request_id . "'
LIMIT 1
")->FetchAssocArray();
// Выполняем запрос к БД на получение информации о редактируемом комментарии
$row = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_comment_info
WHERE Id = '" . $request_id . "'
LIMIT 1
")->FetchAssocArray();
// Если в запросе содержится подзапрос на сохранение данных (пользователь уже отредактировал комментарий
// и нажал кнопку сохранить изменения), тогда выполняем запрос к БД на обновление информации.
if ($post_sub == 'send' && false != $row)
{
// --- Экранирование данных перед сохранением ---
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_comment_info
SET
comment_author_name = '" . addslashes(htmlspecialchars($_POST['comment_author_name'] ?? '')) . "',
comment_author_email = '" . addslashes(htmlspecialchars($_POST['comment_author_email'] ?? '')) . "',
comment_author_city = '" . addslashes(htmlspecialchars($_POST['comment_author_city'] ?? '')) . "',
comment_author_website = '" . addslashes(htmlspecialchars($_POST['comment_author_website'] ?? '')) . "',
comment_text = '" . addslashes(htmlspecialchars($_POST['comment_text'] ?? '')) . "',
comment_changed = '" . time() . "'
WHERE
Id = '" . (int)($_POST['Id'] ?? 0) . "'
");
// Если в запросе содержится подзапрос на сохранение данных
if ($post_sub == 'send' && false != $row)
{
// Экранирование данных перед сохранением
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_comment_info
SET
comment_author_name = '" . addslashes(htmlspecialchars($_POST['comment_author_name'] ?? '')) . "',
comment_author_email = '" . addslashes(htmlspecialchars($_POST['comment_author_email'] ?? '')) . "',
comment_author_city = '" . addslashes(htmlspecialchars($_POST['comment_author_city'] ?? '')) . "',
comment_author_website = '" . addslashes(htmlspecialchars($_POST['comment_author_website'] ?? '')) . "',
comment_text = '" . addslashes(htmlspecialchars($_POST['comment_text'] ?? '')) . "',
comment_changed = '" . time() . "'
WHERE
Id = '" . (int)($_POST['Id'] ?? 0) . "'
");
echo '<script>window.opener.location.reload();window.close();</script>';
// Если это AJAX-запрос (наша новая модалка), отдаем JSON
if ($is_ajax) {
header('Content-Type: application/json');
echo json_encode([
'status' => 'success',
'theme' => 'success',
'header' => 'Обновлено', // Можно заменить на переменную из языкового файла
'message' => 'Изменения успешно сохранены'
]);
exit;
}
return;
}
// Если вдруг зашли без AJAX (старым способом), просто выходим
exit;
}
// Если в первой выборке из БД получили нулевой результат, тогда генерируем сообщение с ошибкой
if ($row == false)
{
$AVE_Template->assign('editfalse', 1);
}
// в противном случае получаем список комментариев, у которых стоит запрет на ответы
else
{
$closed = $AVE_DB->Query("
SELECT comments_close
FROM " . PREFIX . "_module_comment_info
WHERE document_id = '" . $request_docid . "'
LIMIT 1
")->GetCell();
// Если в первой выборке из БД получили нулевой результат
if ($row == false)
{
$AVE_Template->assign('editfalse', 1);
}
else
{
$closed = $AVE_DB->Query("
SELECT comments_close
FROM " . PREFIX . "_module_comment_info
WHERE document_id = '" . $request_docid . "'
LIMIT 1
")->GetCell();
$AVE_Template->assign('closed', $closed);
$AVE_Template->assign('row', $row);
$AVE_Template->assign('comment_max_chars', $this->_commentSettingsGet('comment_max_chars'));
}
$AVE_Template->assign('closed', $closed);
$AVE_Template->assign('row', $row);
$AVE_Template->assign('comment_max_chars', $this->_commentSettingsGet('comment_max_chars'));
}
// Отображаем шаблон
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . $this->_admin_edit_link_tpl));
}
// Отображаем шаблон
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . $this->_admin_edit_link_tpl));
}
/**
* Метод, предназначенный для управления настройками модуля

View File

@@ -267,7 +267,14 @@
{else}
<a class="icon_sprite ico_unlock" title="{#COMMENT_ICON_SHOW_ADM#}" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&admin_action=set_status_1&id={$row.CId}&cp={$sess}"></a>
{/if}
<a class="icon_sprite ico_edit" title="{#COMMENT_ICON_EDIT_ADM#}" href="javascript:void(0);" onClick="windowOpen('index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_edit&pop=1&docid={$row.document_id}&Id={$row.CId}','700','700','1');"></a>
<a data-dialog="edit-comment-{$row.CId}"
href="index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_edit&Id={$row.CId}&cp={$sess}&pop=1&onlycontent=1"
data-width="1180"
data-height="700"
data-modal="true"
data-title="{#COMMENT_ICON_EDIT_ADM#}"
class="openDialog icon_sprite ico_edit"
title="{#COMMENT_ICON_EDIT_ADM#}"></a>
{if $row.has_children}
<a class="icon_sprite ico_delete ConfirmDelete" title="{#COMMENT_ICON_DEL_SOFT#}" dir="{#COMMENT_CONFIRM_ADM_DIR_SOFT#}" name="{#COMMENT_CONFIRM_ADM_NAME_SOFT#}"
href="index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_del&admin_action_type=soft&Id={$row.CId}&cp={$sess}"></a>

View File

@@ -2,23 +2,74 @@
{literal}
$(document).ready(function(){
var left = {/literal}{$comment_max_chars}{literal}
// Логика счетчика символов
var left = {/literal}{$comment_max_chars}{literal};
$('#text_counter').text(left);
$('#in_message').keyup(function () {
$('#in_message').keyup(function () {
left = {/literal}{$comment_max_chars}{literal} - $(this).val().length;
if(left < 0){
$('#text_counter').addClass("overlimit");
}
if(left >= 0){
$('#text_counter').removeClass("overlimit");
}
$('#text_counter').text(left);
});
// --- ЛОГИКА ДЛЯ МОДАЛЬНОГО ОКНА (AJAX) ---
// Формируем ID диалога точно так же, как его создает система AVE.cms
var dialogId = '#ajax-dialog-edit-comment-{/literal}{$smarty.request.Id|escape}{literal}';
// Кнопка сохранения
$(".SaveCommentAjax").on('click', function(event){
event.preventDefault();
$("#comment_edit_form").ajaxSubmit({
// Добавляем флаг ajax=1, чтобы PHP понял, что нужно вернуть JSON
url: 'index.php?ajax=1&onlycontent=1&cp={/literal}{$sess}{literal}',
type: 'POST',
dataType: 'json',
beforeSubmit: function(){
$.alerts._overlay('show');
},
success: function(data){
$.alerts._overlay('hide');
// Показываем уведомление (jGrowl)
$.jGrowl(data['message'], {
header: data['header'],
theme: data['theme']
});
// Если сохранение прошло без ошибок
if (data['theme'] !== 'error') {
// Уничтожаем модальное окно
$(dialogId).dialog('destroy').remove();
// Перезагружаем родительское окно, чтобы увидеть изменения в списке
if (window.parent) {
window.parent.location.reload();
}
}
},
error: function(xhr, textStatus, errorThrown) {
$.alerts._overlay('hide');
$.jGrowl('Ошибка системы при сохранении', { theme: 'error' });
console.log(xhr.responseText);
}
});
return false;
});
// Кнопка отмены/закрытия
$(".CloseCommentDialog").on('click', function(event){
event.preventDefault();
$(dialogId).dialog('destroy').remove();
return false;
});
});
{/literal}
</script>
@@ -29,84 +80,85 @@ $(document).ready(function(){
<div class="widget" style="margin-top: 0px;">
<div class="body">
{#COMMENT_EDIT_TITLE#}
{#COMMENT_EDIT_TITLE#}
</div>
</div>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
<li>{#COMMENT_MODULE_NAME#}</li>
<li>{#COMMENT_EDIT_TITLE#}</li>
</ul>
</div>
<div class="breadCrumb module">
<ul>
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
<li>{#COMMENT_MODULE_NAME#}</li>
<li>{#COMMENT_EDIT_TITLE#}</li>
</ul>
</div>
</div>
<div class="widget first">
{if $closed == 1 && $smarty.const.UGROUP != 1}
{#COMMENT_IS_CLOSED#}
<p><input onclick="window.close();" type="button" class="basicBtn" value="{#COMMENT_CLOSE_BUTTON#}" /></p>
{else}
{if $editfalse==1}
{#COMMENT_EDIT_FALSE#}
{else}
<form method="post" action="index.php" class="mainForm">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
{if $closed == 1 && $smarty.const.UGROUP != 1}
<div class="body">
{#COMMENT_IS_CLOSED#}
<p style="margin-top:10px;">
<a href="javascript:void(0);" class="button redBtn CloseCommentDialog">{#COMMENT_CLOSE_BUTTON#}</a>
</p>
</div>
{else}
{if $editfalse == 1}
<div class="body">{#COMMENT_EDIT_FALSE#}</div>
{else}
<form method="post" action="index.php" class="mainForm" id="comment_edit_form">
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
<col width="150">
{if $smarty.const.UGROUP == 1}
<tr>
<td>{#COMMENT_YOUR_NAME#}</td>
<td><input name="comment_author_name" type="text" id="in_author_name" style="width:250px" value="{$row.comment_author_name|stripslashes|escape}" /></td>
</tr>
{if $smarty.const.UGROUP == 1}
<tr>
<td>{#COMMENT_YOUR_NAME#}</td>
<td><input name="comment_author_name" type="text" id="in_author_name" style="width:250px" value="{$row.comment_author_name|stripslashes|escape}" /></td>
</tr>
<tr>
<td>{#COMMENT_YOUR_EMAIL#}</td>
<td><input name="comment_author_email" type="text" id="in_author_email" style="width:250px" value="{$row.comment_author_email|stripslashes|escape}" /></td>
</tr>
{else}
<input type="hidden" name="comment_author_name" value="{$row.comment_author_name|stripslashes|escape}" />
<input type="hidden" name="comment_author_email" value="{$row.comment_author_email|stripslashes|escape}" />
{/if}
<tr>
<td>{#COMMENT_YOUR_EMAIL#}</td>
<td><input name="comment_author_email" type="text" id="in_author_email" style="width:250px" value="{$row.comment_author_email|stripslashes|escape}" /></td>
</tr>
{else}
<input type="hidden" name="comment_author_name" value="{$row.comment_author_name|stripslashes|escape}" />
<input type="hidden" name="comment_author_email" value="{$row.comment_author_email|stripslashes|escape}" />
{/if}
<tr>
<td>{#COMMENT_YOUR_SITE#}</td>
<td><input name="comment_author_website" type="text" id="in_author_website" style="width:250px" value="{$row.comment_author_website|stripslashes|escape}" /></td>
</tr>
<tr>
<td>{#COMMENT_YOUR_SITE#}</td>
<td><input name="comment_author_website" type="text" id="in_author_website" style="width:250px" value="{$row.comment_author_website|stripslashes|escape}" /></td>
</tr>
<tr>
<td>{#COMMENT_YOUR_FROM#}</td>
<td><input name="comment_author_city" type="text" id="in_author_city" style="width:250px" value="{$row.comment_author_city|stripslashes|escape}" /></td>
</tr>
<tr>
<td>{#COMMENT_YOUR_FROM#}</td>
<td><input name="comment_author_city" type="text" id="in_author_city" style="width:250px" value="{$row.comment_author_city|stripslashes|escape}" /></td>
</tr>
<tr>
<td>{#COMMENT_YOUR_TEXT#}</td>
<td>
<div class="pr12"><textarea style="width:100%; height:170px" name="comment_text" id="in_message">{$row.comment_text}</textarea></div>
<span id="text_counter"></span>&nbsp;{#COMMENT_CHARS_LEFT#}
</td>
</tr>
<tr>
<td>{#COMMENT_YOUR_TEXT#}</td>
<td>
<div class="pr12">
<textarea style="width:100%; height:170px" name="comment_text" id="in_message">{$row.comment_text}</textarea>
</div>
<span id="text_counter"></span>&nbsp;{#COMMENT_CHARS_LEFT#}
</td>
</tr>
<input type="hidden" name="do" value="modules" />
<input type="hidden" name="action" value="modedit" />
<input type="hidden" name="mod" value="comment" />
<input type="hidden" name="moduleaction" value="admin_edit" />
<input type="hidden" name="sub" value="send" />
<input type="hidden" name="Id" value="{$smarty.request.Id|escape}" />
<tr>
<td colspan="3">
<input type="submit" class="basicBtn" value="{#COMMENT_BUTTON_EDIT#}" />&nbsp;
<input type="reset" class="basicBtn" value="{#COMMENT_BUTTON_CANCEL#}" />
</td>
</tr>
</table>
</form>
{/if}
{/if}
<input type="hidden" name="mod" value="comment" />
<input type="hidden" name="moduleaction" value="admin_edit" />
<input type="hidden" name="sub" value="send" />
<input type="hidden" name="Id" value="{$smarty.request.Id|escape}" />
<tr>
<td colspan="2">
<input type="submit" class="basicBtn SaveCommentAjax" value="{#COMMENT_BUTTON_EDIT#}" />&nbsp;
<a href="javascript:void(0);" class="button redBtn CloseCommentDialog">{#COMMENT_BUTTON_CANCEL#}</a>
</td>
</tr>
</table>
</form>
{/if}
{/if}
</div>