У меня давно была идея сделать разграничение для доступа пользователей к некоторым темам, используя дополнительное поле в профиле пользователя. (Возможность создавать небольшие закрытые тусовки, кружки, гильдии на форуме )
Это удобнее пароля тем что не нужно запоминать еще и пароль к теме, но взамен жертвуется одно из дополнительных полей профиля (в частности поле номер 5)
Итак:
Нам потребуется поставить два скрипта...
В HTML-верх ставится следующий скрипт:
<script type="text/javascript"> var tpc_locks = new Array('1','2','3'); // Список закрытых тем var forum="http://адрес форума/" var tpc_tec=''; if (tpc_locks.length!=0){ if (location.href.indexOf(forum+"viewtopic.php?id=")==0){ i=parseInt(tpc_tec=location.href.substring(forum.length+17)); for (j=0; j<tpc_locks.length; j++) { if (i+''==tpc_locks[j]) { if (GroupID==3) {tpc_notdisp() ; alert("Гостям запрещен просмотр этой темы"); location.href=forum } else if (GroupID!=1 && GroupID!=2 && document.referrer.indexOf(forum+"viewtopic.php?id="+i)==-1 && document.referrer.indexOf(forum+"profile.php?section=fields&id="+UserID+"???jst"+i)==-1){ tpc_notdisp(); location.href=forum+"profile.php?section=fields&id="+UserID+"???jst"+tpc_tec }; break}}} else if (location.href.indexOf(forum+"profile.php?section=fields&id="+UserID+"???jst")==0){ tpc_tec=location.href.substring(location.href.indexOf("???jst")+6); tpc_notdisp() } else if (location.href.indexOf(forum+"post.php?tid=")==0) { i=parseInt(location.href.substring(forum.length+13)); for (j=0; j<tpc_locks.length; j++) {if (i+''==tpc_locks[j]) { if (document.referrer.indexOf(forum+"viewtopic.php?id="+i)==-1 && document.referrer.indexOf(forum+"post.php?")==-1){ tpc_notdisp(); tpc_notlook()}; break }}} } function tpc_notdisp() {document.write('<style type="text/css"> HTML, BODY { display: none } </style>') } function tpc_notlook() {alert ("У вас нет допуска к этой теме"); location.href=forum} </script>
Во второй строчке нужно выставить свои номера закрытых тем, а в третьей свой адрес форума.
Номер темы посмотреть можно по адресу темы
например: "http://Форум.0pk.ru/viewtopic.php?id=534"
здесь номер темы 534 записать его надо будет '534'
В HTML-низ ставим следующий скрипт:
<script type="text/javascript"> var forum="http://адрес форума/" if (tpc_tec!='' && location.href==forum+"profile.php?section=fields&id="+UserID+"???jst"+tpc_tec) { if (document.getElementById('fld5').value.indexOf(','+parseInt(tpc_tec)+',')!=-1){ location.href=forum+"viewtopic.php?id="+tpc_tec } else tpc_notlook() } </script>
Во второй строчке нужно вставить адрес вашего форума (на всякий случай для защиты от конфликтов с другими скриптами )
Теперь в настройках форума Администрирование/Поля нужно выставить в поле номер 5 следующее:
Название - любое,
Длина - побольше, из рассчета чтоб все номера тем поместились (я ставил 256)
все остальные пункты - в позицию 'нет' (главное запретить пользователю самому заполнять поле)
Теперь о заполнении поля...
Когда вы хотите дать пользователю доступ в некоторую закрытую тему, вы должны добавить ее номер в профиль пользователя в дополнительное поле 5, причем номерация ведется через запятую, но для облегчения поиска в скрипте начинаться запись в поле должна с запятой и ей же заканчиваться. Пробелы запрещены !
Пример записи в поле 5:
,4,6,123,46,
Если не будет крайних запятых, то номера крайних тем проигнорируются...
Ну вот наверно и все... Да, администратор и модераторы имеют доступ ко всем темам (можно убрать удалив кусок условия в ... else if (GroupID!=1 && GroupID!=2 && ... ) ... в верхнем скрипте. 'GroupID!=1 &&' - администратор, 'GroupID!=2 &&' - модератор )
Защитить от "взлома" через отключение поддержки яваскриптов в браузере, можно попробовать, использовав 'Запрет входа на форум с отключенной поддержкой javascript'
Удачи !!!
Отредактировано Aleksandr (2010-09-19 12:59:08)