update v3.22 (add module aliases)
This commit is contained in:
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,9 +0,0 @@
|
||||
/.idea/*
|
||||
/config/*
|
||||
/config/config.inc.php
|
||||
/config/db.config.php
|
||||
/tmp/*
|
||||
/modules/*
|
||||
/templates/*
|
||||
/uploads/*
|
||||
*.DS_Store
|
||||
@@ -98,5 +98,139 @@
|
||||
$AVE_Module->moduleRemove($_REQUEST['module']);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'aliases_all':
|
||||
if (check_permission_acp('modules_system')) {
|
||||
$modules_list = array();
|
||||
|
||||
$sql = "SELECT
|
||||
a.id,
|
||||
a.module_name as sys_name,
|
||||
a.module_link_name,
|
||||
a.module_action,
|
||||
a.module_link,
|
||||
a.module_url as alias_url,
|
||||
a.document_id as doc_id,
|
||||
a.module_admin,
|
||||
m.ModuleName as title
|
||||
FROM " . PREFIX . "_modules_aliases a
|
||||
LEFT JOIN " . PREFIX . "_module m ON m.ModuleSysName = a.module_name
|
||||
ORDER BY a.id DESC";
|
||||
|
||||
$q = $AVE_DB->Query($sql);
|
||||
|
||||
while ($row = $q->FetchAssocArray()) {
|
||||
|
||||
if (empty($row['title'])) {
|
||||
$row['title'] = $row['sys_name'];
|
||||
}
|
||||
$modules_list[] = $row;
|
||||
}
|
||||
|
||||
$all_docs = array();
|
||||
$doc_q = $AVE_DB->Query("SELECT Id, document_title FROM " . PREFIX . "_documents ORDER BY document_title ASC");
|
||||
while ($d = $doc_q->FetchAssocArray()) {
|
||||
$all_docs[$d['Id']] = $d['document_title'];
|
||||
}
|
||||
|
||||
$AVE_Template->assign(array(
|
||||
'modules_list' => $modules_list,
|
||||
'all_docs' => $all_docs,
|
||||
'sess' => SESSION
|
||||
));
|
||||
|
||||
$AVE_Template->assign('content', $AVE_Template->fetch('modules/all_modules_aliases.tpl'));
|
||||
}
|
||||
break;
|
||||
|
||||
case 'aliases':
|
||||
if (check_permission_acp('modules_system')) {
|
||||
$alias_id = (int)($_REQUEST['id'] ?? 0);
|
||||
|
||||
if (!empty($_POST['save_aliases'])) {
|
||||
$update_data = [
|
||||
'module_name' => $_POST['module_name'] ?? '',
|
||||
'module_url' => trim($_POST['module_url'], '/ ') . '/',
|
||||
'document_id' => (int)$_POST['document_id'],
|
||||
'module_action' => $_POST['module_action'] ?? '',
|
||||
'module_link' => $_POST['module_link'] ?? '',
|
||||
'module_link_name' => $_POST['module_link_name'] ?? '',
|
||||
'module_admin' => isset($_POST['module_admin']) ? '1' : '0'
|
||||
];
|
||||
|
||||
$res = $AVE_Module->moduleAliasSave($alias_id, $update_data);
|
||||
|
||||
if (function_exists('clear_cache')) clear_cache();
|
||||
|
||||
// Если это AJAX (сохранение из модального окна)
|
||||
if (isset($_REQUEST['ajax']) || isset($_REQUEST['onlycontent'])) {
|
||||
@ob_clean();
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$message = '';
|
||||
// Проверяем, какую именно ошибку вернул метод
|
||||
if ($res === 'error_duplicate_url') {
|
||||
$message = 'ВНИМАНИЕ: ЧПУ адрес "' . $_POST['module_url'] . '" уже занят другим модулем!';
|
||||
} elseif ($res === 'error_duplicate_link') {
|
||||
$message = 'ОШИБКА: Для этого оригинального URL уже существует запись. Не плодите дубликаты!';
|
||||
}
|
||||
|
||||
if ($message) {
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
'message' => $message
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => $res ? 'success' : 'error']);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$alias_data = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modules_aliases WHERE id = '{$alias_id}'")->FetchAssocArray();
|
||||
if (!$alias_data) {
|
||||
$alias_data = [
|
||||
'module_name' => '', 'module_link_name' => '', 'module_action' => '',
|
||||
'module_link' => '', 'module_url' => '', 'document_id' => 0, 'module_admin' => '1'
|
||||
];
|
||||
}
|
||||
|
||||
// Получаем список документов для выпадающего списка
|
||||
$all_docs = array();
|
||||
$doc_q = $AVE_DB->Query("SELECT Id, document_title FROM " . PREFIX . "_documents ORDER BY document_title ASC");
|
||||
while ($d = $doc_q->FetchAssocArray()) {
|
||||
$all_docs[$d['Id']] = $d['document_title'];
|
||||
}
|
||||
|
||||
$AVE_Template->assign([
|
||||
'alias_id' => $alias_id,
|
||||
'alias_data' => $alias_data,
|
||||
'all_docs' => $all_docs,
|
||||
'sess' => SESSION
|
||||
]);
|
||||
|
||||
if (isset($_REQUEST['ajax']) || isset($_REQUEST['onlycontent'])) {
|
||||
echo $AVE_Template->fetch('modules/module_aliases.tpl');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'alias_delete':
|
||||
if (check_permission_acp('modules_system')) {
|
||||
$id = (int)($_REQUEST['id'] ?? 0);
|
||||
|
||||
if ($id > 0) {
|
||||
$AVE_Module->moduleAliasDeleteById($id);
|
||||
|
||||
if (function_exists('clear_cache')) clear_cache();
|
||||
}
|
||||
|
||||
// Возвращаем на страницу списка всех алиасов
|
||||
header('Location: index.php?do=modules&action=aliases_all&cp=' . SESSION);
|
||||
exit;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
?>
|
||||
103
admin/templates/modules/all_modules_aliases.tpl
Normal file
103
admin/templates/modules/all_modules_aliases.tpl
Normal file
@@ -0,0 +1,103 @@
|
||||
<div class="title"><h5>Управление ЧПУ всех модулей</h5></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><a href="index.php?do=modules&cp={$sess}">Управление модулями</a></li>
|
||||
<li>Список всех ЧПУ</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="widget first">
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic mainForm">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Название ссылки</td>
|
||||
<td>Системное имя</td>
|
||||
<td>Action</td>
|
||||
<td>Оригинальный URL</td>
|
||||
<td>ЧПУ Алиас</td>
|
||||
<td>Документ (ID)</td>
|
||||
<td width="40" align="center">Меню</td>
|
||||
<td width="40" align="center">Правка</td>
|
||||
<td width="40" align="center">Удалить</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach from=$modules_list item=mod}
|
||||
<tr>
|
||||
<td><strong>{$mod.module_link_name|default:$mod.title}</strong></td>
|
||||
<td><span class="cmsStats">{$mod.sys_name}</span></td>
|
||||
<td><span class="blue">{$mod.module_action|default:'---'}</span></td>
|
||||
<td><span class="dgrey" style="font-size: 11px;">{$mod.module_link|default:'---'}</span></td>
|
||||
<td>
|
||||
<input type="text" value="{$mod.alias_url}" style="width: 90%; font-family: monospace;" readonly />
|
||||
</td>
|
||||
<td>
|
||||
{if $mod.doc_id > 0}
|
||||
<span class="green">{$all_docs[$mod.doc_id]|default:'Документ не найден'} (ID: {$mod.doc_id})</span>
|
||||
{else}
|
||||
<span class="dgrey">Без привязки</span>
|
||||
{/if}
|
||||
</td>
|
||||
|
||||
<td align="center">
|
||||
{if $mod.module_admin == '1'}
|
||||
<span class="icon_sprite ico_ok" title="В меню"></span>
|
||||
{else}
|
||||
<span class="icon_sprite ico_ok_green" title="Скрыт"></span>
|
||||
{/if}
|
||||
</td>
|
||||
|
||||
<td align="center">
|
||||
<a href="index.php?do=modules&action=aliases&id={$mod.id}&cp={$sess}&ajax=1&onlycontent=1"
|
||||
data-dialog="aliases-{$mod.id}"
|
||||
data-height="550"
|
||||
data-width="650"
|
||||
data-modal="true"
|
||||
data-title="Редактировать ЧПУ: {$mod.module_link_name|default:$mod.title}"
|
||||
class="openDialog icon_sprite ico_edit topleftDir"
|
||||
title="Редактировать"></a>
|
||||
</td>
|
||||
|
||||
<td align="center">
|
||||
<a href="javascript:void(0);"
|
||||
class="icon_sprite ico_delete topleftDir"
|
||||
title="Удалить"
|
||||
onclick="jConfirm('Удалить алиас <strong>{$mod.alias_url}</strong>?', 'Подтверждение', function(r) {
|
||||
if(r) window.location.href='index.php?do=modules&action=alias_delete&id={$mod.id}&cp={$sess}';
|
||||
});"></a>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{if empty($modules_list)}
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
|
||||
<tbody>
|
||||
<tr class="noborder">
|
||||
<td colspan="9">
|
||||
<ul class="messages">
|
||||
<li class="highlight yellow">Список ЧПУ алиасов пуст. Добавьте первый алиас, чтобы настроить красивые ссылки.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="fix" style="margin-top: 20px;">
|
||||
<a href="index.php?do=modules&cp={$sess}" class="button basicBtn">Вернуться к списку модулей</a>
|
||||
|
||||
<a href="index.php?do=modules&action=aliases&id=0&cp={$sess}&ajax=1&onlycontent=1"
|
||||
data-dialog="aliases-0"
|
||||
data-height="550"
|
||||
data-width="650"
|
||||
data-modal="true"
|
||||
data-title="Добавить новый ЧПУ алиас"
|
||||
class="button basicBtn greenBtn openDialog">Добавить новый алиас</a>
|
||||
</div>
|
||||
116
admin/templates/modules/module_aliases.tpl
Normal file
116
admin/templates/modules/module_aliases.tpl
Normal file
@@ -0,0 +1,116 @@
|
||||
<div class="widget first">
|
||||
<form action="index.php?do=modules&action=aliases&id={$alias_id}&cp={$sess}&ajax=1&onlycontent=1" method="post" id="AliasForm">
|
||||
<input type="hidden" name="save_aliases" value="1" />
|
||||
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic mainForm">
|
||||
<tr>
|
||||
<td width="150">Системное имя модуля:</td>
|
||||
<td><input type="text" name="module_name" value="{$alias_data.module_name|default:''}" style="width: 95%;" placeholder="Например: search" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="150">Название ссылки:</td>
|
||||
<td><input type="text" name="module_link_name" value="{$alias_data.module_link_name|default:''}" style="width: 95%;" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Системный Action:</td>
|
||||
<td><input type="text" name="module_action" value="{$alias_data.module_action|default:''}" style="width: 95%;" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Оригинальный URL:</td>
|
||||
<td><input type="text" name="module_link" value="{$alias_data.module_link|default:''}" style="width: 95%;" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>ЧПУ Алиас:</strong></td>
|
||||
<td><input type="text" name="module_url" value="{$alias_data.module_url|default:''}" style="width: 95%; font-weight: bold;" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Привязка к документу:</td>
|
||||
<td>
|
||||
<select name="document_id" style="width: 98%;">
|
||||
<option value="0">-- Без привязки --</option>
|
||||
{foreach from=$all_docs key=d_id item=d_title}
|
||||
<option value="{$d_id}" {if $d_id == ($alias_data.document_id|default:0)}selected="selected"{/if}>{$d_title}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Доступ в админке:</td>
|
||||
<td>
|
||||
<input type="checkbox" name="module_admin" value="1" {if ($alias_data.module_admin|default:'1') == '1'}checked="checked"{/if} />
|
||||
<label>Отображать в меню модулей</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" style="padding: 15px 10px;">
|
||||
<input type="submit" class="basicBtn SaveAlias" value="Сохранить изменения" />
|
||||
|
||||
<a href="javascript:void(0);" class="button redBtn CloseModal">Закрыть окно</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{literal}
|
||||
<script type="text/javascript">
|
||||
$(function(){
|
||||
var a_id = '{/literal}{$alias_id}{literal}';
|
||||
|
||||
function closeAndReload() {
|
||||
$('#ajax-dialog-aliases-' + a_id).dialog('destroy').remove();
|
||||
if (window.parent) window.parent.location.reload();
|
||||
else window.location.reload();
|
||||
}
|
||||
|
||||
$(document).off('click', '.CloseModal').on('click', '.CloseModal', function(e){
|
||||
e.preventDefault();
|
||||
closeAndReload();
|
||||
});
|
||||
|
||||
var $dialog = $('#ajax-dialog-aliases-' + a_id).closest('.ui-dialog');
|
||||
$dialog.find('.ui-dialog-titlebar-close').on('click', function(){
|
||||
if (window.parent) window.parent.location.reload();
|
||||
});
|
||||
|
||||
$(document).off('click', '.SaveAlias').on('click', '.SaveAlias', function(e){
|
||||
e.preventDefault();
|
||||
var $btn = $(this);
|
||||
|
||||
$("#AliasForm").ajaxSubmit({
|
||||
dataType: 'json',
|
||||
beforeSubmit: function() {
|
||||
$btn.attr("disabled", true).val("Сохранение...");
|
||||
},
|
||||
success: function(r){
|
||||
if (r && r.status == 'success') {
|
||||
$.jGrowl(r.message || "Изменения успешно сохранены", {
|
||||
theme: "accept",
|
||||
life: 3000
|
||||
});
|
||||
|
||||
if (parseInt(a_id) === 0) {
|
||||
setTimeout(function() {
|
||||
if (window.parent) window.parent.location.reload();
|
||||
}, 900);
|
||||
} else {
|
||||
$btn.attr("disabled", false).val("Сохранить изменения");
|
||||
}
|
||||
} else {
|
||||
var msg = (r && r.message) ? r.message : "Ошибка при сохранении";
|
||||
$.jGrowl(msg, {
|
||||
theme: "error",
|
||||
life: 5000
|
||||
});
|
||||
$btn.attr("disabled", false).val("Сохранить изменения");
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
$.jGrowl("Критическая ошибка сервера", { theme: "error" });
|
||||
$btn.attr("disabled", false).val("Сохранить изменения");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/literal}
|
||||
@@ -50,7 +50,7 @@ $(document).ready(function(){ldelim}
|
||||
|
||||
<div class="widget first">
|
||||
<div class="num">
|
||||
<a class="basicNum topDir" href="index.php?do=modules&action=aliases&cp={$sess}">Редактирование алиасов</a>
|
||||
<a class="basicNum topDir" href="index.php?do=modules&action=aliases_all&cp={$sess}">Редактирование алиасов</a>
|
||||
</div>
|
||||
<ul class="tabs">
|
||||
<li class="activeTab"><a href="#tab1">{#MODULES_INSTALLED#}</a></li>
|
||||
|
||||
@@ -2157,9 +2157,37 @@
|
||||
}*/
|
||||
|
||||
|
||||
// Иначе ищем URL в редиректах
|
||||
else
|
||||
// Иначе ищем URL в редиректах
|
||||
else
|
||||
{
|
||||
// Сначала ищем в истории МOДУЛЕЙ
|
||||
$sql = "
|
||||
SELECT
|
||||
# MODULE REDIRECT = $get_url
|
||||
m.module_url,
|
||||
h.module_alias_header
|
||||
FROM
|
||||
".PREFIX."_modules_aliases_history AS h,
|
||||
".PREFIX."_modules_aliases AS m
|
||||
WHERE
|
||||
h.module_name = m.module_name
|
||||
AND
|
||||
h.module_alias = '" . str_ireplace("'", "\'", $get_url) . "'
|
||||
";
|
||||
|
||||
$mod_redirect = $AVE_DB->Query($sql)->FetchRow();
|
||||
|
||||
if ($mod_redirect?->module_url)
|
||||
{
|
||||
$GLOBALS['block_generate']['DOCUMENT']['URL_PARSE'] = Debug::endTime('URL_PARSE');
|
||||
|
||||
$redirect_url = ABS_PATH . $mod_redirect->module_url;
|
||||
$header_code = $mod_redirect->module_alias_header ?? 301;
|
||||
header('Location:' . $redirect_url, true, $header_code);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Если не нашли в модулях — ищем в истории ДОКУМЕНТОВ
|
||||
$sql = "
|
||||
SELECT
|
||||
# REDIRECT = $get_url
|
||||
@@ -2171,7 +2199,7 @@
|
||||
WHERE
|
||||
h.document_id = a.Id
|
||||
AND
|
||||
h.document_alias = '" . $get_url . "'
|
||||
h.document_alias = '" . str_ireplace("'", "\'", $get_url) . "'
|
||||
";
|
||||
|
||||
$redirect_alias = $AVE_DB->Query($sql)->FetchRow();
|
||||
@@ -2180,11 +2208,11 @@
|
||||
|
||||
if ($redirect_alias?->document_alias)
|
||||
{
|
||||
$redirect_alias = ABS_PATH . $redirect_alias->document_alias . URL_SUFF;
|
||||
$redirect_alias = str_replace('//', '/', $redirect_alias);
|
||||
$redirect_url = ABS_PATH . $redirect_alias->document_alias . URL_SUFF;
|
||||
$redirect_url = str_replace('//', '/', $redirect_url);
|
||||
|
||||
$header_code = $redirect_alias->document_alias_header ?? 301;
|
||||
header('Location:' . $redirect_alias, true, $header_code);
|
||||
header('Location:' . $redirect_url, true, $header_code);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
* AVE.cms
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @version 3.x
|
||||
* @version 4.x
|
||||
* @filesource
|
||||
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
|
||||
* @copyright © 2007-2026 AVE.cms, https://ave4cms.ru
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* Метод, предназначенный для удаление модуля
|
||||
*
|
||||
*/
|
||||
@@ -536,6 +536,9 @@
|
||||
|
||||
$AVE_DB->Query($sql);
|
||||
|
||||
// Удаляем записи ЧПУ и историю редиректов для этого модуля
|
||||
$this->moduleAliasDelete(MODULE_PATH);
|
||||
|
||||
$this->clearModulesCache();
|
||||
|
||||
// Сохраняем системное сообщение в журнал
|
||||
@@ -638,5 +641,143 @@ public function moduleRemove ($dir)
|
||||
|
||||
return rrmdir($cache_dir);
|
||||
}
|
||||
/**
|
||||
* Метод для получения текущего ЧПУ модуля
|
||||
*/
|
||||
public function moduleAliasGet($module_name)
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
$sql = "SELECT
|
||||
id,
|
||||
document_id,
|
||||
module_name,
|
||||
module_action,
|
||||
module_link,
|
||||
module_link_name,
|
||||
module_url,
|
||||
module_admin
|
||||
FROM " . PREFIX . "_modules_aliases
|
||||
WHERE module_name = '" . addslashes($module_name) . "'
|
||||
LIMIT 1";
|
||||
|
||||
$result = $AVE_DB->Query($sql)->FetchAssocArray();
|
||||
|
||||
return $result ?: [
|
||||
'id' => 0,
|
||||
'document_id' => 0,
|
||||
'module_name' => $module_name,
|
||||
'module_action' => '',
|
||||
'module_link' => '',
|
||||
'module_link_name' => '',
|
||||
'module_url' => '',
|
||||
'module_admin' => '0'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохранение ЧПУ настройки модуля
|
||||
* */
|
||||
public function moduleAliasSave($id, $data)
|
||||
{
|
||||
global $AVE_DB;
|
||||
$id = (int)$id;
|
||||
|
||||
$module_name = addslashes($data['module_name'] ?? '');
|
||||
$module_link_name = addslashes($data['module_link_name'] ?? '');
|
||||
$module_action = addslashes($data['module_action'] ?? '');
|
||||
$module_link = addslashes($data['module_link'] ?? '');
|
||||
$module_url = addslashes($data['module_url'] ?? '');
|
||||
$document_id = (int)($data['document_id'] ?? 0);
|
||||
$module_admin = (int)($data['module_admin'] ?? 0);
|
||||
|
||||
$exact_match = $AVE_DB->Query("SELECT id FROM " . PREFIX . "_modules_aliases
|
||||
WHERE id = '{$id}'
|
||||
AND module_name = '{$module_name}'
|
||||
AND module_link_name = '{$module_link_name}'
|
||||
AND module_action = '{$module_action}'
|
||||
AND module_link = '{$module_link}'
|
||||
AND module_url = '{$module_url}'
|
||||
AND document_id = '{$document_id}'
|
||||
AND module_admin = '{$module_admin}'
|
||||
LIMIT 1")->FetchAssocArray();
|
||||
|
||||
if ($exact_match) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Уникальность ЧПУ (module_url)
|
||||
$check_url = $AVE_DB->Query("SELECT id FROM " . PREFIX . "_modules_aliases
|
||||
WHERE module_url = '{$module_url}' AND id != '{$id}' LIMIT 1")->FetchAssocArray();
|
||||
if ($check_url) {
|
||||
return 'error_duplicate_url';
|
||||
}
|
||||
|
||||
// Уникальность Оригинального URL (module_link)
|
||||
$check_link = $AVE_DB->Query("SELECT id FROM " . PREFIX . "_modules_aliases
|
||||
WHERE module_link = '{$module_link}' AND id != '{$id}' LIMIT 1")->FetchAssocArray();
|
||||
if ($check_link) {
|
||||
return 'error_duplicate_link';
|
||||
}
|
||||
|
||||
// ОБРАБОТКА ИСТОРИИ (только при редактировании)
|
||||
if ($id > 0) {
|
||||
$old_data = $AVE_DB->Query("SELECT module_name, module_url FROM " . PREFIX . "_modules_aliases WHERE id = '{$id}'")->FetchAssocArray();
|
||||
if ($old_data && $old_data['module_url'] != $module_url) {
|
||||
$old_url_clean = addslashes($old_data['module_url']);
|
||||
$check_history = $AVE_DB->Query("SELECT id FROM " . PREFIX . "_modules_aliases_history WHERE module_alias = '{$old_url_clean}'")->FetchAssocArray();
|
||||
if (!$check_history) {
|
||||
$AVE_DB->Query("INSERT INTO " . PREFIX . "_modules_aliases_history
|
||||
(module_name, module_alias, module_alias_header)
|
||||
VALUES ('" . addslashes($old_data['module_name']) . "', '{$old_url_clean}', 301)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sql_set = "module_name = '{$module_name}',
|
||||
module_link_name = '{$module_link_name}',
|
||||
module_action = '{$module_action}',
|
||||
module_link = '{$module_link}',
|
||||
module_url = '{$module_url}',
|
||||
document_id = '{$document_id}',
|
||||
module_admin = '{$module_admin}'";
|
||||
|
||||
if ($id == 0) {
|
||||
$sql = "INSERT INTO " . PREFIX . "_modules_aliases SET " . $sql_set;
|
||||
} else {
|
||||
$sql = "UPDATE " . PREFIX . "_modules_aliases SET " . $sql_set . " WHERE id = '{$id}'";
|
||||
}
|
||||
|
||||
return (bool)$AVE_DB->Query($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод для удаления всех ЧПУ записей модуля (при полном удалении модуля)
|
||||
*/
|
||||
public function moduleAliasDelete($module_name)
|
||||
{
|
||||
global $AVE_DB;
|
||||
$m_name = addslashes($module_name);
|
||||
|
||||
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases WHERE module_name = '{$m_name}'");
|
||||
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases_history WHERE module_name = '{$m_name}'");
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод для удаления ОДНОЙ конкретной записи ЧПУ по ID
|
||||
*/
|
||||
public function moduleAliasDeleteById($id)
|
||||
{
|
||||
global $AVE_DB;
|
||||
$id = (int)$id;
|
||||
if ($id > 0) {
|
||||
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases WHERE id = '{$id}'");
|
||||
// Чистим историю именно для этого ID, если она ведется
|
||||
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases_history WHERE id = '{$id}'");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -6,13 +6,13 @@
|
||||
* @package AVE.cms
|
||||
* @version 4.x
|
||||
* @filesource
|
||||
* @copyright © 2007-2025 AVE.cms, https://ave.gitget.ru
|
||||
* @copyright © 2007-2026 AVE.cms, https://ave4cms.ru
|
||||
*
|
||||
* @license GPL v.2
|
||||
*/
|
||||
|
||||
define('APP_NAME', 'AVE.cms');
|
||||
define('APP_VERSION', '3.31 ALT');
|
||||
define('APP_VERSION', '3.32 ALT');
|
||||
define('APP_INFO', '<a target="_blank" href="https://ave-cms.ru/">Ave-Cms.Ru</a> '.'© 2007-' . date('Y'));
|
||||
|
||||
$themes = [];
|
||||
|
||||
@@ -370,4 +370,7 @@ INSERT INTO `%%PRFX%%_users`
|
||||
|
||||
INSERT INTO `%%PRFX%%_paginations` (`id`, `pagination_name`, `pagination_box`, `pagination_start_label`, `pagination_end_label`, `pagination_separator_box`, `pagination_separator_label`, `pagination_next_label`, `pagination_prev_label`, `pagination_link_box`, `pagination_active_link_box`, `pagination_link_template`, `pagination_link_active_template`)
|
||||
VALUES
|
||||
(1, 'Общий шаблон', '<ul class=\"pagination pagination-sm\">%s</ul>', '<span aria-hidden=\"true\">Первая</span>', '<span aria-hidden=\"true\">Последняя</span>', '<li class=\"disabled\"><span aria-hidden=\"true\">%s</span></li>', '…', '<i class=\"bi bi-arrow-right\"></i>', '<i class=\"bi bi-arrow-left\"></i>', '<li class=\"page-item\">%s</li>', '<li class=\"page-item active\">%s</li>', '<a class=\"page-link\" href=\"[link]\" data-pagination=\"[page]\">[name]</a>', '<a class=\"page-link active\" href=\"[link]\">[name]</a>');#inst#
|
||||
(1, 'Общий шаблон', '<ul class=\"pagination pagination-sm\">%s</ul>', '<span aria-hidden=\"true\">Первая</span>', '<span aria-hidden=\"true\">Последняя</span>', '<li class=\"disabled\"><span aria-hidden=\"true\">%s</span></li>', '…', '<i class=\"bi bi-arrow-right\"></i>', '<i class=\"bi bi-arrow-left\"></i>', '<li class=\"page-item\">%s</li>', '<li class=\"page-item active\">%s</li>', '<a class=\"page-link\" href=\"[link]\" data-pagination=\"[page]\">[name]</a>', '<a class=\"page-link active\" href=\"[link]\">[name]</a>');#inst#
|
||||
-- Пример алиаса для модуля Поиск
|
||||
INSERT INTO `%%PRFX%%_modules_aliases` (`id`, `document_id`, `module_name`, `module_action`, `module_link`, `module_link_name`, `module_url`, `module_admin`) VALUES
|
||||
(1, 0, 'search', 'search', 'index.php?module=search&query=', 'Поиск по сайту', 'search/', '0');#inst#
|
||||
@@ -171,9 +171,8 @@ CREATE TABLE `%%PRFX%%_module` (
|
||||
UNIQUE KEY `name` (`ModuleName`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
|
||||
|
||||
|
||||
CREATE TABLE `%%PRFX%%_modules_aliases` (
|
||||
`id` tinyint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`document_id` int(10) NOT NULL DEFAULT '0',
|
||||
`module_name` char(50) NOT NULL DEFAULT '',
|
||||
`module_action` varchar(255) NOT NULL DEFAULT '',
|
||||
@@ -186,6 +185,16 @@ CREATE TABLE `%%PRFX%%_modules_aliases` (
|
||||
KEY `name` (`module_name`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
|
||||
|
||||
CREATE TABLE `%%PRFX%%_modules_aliases_history` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`module_name` varchar(50) NOT NULL DEFAULT '',
|
||||
`module_alias` varchar(255) NOT NULL DEFAULT '',
|
||||
`module_alias_header` int(3) NOT NULL DEFAULT '301',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `alias` (`module_alias`),
|
||||
KEY `module_name` (`module_name`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst#
|
||||
|
||||
|
||||
CREATE TABLE `%%PRFX%%_navigation` (
|
||||
`navigation_id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||
|
||||
@@ -442,4 +442,49 @@
|
||||
`document_alias`
|
||||
");
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------3.32-------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------------------------------------------- */
|
||||
|
||||
$check = $AVE_DB->Query("SHOW TABLES LIKE '" . PREFIX . "_modules_aliases_history'")->NumRows();
|
||||
if ($check == 0)
|
||||
{
|
||||
$AVE_DB->Real_Query("
|
||||
CREATE TABLE `" . PREFIX . "_modules_aliases_history` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`module_name` varchar(50) NOT NULL DEFAULT '',
|
||||
`module_alias` varchar(255) NOT NULL DEFAULT '',
|
||||
`module_alias_header` int(3) NOT NULL DEFAULT '301',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `alias` (`module_alias`),
|
||||
KEY `module_name` (`module_name`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;
|
||||
");
|
||||
}
|
||||
|
||||
$check = $AVE_DB->Query("SHOW COLUMNS FROM " . PREFIX . "_modules_aliases LIKE 'module_url'")->NumRows();
|
||||
if ($check == 0)
|
||||
{
|
||||
$AVE_DB->Real_Query("
|
||||
ALTER TABLE " . PREFIX . "_modules_aliases
|
||||
ADD `module_url` varchar(255) NOT NULL DEFAULT ''
|
||||
AFTER `module_link_name`
|
||||
");
|
||||
|
||||
$AVE_DB->Real_Query("ALTER TABLE " . PREFIX . "_modules_aliases ADD UNIQUE KEY `url` (`module_url`);");
|
||||
}
|
||||
|
||||
$check_id_type = $AVE_DB->Query("
|
||||
SHOW COLUMNS FROM " . PREFIX . "_modules_aliases
|
||||
WHERE Field = 'id' AND Type LIKE 'tinyint%'
|
||||
")->NumRows();
|
||||
|
||||
if ($check_id_type > 0)
|
||||
{
|
||||
$AVE_DB->Real_Query("
|
||||
ALTER TABLE `" . PREFIX . "_modules_aliases`
|
||||
MODIFY `id` int(11) unsigned NOT NULL AUTO_INCREMENT
|
||||
");
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user