Этот скрипт добавляет функциональность поиска по материалам (если введенный текст больше 3 символов) и динамически загружает результаты, представляя их в виде кликабельных ссылок в новом окне. При этом используются функции для работы с окнами и запросами в формате jQuery.
В страницу добавления/редактирования материала после $BODY$ вставляем код ниже
Код
<script type="text/javascript">
(function() {
const titleInput = document.querySelector('#addEntForm input[name="title"]');
if (!titleInput) return;
// Определяем параметр 'a' заранее
const actionMap = {
'load': 2,
'dir': 2,
'publ': 2,
'news': 14
};
const action = actionMap['$MODULE_ID$'] || 0;
titleInput.addEventListener('input', function() {
const query = this.value.trim();
// Закрываем окно, если запрос короткий
if (query.length <= 3) {
_uWnd.close('sw');
return;
}
$.post('/$MODULE_ID$', { query: query, a: action })
.done(function(result) {
const $result = $(result);
const links = $result.find('.entryLink').map(function() {
const $link = $(this);
const href = $link.attr('href');
const text = $link.html();
if (!href || !text) return null;
// Обрезаем текст до 40 символов
const displayText = text.length > 40
? text.substring(0, 40) + '...'
: text;
return `<a href="${href}" target="_blank" title="${text}">${displayText}</a><br>`;
}).get().filter(Boolean); // Убираем null-значения
if (links.length > 0) {
showSimilarEntries(query, links);
} else {
_uWnd.close('sw');
}
})
.fail(function() {
_uWnd.close('sw'); // Закрываем окно при ошибке
});
});
function showSimilarEntries(searchTerm, linkList) {
// Упрощённые параметры окна
const windowOptions = {
min: 0,
max: 0,
x: 'center', // Центрируем окно
y: 'center',
alert: 1,
autosize: 0,
fixed: 1,
shadow: 1,
resize: 0,
nomove: 1,
hidden: 0,
notaskbar: 1,
fadetype: 2,
fadespeed: 500,
fadeclosetype: 1,
fadeclosespeed: 500
};
const content = `<fieldset><legend>${searchTerm}</legend>${linkList.join('')}</fieldset>`;
new _uWnd('sw', 'Найдены похожие материалы', 300, 200, windowOptions, content);
}
})();
</script>
(function() {
const titleInput = document.querySelector('#addEntForm input[name="title"]');
if (!titleInput) return;
// Определяем параметр 'a' заранее
const actionMap = {
'load': 2,
'dir': 2,
'publ': 2,
'news': 14
};
const action = actionMap['$MODULE_ID$'] || 0;
titleInput.addEventListener('input', function() {
const query = this.value.trim();
// Закрываем окно, если запрос короткий
if (query.length <= 3) {
_uWnd.close('sw');
return;
}
$.post('/$MODULE_ID$', { query: query, a: action })
.done(function(result) {
const $result = $(result);
const links = $result.find('.entryLink').map(function() {
const $link = $(this);
const href = $link.attr('href');
const text = $link.html();
if (!href || !text) return null;
// Обрезаем текст до 40 символов
const displayText = text.length > 40
? text.substring(0, 40) + '...'
: text;
return `<a href="${href}" target="_blank" title="${text}">${displayText}</a><br>`;
}).get().filter(Boolean); // Убираем null-значения
if (links.length > 0) {
showSimilarEntries(query, links);
} else {
_uWnd.close('sw');
}
})
.fail(function() {
_uWnd.close('sw'); // Закрываем окно при ошибке
});
});
function showSimilarEntries(searchTerm, linkList) {
// Упрощённые параметры окна
const windowOptions = {
min: 0,
max: 0,
x: 'center', // Центрируем окно
y: 'center',
alert: 1,
autosize: 0,
fixed: 1,
shadow: 1,
resize: 0,
nomove: 1,
hidden: 0,
notaskbar: 1,
fadetype: 2,
fadespeed: 500,
fadeclosetype: 1,
fadeclosespeed: 500
};
const content = `<fieldset><legend>${searchTerm}</legend>${linkList.join('')}</fieldset>`;
new _uWnd('sw', 'Найдены похожие материалы', 300, 200, windowOptions, content);
}
})();
</script>
так же в виде материалов вашему $TITLE$ присвоить класс .entryLink
пример
Код
<a href="$ENTRY_URL$" class="entryLink">$TITLE$</a>
вот и все!

Комментарии (0)
Присоединиться к обсуждению
Поделитесь мнением об этом материале — комментарий появится в списке слева сразу после отправки.