Показать сообщение отдельно
  #1 (permalink)  
Старый 11.02.2010, 20:12
Новичок на форуме
Отправить личное сообщение для Romario Посмотреть профиль Найти все сообщения от Romario
 
Регистрация: 11.02.2010
Сообщений: 3

ТОП лист на javascript
Знающие, помогите мне с таким вопросом: Мне надо реализовать на сайте ucoz ТОП-лист людей, то есть надо так:

1) на отдельной странице сайта показывается список людей: (номер) (ава) (ник) (рейтинг или кол-во голосов) (кнопка "проголосовать"), планируется сделать топ100, но через каждых 20 - переключатель. Человек, заходя на страницу топа, может видеть этот рейтинг, может кликнуть по каждому из тех кто в списке (будем называть их конкурсантами), таким образом перейти на страницу конкурсанта, ознакомится с его досье, вернутся и отдать свой голос за одного из конкурсантов.
2) на главной странице сайта, например в 1 контейнере, в блоке показывается первых 10 конкурсантов (топ10)

Я долго и нудно искал информацию о том как реализовать топ-лист и понял что на сайте ucoz это сделать не просто (мне так кажется), так как нельзя использовать php скрипты... Но я не остановился, перечитал много форумов, и сделал так:
- За критерий, который можно было бы изменять, и который бы отличал конкурсантов между собой, и за которым можно было бы их сортировать в топ-таблице, я взял репутацию пользователей.
- Конкурсанты - это зарегистрированные пользователи, и они находятся в группе 1.
- Я создал информер с параметрами: [ Пользователи · Материалы · Репутация · Материалы: 100 · Колонки: 1 · Определенные группы ]
- Этим информером я вывожу нужных мне пользователей на страницу сайта, и в принципе почти то, что мне надо: конкурсанты выводятся в правильной последовательности (по репутации).
Но мне надо еще сделать так чтоб зарегистрированные пользователи сайта (и конкурсанты в том числе) могли голосовать за конкурсантов.
- В качестве голосования я сделал - поднятие репутации пользователей группы 1.
- Поднятие репутации осуществляется таким скриптом:

<script type="text/javascript">
function repchange(val,id){
repval=val;
ajaxtime=setInterval('checkajax'+id+'()',500);}
</script>
<script type="text/javascript">
function checkajax$ID$(){
forms=document.getElementsByTagName('form');
for(f=0;f<forms.length;f++){
if(forms[f].id=='frm981'){
if(repval=='plus'){document.getElementById('a2').c hecked='true';
forms[f].reason.value='Благодарю за $ENTRY_TITLE$'
document.getElementById('submfrm981').click();
document.getElementById('sbt981').onclick=null;
clearInterval(ajaxtime);}}}}
</script>

И в шаблоне информера:
$NUMBER$<IMG src="$AVATAR_URL$" width="50" height="50" border="0"><A href="$PROFILE_URL$">$USERNAME$</A>$REPUTATION$
<a title="Сказать спасибо $USER$. Репутация $USER$'a автоматически повысится. Многократное нажатие 'Спасибо' запрещено!" href="javascript://" onClick="openLayerB('Rd',0,'/index/23-$USER_ID$','Change Reputation',380,200,1); return false;"><img src="http://52-nn.ru/pictures/spas.gif" border="0" align="absmiddle" onClick="repchange('plus','$ID$');" /></a>

В принципе, вся эта система работает на "3-" и хотелось бы посоветоваться с умными людьми чтоб было на "5"
Пишу что конкретно меня не устраивает:

1) Репутация поднимается не на один пункт, а на несколько, в зависимости от репутации того кто голосует (это исправить нельзя, я знаю, стандартная фишка), а мне надо чтоб один натиск на кнопку - один голос - +1 пункт до репутации, рейтинга, или какой то иной цифры по которой можно было бы организовать фильтр, сортировку... и вывод на страницу.
2) Пробовал скрипт не с аякс окошком, а с алерт окошком, вроде работает, при голосовании админа (может поднимать репу не зависимо от тайм-аута) - все нормально, нажал-выскочило окошко-закрыл-репа поднялась и так хоть до упора; при голосовании пользователей у которых стоит тайм-аут на поднятие репы - плохо, 1-ый раз нажал-выскочило окошко-закрыл-репа поднялась, 2-ой раз нажал-на экране все идентично первому разу-репа не поднимается, а пользователи-то не знают, что все последующие нажатия бесполезны (так как информер обновляет свою инфу каждых 15 мин., а репутация и ее история скрыта для всех кроме админов, так надо)
3) Скрипт с аякс окошком мне нравиться больше, работает, при голосовании админа - все нормально, нажал-выскочило окошко-кнопка автоматически нажалась на поднятие репи и задисеблилась-закрыл-репа поднялась; при голосовании пользователей у которых стоит тайм-аут на поднятие репы - 1-ый раз нажал-выскочило аякс окошко-закрыл-репа поднялась, 2-ой раз нажал-выскочило аякс окошко с отрицательным результатом и в углу экрана сообщение: вы сможете изменить репутацию через 24 часа (или больше, в зависимости от тайм-аута)-репа не поднялась. Тут лучше, пользователи хоть знают что их голос не принят, а могут проголосовать через ....... И еще один такой глюк: если конкурсант нажмет на свою кнопку, то есть проголосует за себя-появится аякс окошко с сообщением Доступ запрещен, (так как в системе юкоз нельзя поднимать самому себе репутацию)-закрыл окошко, нажал на кнопку другого конкурсанта-появилось окошко а нажатие кнопки зацикливается и в углу экрана появляется отрицательное сообщение одно за другим, и так пока не закроешь окошко. И такой глюк продолжается до того пока не перезагрузишь страницу.
4) Надо как то сделать чтоб аякс окошко после нажатия кнопки появилось-автоматически нажалась кнопка поднятия репутации-и само исчезло.
NFLc, писал на форуме юкоз http://forum.ucoz.ru/forum/28-5820-489116-16-1251531288 что можно сделать так чтоб окошко автоматически закривалось:
---------------------------------------------------------------------------
YuriT, а если добавить после
document.getElementById('submfrm981').click();
document.getElementById('sbt981').onclick=null;
строку
_uWnd.close('имя окна с репутацией'); ?
Только осталось узнать имя окна

(да, кстати, лучше использовать document.all. чтоб везде работало (и я знаю, что это не по стандарту))
U.Dev
----------------------------------------------------------------------------
Как узнать имя аякс окна с изменением репутации?

Вот, вроде все изложил, подскажите пожалуйста решение выше написанных проблем, или может возможно как-то сделать топ-лист на юкозе каким-то иным способом, например через блог используя jquery, или, например, используя php-скрипти расположены на другом сайте? каком?
Ответить с цитированием