Скрипт для сокрытия определенной темы (настройка по группам пользователей)
Все привыкли, что можно скрывать форум и все его содержимое по группам пользователей. В основном делают специальный форум для амс и работают только в нем. Это не всегда удобно. С помощью данного скрипта можно скрыть любую тему в любом форуме от пользователей, которые состоят не в той группе.
Скрипт убирает тему из списка (будет не видна на странице с перечислением тем, как будто ее не существует), а если вдруг пользователь перешел на нее по прямой ссылке, то содержимое не отобразиться и будет выведено сообщение "Доступ запрещен".
<script type="text/javascript">
// ==UserScript==
// @name скрытие определенных тем по группам пользователей
// @version 1.0
// ==/UserScript==
// === Настройки ===
var hiddenTopics = ['4']; // ID скрытых тем (если тем несколько, то перечисляем '4', '8', '14' и т д
var allowedGroups = ['gid1', 'gid2']; // Классы-группы с доступом
// Определяем группу по классу у #pun
function getUserGroupFromPun() {
var pun = document.getElementById('pun');
if (!pun) return null;
var classes = pun.className.split(/\s+/);
for (var i = 0; i < classes.length; i++) {
if (/^gid\d+$/.test(classes[i])) return classes[i];
}
return null;
}
var userGroup = getUserGroupFromPun();
// === 1. СКРЫТИЕ В СПИСКАХ ТЕМ (viewforum, поиск и т.д.) ===
if (allowedGroups.indexOf(userGroup) === -1) {
document.addEventListener("DOMContentLoaded", function() {
var topicLinks = document.querySelectorAll('a[href*="viewtopic.php?id="]');
topicLinks.forEach(function(link) {
var match = link.href.match(/viewtopic\.php\?id=(\d+)/);
if (match && hiddenTopics.includes(match[1])) {
var tr = link.closest('tr');
if (tr) tr.style.display = 'none';
}
});
});
}
// === 2. СООБЩЕНИЕ О ЗАПРЕТЕ ДОСТУПА ПРИ ПРЯМОМ ПЕРЕХОДЕ ===
var temaID = null;
(function(){
var match = window.location.href.match(/viewtopic\.php\?id=(\d+)/);
if (match) temaID = match[1];
})();
if (
temaID &&
hiddenTopics.includes(temaID) &&
allowedGroups.indexOf(userGroup) === -1
) {
document.addEventListener("DOMContentLoaded", function() {
var main = document.getElementById("pun-main");
var messageHtml = '<div class="access-denied-message">Доступ запрещён</div>';
if (main) {
main.innerHTML = messageHtml;
} else {
document.body.innerHTML = messageHtml;
}
document.title = "Доступ запрещён";
});
}
</script>
За настройку css отвечает класс .access-denied-message (его можно прописать как через <style></style> в html вверх рядом со скриптом, так и через свой стиль
Нужно ли добавить возможность запрещать тему конкретному пользователю
да
нет
No votes yet, be the first!
js
rusff
сокрытие тем