Этот небольшой скрипт делает так, чтобы незарегистрированные посетители (гости) не могли видеть и кликать по обычным ссылкам на сайте.
Простыми словами:Если пользователь не авторизован (USER_ID = 0),
то скрипт находит все ссылки с классом link и вместо их текста пишет:[Ссылки могут видеть только зарегистрированные пользователи] А при клике по такой «ссылке» человека перекидывает на страницу /index/3 (это страница регистрации пользователя)


Код
<?if($USER_ID$='0')?>
<script>
e=document.getElementsByTagName('A');
for(k=0; k<e.length;k++) {
if(e[k].className=="link"){
e[k].innerHTML = '[<b>Ссылки могут видеть только зарегистрированные пользователи</b>]';
e[k].href = '/index/3';
}
}
</script><?endif?>


Вот мой вариант
Вот более современный, быстрый и лаконичный вариант на чистом JavaScript (ES6+):
Современный вариант (Vanilla JS)
Этот код сразу выбирает только нужные элементы, не тратя ресурсы на остальные ссылки.

Код
<?if($USER_ID$='0')?>  
  <script>  
document.addEventListener("DOMContentLoaded", () => {  
// Выбираем только ссылки с классом 'link'  
const guestLinks = document.querySelectorAll('a.link');  

guestLinks.forEach(link => {  
link.href = '/index/3';  
link.innerHTML = '[<b>Ссылки могут видеть только зарегистрированные пользователи</b>]';  

// Дополнительно: можно убрать title, чтобы не всплывала старая ссылка  
link.removeAttribute('title');  
});  
});  
  </script>  
  <?endif?>


Что изменилось и почему это лучше:
* querySelectorAll('a.link'): Вместо того чтобы перебирать тысячи ссылок через getElementsByTagName и проверять каждую условием if, мы сразу просим браузер найти только те, у которых есть нужный класс. Это гораздо быстрее.

* DOMContentLoaded: Мы оборачиваем код в обработчик события. Это гарантирует, что скрипт сработает только тогда, когда весь текст страницы загрузился, и не «пропустит» ни одну ссылку.

* forEach: Более читаемый и современный способ перебора массива по сравнению с классическим циклом for.

Можно ли сделать еще лучше?
Если вы хотите, чтобы ссылки скрывались мгновенно (еще до того, как скрипт сработает), можно добавить небольшой CSS-код:

Код
<?if($USER_ID$='0')?>  
  <style>  
/* Скрываем содержимое ссылок, пока JS их не обработает, чтобы не было «мигания» контента */  
a.link { font-size: 0; }  
a.link::before {
content: '[Загрузка...]';
font-size: 14px;
color: gray;  
}  
  </style>  
  <?endif?>  
  

Комментарии

Минимальная длина комментария - 50 знаков. комментарии модерируются
-SAM- 1
-SAM-
23.12.2025, 15:46
Согласны? Да 1 Нет
Исправить нужно на:
Код
<?if($USER_ID$='0')?>
<script>
e=document.getElementsByTagName('A');
for(k=0; k<e.length;k++) {
if(e[k].className=="link"){
e[k].innerHTML = '[<b>Ссылки могут видеть только зарегистрированные пользователи<b>]';
e[k].href = '/index/3';
}
}
</script><?endif?>

P.S.: может, автор и не Apocalypse. Такой скрипт ещё и в 2009 году выкладывали (наверное, он тогда и начал по сети распространятся, а то и раньше даже). Просто, что взяли у него с сайта. И скрин явно оттуда, там так обрабатывали (оригинального не нашёл, то лучше свой сделать, ведь тут качество ужасное - видимо, уменьшенная копия залита вместо полноразмерного изображения).
jaguar37rus 2
28.12.2025, 19:33
Согласны? Да 0 Нет
поправил )
HTMLSTART » Скрипты UCOZ » Форум » Скрипт для uCoz скрывает ссылки от незарегистрированных пользователей