diff --git a/README.md b/README.md index a69a8ce..d0094fb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,22 @@ -### Альтернативная версия AVE.CMS v3.31 ALT +### Альтернативная версия AVE.CMS v3.32 ALT ### Changelog: +#### Версия v3.32 ALT - Добавлено Управление редиректами модулей. Теперь каждой системной ссылке модуля можно добавить ЧПУ алиас. Создан интерфейс «История алиасов», где можно массово удалять старые записи или вручную добавлять новые редиректы с кодами 301 (постоянный) или 302 (временный). +* Пример создания алиаса для модуля Поиск - ссылка на страницу результатов поиска: + * Установите модуль Поиск. + * Перейдите в раздел Управление модулями->Редактирование алиасов. + * На открывшейся странице делаем клик по кнопке "Создать редирект" + * В открывшемся модальном окне "Создать редирект" заполняем ВСЕ поля: + * Системное имя модуля: ```search``` (можно брать название корневой папки модуля) + * Название редиректа: ```Страница с результатами поиска``` + * Системный Action: ```search``` - берется из системной ссылки модуля + * Системный URL: ```index.php?module=search&query=``` - берется из системной ссылки модуля. Если вы не знаете URL использующийся в шаблонах модуля , можете просто скопировать и вставить URL из браузера со страницы вывода результатов поиска ```https://домен.xx/?module=search&query=```. Скрипт обработает вашу ссылку и оставит в поле Системный URL: ```?module=search&query=```, а при сохранении подставит в начало ```index.php``` и , финальная ссылка (после сохранения) станет такой же как приведено в самом начале ```index.php?module=search&query=``` т.е. системной ссылкой модуля. Запрещается использовать ссылки внешних доменов, скрипт просто заменит такие ссылки на ```index.php``` + * Основной ЧПУ алиас: укажите любой желаемый алиас, по которому вы хотите открывать страницу поиска, например ```search/``` + * Привязка к документу: если вы хотите использовать алиас ```search/``` в документе, вы можете сразу выбрать нужный документ и сохранить его, что-бы спустя время понимать где расположен и используется этот алиас. + * Доступ в админпанель: вы можете создавать алиасы, ведущие , например, из паблика в админпанель. Доступ в админпанель по таким алиасам получает только Администратор. + * После заполнения этих полей, делаем клик по кнопке "Сохранить изменения" - редирект создан. Наберите в адресной строке браузера ```https://домен.xx/search/``` и вы попадете на страницу результатов поиска. + * История алиасов. После того как вы создали редирект, станет доступно создание дополнительных алиасов для этого редиректа. Кликните по иконке "История", в открывшемся модальном окне "Управление редиректом Страница с результатами поиска" можно добавить варианты алиасов , например ```find/``` и в этом случае при наборе в адресной строке браузера уже ```https://домен.xx/find/``` будет переадресация на страницу ```https://домен.xx/search/``` с кодом 301 или 302 (в зависимости от вашего выбора). #### Версия v3.31 ALT - Готова для работы в среде PHP-8.4.x; исправлены ошибки тянущиеся из прошлых версий. Добавлен PHPMailer для отправки почты методами mail и sendmail, Symfony Mailer работает исключительно с SMTP протоколом. #### Версия v3.30 ALT - Шаблонизатор Smarty обновлен до версии 5.6 #### Версия v3.29 ALT - удален устаревший Swift Mailer, на замену ему интегрирован Symfony Mailer; diff --git a/admin/lang/ru/modules.txt b/admin/lang/ru/modules.txt index a3d6632..9e2e6e0 100644 --- a/admin/lang/ru/modules.txt +++ b/admin/lang/ru/modules.txt @@ -1,5 +1,8 @@ [modules] MODULES_SUB_TITLE = "Управление модулями" +MODULES_ALIASES = "Управление редиректами модулей" +MODULES_ALIASES_TITLE = "В данном разделе приведен список всех модулей, у которых присутвуют внутренние редиректы.
+Здесь Вы можете выполнить основные операции как: Создание, Просмотр, Редактирование, Удаление редиректа." MODULES_TIP = "В данном разделе приведен список всех доступных модулей в системе. Здесь Вы можете установить, отключить, обновить любой из модулей, а также выполнить дополнительные, персональные настройки для любого из модулей." MODULES_NAME = "Название модуля" MODULES_INFO = "Информация" @@ -19,6 +22,7 @@ MODULES_UPDATE = "Обновить модуль" MODULES_STOP = "Отключить модуль" MODULES_START = "Включить модуль" MODULES_BUTTON_SAVE = "Сохранить изменения" +MODULES_ERR_AL_SAVE = "Ошибка при сохранении" MODULES_LEGEND = "Значения пиктограмм" MODULES_AUTHOR = "Автор модуля" MODULES_ERROR = "Возникла ошибка при загрузке модуля: " @@ -39,10 +43,10 @@ MODULES_ERR_DUPLICATE_URL = "ВНИМАНИЕ: Данный ЧПУ адрес MODULES_ERR_DUPLICATE_LINK = "ОШИБКА: Для этой оригинальной ссылки уже создан алиас. Дубликаты запрещены!" MODULES_ERR_SAVE_FAILED = "Не удалось сохранить данные из-за ошибки в базе данных." MODULES_EDIT_ALIAS = "Редактирование алиасов" -MODULES_REDIRECT = "Управление редиректами › " +MODULES_REDIRECT = "Управление редиректом" MODULES_MODULE_HIS = "Модуль:" -MODULES_SYSLINK_HIS = "Системная ссылка:" -MODULES_MAIN_ALIASE_HIS = "Основной алиас:" +MODULES_SYSLINK_HIS = "Системный URL:" +MODULES_MAIN_ALIASE_HIS = "Основной ЧПУ алиас:" MODULES_REDIRECT_ACTIV_HIS = "Список редиректов" MODULES_LIST_ALIAS_HIS = "Алиас редиректа" MODULES_NAME_LINK_HIS = "ссылка" @@ -64,4 +68,45 @@ MODULES_MES_INS_ADR = "Введите адрес!" MODULES_MES_ADD_HIS = "Добавлено в историю" MODULES_MES_ERR_SAVE_HIS = "Ошибка сохранения" MODULES_MES_DEL_SEL_HIS = "Удалить этот редирект?" -MODULES_MES_DEL_ONE_OK = "Запись удалена" \ No newline at end of file +MODULES_MES_DEL_ONE_OK = "Запись удалена" +MODULES_REDIRECT_PARAM = "Параметры редиректа" +MODULES_SYS_NAME = "Системное имя модуля:" +MODULES_LINK_NAME = "Название редиректа" +MODULES_SYS_ACTIONS = "Системный Action:" +MODULES_ORIGINAL_URL = "Системный URL" +MODULES_PREWIEW_URL = "Предпросмотр URL" +MODULES_MAIN_ALIAS = "Основной ЧПУ алиас:" +MODULES_USE_ALIAS_DOC = "Привязка к документу:" +MODULES_USE_ALIAS_DOC_NO = "-- Без привязки --" +MODULES_SEL_CATEG = "-- Выберите рубрику --" +MODULES_ADMIN_ACCESS = "Доступ в админпанель:" +MODULES_ADMIN_ACCESS_SEL = "выбрать, если используется в админпанели" +MODULES_TXT_LOAD = "Загрузка..." +MODULES_TXT_SAVE = "Сохранение..." +MODULES_JS_ADD_LINK = "...введите ссылку..." +MODULES_JS_OK_ALERT = "Изменения успешно сохранены" +MODULES_MES_EMPTY_FIELDS = "Заполните все обязательные поля!" +MODULES_ALIASES_MOD_LIST = "Список модулей c редиректами" +MODULES_ACTION_TITLE = "Действие" +MODULES_DOC_ID = "Документ (ID)" +MODULES_DOC_TITLE_M = "Док." +MODULES_LINK_PUB_ADM = "Меню" +MODULES_LINK_SITE_M = "Сайт" +MODULES_LINK_HIS_M = "История" +MODULES_LINK_EDIT_M = "Правка" +MODULES_ERR_404_DOC = "Документ не найден" +MODULES_USE_M_DOC_NO = "Без привязки" +MODULES_USE_ML_DOC_NO = "Привязка отсутствует" +MODULES_LINK_M_ADM = "Админка" +MODULES_LINK_M_PUB = "Паблик" +MODULES_GO_EDIT_DOC = "Перейти к редактированию документа" +MODULES_GO_LOOK_SITE = "Посмотреть на сайте" +MODULES_HIS_REDIR_M = "История редиректа" +MODULES_REDIR_EDIT_M = "Редактировать редирект" +MODULES_ICO_EDIT_M = "Редактировать" +MODULES_ICO_DELET_M = "Удалить алиас" +MODULES_LIST_URL_A = "Список ЧПУ алиасов пуст." +MODULES_BACK_LIST_MOD = "Вернуться к списку модулей" +MODULES_ADD_REDIR_NEW = "Создать редирект" +MODULES_DEL_SEL_ALIAC = "Удалить выбранные алиасы" +MODULES_COL_SEL_ALIAC = "шт." \ No newline at end of file diff --git a/admin/templates/modules/all_modules_aliases.tpl b/admin/templates/modules/all_modules_aliases.tpl index c96d050..c45f4a1 100644 --- a/admin/templates/modules/all_modules_aliases.tpl +++ b/admin/templates/modules/all_modules_aliases.tpl @@ -1,33 +1,42 @@ -
Управление ЧПУ всех модулей
+
{#MODULES_ALIASES#}
+ +
+
+ {#MODULES_ALIASES_TITLE#} +
+
+
+
{#MODULES_ALIASES_MOD_LIST#}
+
- - - - - - - - - - - - + + + + + + + + + + + + @@ -46,36 +55,36 @@ @@ -85,9 +94,9 @@ data-dialog="alias-history-{$mod.id}" data-height="650" data-modal="true" - data-title="История алиасов модуля {$mod.sys_name}" + data-title="{#MODULES_HIS_REDIR_M#}" class="openDialog icon_sprite ico_list topleftDir" - title="История"> + title="{#MODULES_LINK_HIS_M#}"> @@ -113,7 +122,7 @@ @@ -129,7 +138,7 @@ @@ -140,14 +149,14 @@
- Вернуться к списку модулей + {#MODULES_BACK_LIST_MOD#}   Добавить новый алиас + data-title="{#MODULES_ADD_REDIR_NEW#}" + class="button basicBtn greenBtn openDialog">{#MODULES_ADD_REDIR_NEW#}
{literal} @@ -157,7 +166,7 @@ $(function() { $('.selall_aliases').on('change', function() { var checked = $(this).is(':checked'); $('.alias_check').prop('checked', checked); - // Обновляем визуальные стили jqTransform если используется + // Обновляем визуальные стили jqTransform if ($.isFunction($.fn.jqTransform)) { if(checked) { $('.alias_check').parent().find('a').addClass('jqTransformChecked'); @@ -173,11 +182,11 @@ $(function() { var $checked = $('.alias_check:checked'); if ($checked.length === 0) { - $.jGrowl("Ничего не выбрано!", {theme: 'error'}); + $.jGrowl("{/literal}{#MODULES_MES_NO_SELECT_HIS#}{literal}!", {theme: 'error'}); return false; } - jConfirm('Удалить выбранные алиасы (' + $checked.length + ' шт.)?', 'Подтверждение', function(r) { + jConfirm('{/literal}{#MODULES_DEL_SEL_ALIAC#}{literal} (' + $checked.length + ' {/literal}{#MODULES_COL_SEL_ALIAC#}{literal})?', '{/literal}{#MODULES_MES_DEL_CONFRM_HIS#}{literal}', function(r) { if (r) { $('#AliasBatchForm').submit(); } diff --git a/admin/templates/modules/module_aliases.tpl b/admin/templates/modules/module_aliases.tpl index 4cdad40..74d0be7 100644 --- a/admin/templates/modules/module_aliases.tpl +++ b/admin/templates/modules/module_aliases.tpl @@ -1,68 +1,88 @@
-
Управление редиректами модуля {$module_link_name}
+
{#MODULES_REDIRECT#} {$alias_data.module_link_name|default:''}
-
-
Параметры редиректа
+
+
{#MODULES_REDIRECT_PARAM#}
Название ссылкиСистемное имяActionОригинальный URLЧПУ АлиасДокумент (ID)МенюДок.СайтИсторияПравкаУдалить{#MODULES_LINK_NAME#}{#MODULES_SYS_NAME#}{#MODULES_ACTION_TITLE#}{#MODULES_ORIGINAL_URL#}{#MODULES_MAIN_ALIAS#}{#MODULES_DOC_ID#}{#MODULES_LINK_PUB_ADM#}{#MODULES_DOC_TITLE_M#}{#MODULES_LINK_SITE_M#}{#MODULES_LINK_HIS_M#}{#MODULES_LINK_EDIT_M#}{#MODULES_DEL_LINK_HIS#}
{if $mod.doc_id > 0} - {$all_docs[$mod.doc_id]|default:'Документ не найден'} + {$all_docs[$mod.doc_id]|default:'{#MODULES_ERR_404_DOC#}'} (ID: {$mod.doc_id}) {else} - Без привязки + {#MODULES_USE_M_DOC_NO#} {/if} {if $mod.module_admin == '1'} - + {else} - + {/if} {if $mod.doc_id > 0 && $mod.rubric_id} - {else} - + {/if} @@ -95,16 +104,16 @@ data-dialog="aliases-{$mod.id}" data-height="650" data-modal="true" - data-title="Редактировать алиас: {$mod.module_link_name|default:$mod.title}" + data-title="{#MODULES_REDIR_EDIT_M#}" class="openDialog icon_sprite ico_edit topleftDir" - title="Редактировать"> + title="{#MODULES_ICO_EDIT_M#}">
    -
  • Список ЧПУ алиасов пуст.
  • +
  • {#MODULES_LIST_URL_A#}
- +
- - + + - + - + - - + + + - + - + - + +
Системное имя модуля:{#MODULES_SYS_NAME#}
Название ссылки:{#MODULES_LINK_NAME#}:
Системный Action:{#MODULES_SYS_ACTIONS#}
Оригинальный URL: +
{#MODULES_ORIGINAL_URL#}
+
+
+ +
+ + +
ЧПУ Алиас:{#MODULES_MAIN_ALIAS#}
Привязка к документу:{#MODULES_USE_ALIAS_DOC#} - +
+ + + +
Доступ в админке:{#MODULES_ADMIN_ACCESS#}
- - + +
-
- +   - Закрыть окно + {#MODULES_BTN_CLOSE_WIN_HIS#}
@@ -74,16 +94,118 @@ $(function(){ var a_id = '{/literal}{$alias_id}{literal}'; + // Инициализация плагинов $("#AliasForm").jqTransform(); - setTimeout(function() { - $('#AliasForm select').styler({ - selectSmartPositioning: true, - selectVisibleOptions: 5, - selectSearch: false + $('#AliasForm select').styler({ + selectSmartPositioning: true, + selectVisibleOptions: 5, + selectSearch: false + }); + }, 100); + + // --- Рубрика -> Документ --- + $('#rubric_selector').on('change', function() { + var rubricId = $(this).val(); + var $docSelect = $('#document_selector'); + + $docSelect.html(''); + if ($.fn.styler) $docSelect.trigger('refresh'); + + if (parseInt(rubricId) === 0) { + $docSelect.html(''); + if ($.fn.styler) $docSelect.trigger('refresh'); + return; + } + + $.getJSON('index.php?do=modules&action=aliases&id=' + a_id + '&get_docs_by_rubric=1&rubric_id=' + rubricId, function(data) { + var options = ''; + $.each(data, function(i, item) { + options += ''; + }); + $docSelect.html(options); + if ($.fn.styler) $docSelect.trigger('refresh'); + }); + }); + + // --- предпросмотр ссылки --- + var $linkInput = $('input[name="module_link"]'); + var $adminCheck = $('input[name="module_admin"]'); + var $preview = $('#url_res_link'); + var $previewBox = $('#url_preview_box'); + var $toggleUi = $('#toggle_preview_ui'); + + var storageKey = 'cms_alias_preview_visible'; + var isVisible = localStorage.getItem(storageKey) === 'true'; + + if (isVisible) { + $previewBox.show(); + $toggleUi.css('opacity', '1'); + } else { + $toggleUi.css('opacity', '0.5'); + } + + $toggleUi.on('click', function(e) { + e.preventDefault(); + $previewBox.stop().slideToggle(200, function() { + var nowVisible = $previewBox.is(':visible'); + localStorage.setItem(storageKey, nowVisible); + $toggleUi.css('opacity', nowVisible ? '1' : '0.5'); + }); + }); + + function cleanUrl(val) { + if (!val) return ''; + var clean = val.trim().replace(/\s/g, ''); + clean = clean.replace(/^https?:\/\/[^\/]+/i, ''); + clean = clean.replace(/([\?&])cp=[^&]*/gi, ''); + clean = clean.replace(/^\/+/, '').replace(/[\?&]$/, ''); + return clean; + } + + function updateUrlPreview() { + var rawValue = $linkInput.val(); + var link = cleanUrl(rawValue); + var isAdmin = $adminCheck.is(':checked'); + + if (link === '') { + $preview.html('{/literal}{#MODULES_JS_ADD_LINK#}{literal}'); + return; + } + + var prefix = ''; + var sessionPart = ''; + + if (isAdmin) { + if (!link.toLowerCase().startsWith('admin/')) { + prefix = 'admin/'; + } + var connector = link.indexOf('?') !== -1 ? '&' : '?'; + sessionPart = '' + connector + 'cp=SESSION_ID'; + } else { + if (link.toLowerCase().startsWith('admin/')) { + link = link.substring(6); + } + } + + $preview.html(prefix + link + sessionPart); + + var cleanedRaw = cleanUrl(rawValue); + if (rawValue !== cleanedRaw && rawValue.indexOf('://') !== -1) { + $linkInput.val(cleanedRaw); + } + } + + $linkInput.on('keyup input paste', function() { + setTimeout(updateUrlPreview, 10); }); -}, 100); + $adminCheck.on('change', function() { + setTimeout(updateUrlPreview, 50); + }); + + updateUrlPreview(); + function closeAndReload() { $('#ajax-dialog-aliases-' + a_id).dialog('destroy').remove(); if (window.parent) window.parent.location.reload(); @@ -100,18 +222,29 @@ $(function(){ if (window.parent) window.parent.location.reload(); }); - $(document).off('click', '.SaveAlias').on('click', '.SaveAlias', function(e){ +$(document).off('click', '.SaveAlias').on('click', '.SaveAlias', function(e){ e.preventDefault(); var $btn = $(this); - - $("#AliasForm").ajaxSubmit({ + var $form = $("#AliasForm"); + + var moduleName = $form.find('input[name="module_name"]').val().trim(); + var moduleLink = $form.find('input[name="module_link"]').val().trim(); + var moduleUrl = $form.find('input[name="module_url"]').val().trim(); + + if (moduleName === '' || moduleLink === '' || moduleUrl === '') { + var errorMsg = "{/literal}{#MODULES_MES_EMPTY_FIELDS#}{literal}"; + $.jGrowl(errorMsg, { theme: 'error' }); + return false; + } + + $form.ajaxSubmit({ dataType: 'json', beforeSubmit: function() { - $btn.attr("disabled", true).val("Сохранение..."); + $btn.attr("disabled", true).val("{/literal}{#MODULES_TXT_SAVE#}{literal}"); }, success: function(r){ if (r && r.status == 'success') { - $.jGrowl(r.message || "Изменения успешно сохранены", { + $.jGrowl(r.message || "{/literal}{#MODULES_JS_OK_ALERT#}{literal}", { theme: "accept", life: 3000 }); @@ -121,20 +254,20 @@ $(function(){ if (window.parent) window.parent.location.reload(); }, 900); } else { - $btn.attr("disabled", false).val("Сохранить изменения"); + $btn.attr("disabled", false).val("{/literal}{#MODULES_BUTTON_SAVE#}{literal}"); } } else { - var msg = (r && r.message) ? r.message : "Ошибка при сохранении"; + var msg = (r && r.message) ? r.message : "{/literal}{#MODULES_ERR_AL_SAVE#}{literal}"; $.jGrowl(msg, { theme: "error", life: 5000 }); - $btn.attr("disabled", false).val("Сохранить изменения"); + $btn.attr("disabled", false).val("{/literal}{#MODULES_BUTTON_SAVE#}{literal}"); } }, error: function() { $.jGrowl("Критическая ошибка сервера", { theme: "error" }); - $btn.attr("disabled", false).val("Сохранить изменения"); + $btn.attr("disabled", false).val("{/literal}{#MODULES_BUTTON_SAVE#}{literal}"); } }); }); diff --git a/class/class.core.php b/class/class.core.php index 364e784..3ec5cc2 100644 --- a/class/class.core.php +++ b/class/class.core.php @@ -1967,7 +1967,8 @@ document_id, module_name, module_action, - module_link + module_link, + module_admin FROM " . PREFIX . "_modules_aliases WHERE @@ -1980,6 +1981,35 @@ //-- Если модуль есть, переназначаем URL и переменные if ($module) { + // --- ПРОВЕРКА ДЛЯ АЛИАСА МОДУЛЯ ИСПОЛЬЗУЮЩЕГО АДМИНКУ --- + $is_admin_group = (isset($_SESSION['user_group']) && $_SESSION['user_group'] == 1); + $has_admin_rights = (isset($_SESSION['alles']) && $_SESSION['alles'] == 1) || (isset($_SESSION['adminpanel']) && $_SESSION['adminpanel'] == 1); + + if (isset($module['module_admin']) && $module['module_admin'] == 1 && ($is_admin_group || $has_admin_rights)) + { + $target_link = ltrim($module['module_link'], '/'); + + // Проверяем, есть ли уже префикс admin/ + $has_admin_prefix = preg_match('/^admin\//i', $target_link); + + // Если галочка стоит, а префикса нет — добавляем его + if (!$has_admin_prefix) { + $target_link = 'admin/' . $target_link; + } + + // Формируем токен и финальную ссылку + // Пытаемся взять токен из сессии, если его нет — генерируем через ID сессии + $session_token = isset($_SESSION['cp']) ? $_SESSION['cp'] : session_id(); + $connector = (strpos($target_link, '?') === false) ? '?' : '&'; + + $admin_jump = ABS_PATH . $target_link . $connector . 'cp=' . $session_token; + + if (ob_get_length()) ob_clean(); + header('Location: ' . $admin_jump); + exit; + } + // --- END ПРОВЕРКА ДЛЯ АЛИАСА МОДУЛЯ В АДМИНКУ --- + //-- Передаем глобальные перемененные $_GET['module'] = $_REQUEST['module'] = $module['module_name']; $_GET['action'] = $_REQUEST['action'] = $module['module_action']; diff --git a/class/class.modules.php b/class/class.modules.php index bb3a0b4..a65cbfd 100644 --- a/class/class.modules.php +++ b/class/class.modules.php @@ -683,6 +683,14 @@ public function moduleAliasSave($id, $data) global $AVE_DB; $id = (int)$id; + // проверка на пустоту обязательных полей + if (empty(trim($data['module_name'] ?? '')) || + empty(trim($data['module_link'] ?? '')) || + empty(trim($data['module_url'] ?? ''))) + { + return 'error_empty_fields'; + } + $module_name = addslashes($data['module_name'] ?? ''); $module_link_name = addslashes($data['module_link_name'] ?? ''); $module_action = addslashes($data['module_action'] ?? ''); @@ -691,6 +699,40 @@ public function moduleAliasSave($id, $data) $document_id = (int)($data['document_id'] ?? 0); $module_admin = (int)($data['module_admin'] ?? 0); + // --- ОЧИСТКА module_link --- +$module_link = trim($data['module_link'] ?? ''); +if (!empty($module_link)) +{ + // Убираем протокол + $module_link = preg_replace('/^https?:\/\//i', '', $module_link); + + // Если в строке есть домен (точка + слеш), отрезаем только доменную часть + // Пример: домен.ru/index.php?a=1 -> index.php?a=1 + if (preg_match('/^[a-z0-9-]+\.[a-z]{2,6}\//i', $module_link)) + { + $module_link = substr($module_link, strpos($module_link, '/') + 1); + } + + // Если ввели ТОЛЬКО домен без слеша (напр. домен.ru) + // проверяем, нет ли в строке точки и отсутствуют ли при этом слеши + elseif (preg_match('/^[a-z0-9-]+\.[a-z]{2,6}$/i', $module_link)) + { + $module_link = 'index.php'; + } + + // убираем лишние слеши только с краев + $module_link = trim($module_link, '/ '); + + // Если совсем пусто — ставим заглушку + if (empty($module_link)) $module_link = 'index.php'; +} +else +{ + $module_link = 'index.php'; +} +$module_link = addslashes($module_link); +// --- END ОЧИСТКА --- + $exact_match = $AVE_DB->Query("SELECT id FROM " . PREFIX . "_modules_aliases WHERE id = '{$id}' AND module_name = '{$module_name}' @@ -849,7 +891,7 @@ public function deleteAliasHistory($h_id) } /** - * Метод для отображения списка всех алиасов с поддержкой навигации по документам + * Метод для отображения списка всех алиасов */ public function getAliasesAll() { @@ -905,6 +947,20 @@ public function getAliasEdit($alias_id) global $AVE_DB, $AVE_Template; $alias_id = (int)$alias_id; + if (isset($_GET['get_docs_by_rubric'])) { + $rubric_id = (int)$_GET['rubric_id']; + $docs = []; + $sql = "SELECT Id, document_title FROM " . PREFIX . "_documents + WHERE rubric_id = '{$rubric_id}' + ORDER BY document_title ASC"; + $q = $AVE_DB->Query($sql); + while ($d = $q->FetchAssocArray()) { + $docs[] = $d; + } + echo json_encode($docs); + exit; + } + $alias_data = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modules_aliases WHERE id = '{$alias_id}'")->FetchAssocArray(); if (!$alias_data) { $alias_data = [ @@ -913,17 +969,33 @@ public function getAliasEdit($alias_id) ]; } - $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']; + $current_rubric_id = 0; + if ($alias_data['document_id'] > 0) { + $doc_info = $AVE_DB->Query("SELECT rubric_id FROM " . PREFIX . "_documents WHERE Id = '{$alias_data['document_id']}' LIMIT 1")->FetchAssocArray(); + $current_rubric_id = $doc_info['rubric_id'] ?? 0; + } + + $all_rubrics = []; + $rub_q = $AVE_DB->Query("SELECT Id, rubric_title FROM " . PREFIX . "_rubrics ORDER BY rubric_title ASC"); + while ($r = $rub_q->FetchAssocArray()) { + $all_rubrics[$r['Id']] = $r['rubric_title']; + } + + $all_docs = []; + if ($current_rubric_id > 0) { + $doc_q = $AVE_DB->Query("SELECT Id, document_title FROM " . PREFIX . "_documents WHERE rubric_id = '{$current_rubric_id}' 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 + 'alias_id' => $alias_id, + 'alias_data' => $alias_data, + 'all_rubrics' => $all_rubrics, + 'current_rubric_id' => $current_rubric_id, + 'all_docs' => $all_docs, + 'sess' => SESSION ]); if (isset($_REQUEST['ajax']) || isset($_REQUEST['onlycontent'])) { diff --git a/install/data_base.sql b/install/data_base.sql index bbca8bd..0cb53f4 100644 --- a/install/data_base.sql +++ b/install/data_base.sql @@ -370,7 +370,4 @@ 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, 'Общий шаблон', '', 'Первая', 'Последняя', '
  • %s
  • ', '…', '', '', '
  • %s
  • ', '
  • %s
  • ', '[name]', '[name]');#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# \ No newline at end of file + (1, 'Общий шаблон', '', 'Первая', 'Последняя', '
  • %s
  • ', '…', '', '', '
  • %s
  • ', '
  • %s
  • ', '[name]', '[name]');#inst# \ No newline at end of file