276 lines
12 KiB
Smarty
276 lines
12 KiB
Smarty
<div class="title">
|
||
<h5>{#MODULES_REDIRECT#} {$alias_data.module_link_name|default:''}</h5>
|
||
</div>
|
||
<div class="breadCrumbHolder module">
|
||
<div class="breadCrumb module">
|
||
<ul>
|
||
<li>{#MODULES_MODULE_HIS#} <strong class="code">{$alias_data.module_name|default:''}</strong></li>
|
||
<li>{#MODULES_SYSLINK_HIS#} <strong class="code">{$alias_data.module_link|default:''}</strong></li>
|
||
<li>{#MODULES_MAIN_ALIASE_HIS#} <strong class="code">{$alias_data.module_url|default:''}</strong></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="widget first">
|
||
<div class="head">
|
||
<h5 class="iPlus">{#MODULES_REDIRECT_PARAM#}</h5>
|
||
</div>
|
||
<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">{#MODULES_SYS_NAME#}</td>
|
||
<td><input type="text" name="module_name" value="{$alias_data.module_name|default:''}" style="width: 95%;" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td width="150">{#MODULES_LINK_NAME#}:</td>
|
||
<td><input type="text" name="module_link_name" value="{$alias_data.module_link_name|default:''}" style="width: 95%;" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td>{#MODULES_SYS_ACTIONS#}</td>
|
||
<td><input type="text" name="module_action" value="{$alias_data.module_action|default:''}" style="width: 95%;" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div style="display: flex; align-items: center; gap: 8px;">{#MODULES_ORIGINAL_URL#}<a href="javascript:void(0);" id="toggle_preview_ui" class="icon_sprite ico_look topDir" title="{#MODULES_PREWIEW_URL#}" style="cursor: pointer;"></a></div>
|
||
</td>
|
||
<td>
|
||
<div style="display: flex; align-items: center; gap: 8px;">
|
||
<input type="text" name="module_link" value="{$alias_data.module_link|default:''}" style="width: 95%;" />
|
||
</div>
|
||
|
||
<div id="url_preview_box" style="margin-top: 8px; padding: 8px 10px; background: #fdfdfd; border: 1px solid #e0e0e0; font-family: 'Courier New', monospace; font-size: 11px; color: #555; word-break: break-all; border-radius: 3px; display: none; width: 93%;">
|
||
<span id="url_res_path" style="color: #999;">{if $smarty.const.ABS_PATH|substr:0:4 == 'http'}{$smarty.const.ABS_PATH}{else}{$smarty.server.REQUEST_SCHEME}://{$smarty.server.HTTP_HOST}{$smarty.const.ABS_PATH}{/if}</span><span id="url_res_link" style="font-weight: bold; color: #2c3e50;"></span>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td><strong>{#MODULES_MAIN_ALIAS#}</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>{#MODULES_USE_ALIAS_DOC#}</td>
|
||
<td>
|
||
<div style="display: flex; gap: 10px; align-items: center; width: 98%;">
|
||
<select id="rubric_selector" style="width: 45%;">
|
||
<option value="0">{#MODULES_SEL_CATEG#}</option>
|
||
{foreach from=$all_rubrics key=r_id item=r_title}
|
||
<option value="{$r_id}" {if $r_id == $current_rubric_id}selected="selected"{/if}>{$r_title}</option>
|
||
{/foreach}
|
||
</select>
|
||
|
||
<select name="document_id" id="document_selector" style="width: 55%;">
|
||
<option value="0">{#MODULES_USE_ALIAS_DOC_NO#}</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>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>{#MODULES_ADMIN_ACCESS#}</td>
|
||
<td style="vertical-align: middle;">
|
||
<div style="display: flex; align-items: center; gap: 8px; min-height: 24px;">
|
||
<input type="checkbox" name="module_admin" value="1" class="checkbox" {if $alias_id != 0 && ($alias_data.module_admin|default:'0') == '1'}checked="checked"{/if} />
|
||
<label style="margin: 0; cursor: pointer; white-space: nowrap; line-height: 1;">{#MODULES_ADMIN_ACCESS_SEL#}</label>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2" style="padding: 15px 10px;">
|
||
<input type="submit" class="basicBtn SaveAlias" value="{#MODULES_BUTTON_SAVE#}" />
|
||
|
||
<a href="javascript:void(0);" class="button redBtn CloseModal">{#MODULES_BTN_CLOSE_WIN_HIS#}</a>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</form>
|
||
</div>
|
||
|
||
{literal}
|
||
<script type="text/javascript">
|
||
$(function(){
|
||
var a_id = '{/literal}{$alias_id}{literal}';
|
||
|
||
// Инициализация плагинов
|
||
$("#AliasForm").jqTransform();
|
||
setTimeout(function() {
|
||
$('#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('<option value="0">{/literal}{#MODULES_TXT_LOAD#}{literal}</option>');
|
||
if ($.fn.styler) $docSelect.trigger('refresh');
|
||
|
||
if (parseInt(rubricId) === 0) {
|
||
$docSelect.html('<option value="0">{/literal}{#MODULES_USE_ALIAS_DOC_NO#}{literal}</option>');
|
||
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 = '<option value="0">{/literal}{#MODULES_USE_ALIAS_DOC_NO#}{literal}</option>';
|
||
$.each(data, function(i, item) {
|
||
options += '<option value="' + item.Id + '">' + item.document_title + '</option>';
|
||
});
|
||
$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('<span style="color:#ccc;">{/literal}{#MODULES_JS_ADD_LINK#}{literal}</span>');
|
||
return;
|
||
}
|
||
|
||
var prefix = '';
|
||
var sessionPart = '';
|
||
|
||
if (isAdmin) {
|
||
if (!link.toLowerCase().startsWith('admin/')) {
|
||
prefix = '<span style="color: #27ae60;">admin/</span>';
|
||
}
|
||
var connector = link.indexOf('?') !== -1 ? '&' : '?';
|
||
sessionPart = '<span style="color: #27ae60;">' + connector + 'cp=SESSION_ID</span>';
|
||
} 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);
|
||
});
|
||
|
||
$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();
|
||
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);
|
||
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("{/literal}{#MODULES_TXT_SAVE#}{literal}");
|
||
},
|
||
success: function(r){
|
||
if (r && r.status == 'success') {
|
||
$.jGrowl(r.message || "{/literal}{#MODULES_JS_OK_ALERT#}{literal}", {
|
||
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("{/literal}{#MODULES_BUTTON_SAVE#}{literal}");
|
||
}
|
||
} else {
|
||
var msg = (r && r.message) ? r.message : "{/literal}{#MODULES_ERR_AL_SAVE#}{literal}";
|
||
$.jGrowl(msg, {
|
||
theme: "error",
|
||
life: 5000
|
||
});
|
||
$btn.attr("disabled", false).val("{/literal}{#MODULES_BUTTON_SAVE#}{literal}");
|
||
}
|
||
},
|
||
error: function() {
|
||
$.jGrowl("Критическая ошибка сервера", { theme: "error" });
|
||
$btn.attr("disabled", false).val("{/literal}{#MODULES_BUTTON_SAVE#}{literal}");
|
||
}
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
{/literal} |