Профиль пользователявопросы
Текущий рейтинг темы: Нет
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 сентября 2003 13:02
1. Как добавить в админскую форму возможность пересчета количества сообщений, оставленных конкретным пользователем? 2. Можно ли сделать возможность, чтоб юзер сам менял имя - точнее имя при регистрации оставалось тем же, а ник выводился другой (псевдоник)... Я видел такой хак на руборде для IB3.11, только с моими знаниями перла только его и корректировать... 2а. ... или хотя б возможность менять ник юзера Админом в центре администрирования...
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 18 сентября 2003 20:43
1. Сложный вопрос... Но все же попробую. Вот код, который надо добавить в setmembers.cgi (кроме того, надо прилепить ссылку вида setmembers.cgi?action=countmsg&member=$membername) <br>sub countmsg {<br>&getmember($membername);<br>$membername =~ s/ /_/g;<br> if ($userregistered ne "yes") { print "<tr><tr>Такого пользователя не существует</tr></td>"; }<br>else {<br> $msgcount = 0;<br> opendir (DIR, "$ikondir");<br> @dirdata = readdir(DIR);<br> closedir (DIR);<br> @forumdata = grep(/^forum\d+/,@dirdata);<br> foreach $forum (@forumdata) {<br> opendir (FORUMDIR, "$ikondir"."$forum/");<br> @dirdata = readdir(FORUMDIR);<br> @topicdata = grep(/.thd$/,@dirdata);<br> closedir (FORUMDIR);<br> foreach $topic (@topicdata) {<br> open (FILE,"<$ikondir"."$forum/$topic");<br> @messages=<FILE>;<br> close (FILE);<br> foreach $msg (@messages) {<br> ($poster,$trash) = split (/\|/,$msg);<br> if ($poster eq $member) {<br> $msgcount++;<br> }<br> }<br> }<br> open(FILE,">$ikondir"."members/$member.cgi");<br>flock(FILE,2);<br> print FILE ("$member|$password|$membertitle|$membercode|$msgcount|$emailaddress|$showemail|$ipaddress|$homepage|$aolname|$icqnumber|$location|$interests|$joineddate|$lastpostdate|$signature|$timedifference|$privateforums|$useravatar|$misc1|$misc2|$misc3");<br>close(FILE);<br>print "<tr><td>Пользователь $member отправил $msgcount сообщений</tr></td>";<br> }<br>}<br> Но это - только приблизительный код, я его набросал, но не тестировал, кроме того, могут потребоваться какие-то мелкие доработки. 2. Хаки от Ib 3.x не подойдут к этому форуму в принципе: Ib 3 работает на базах данных. А сделать такое можно, но сложно (очень много изменений в коде). Если нужно переименовать одного-двух пользователей, то легче переименовать их файлы, а потом воспользоваться какой-нибудь утилитой для замены старого имени на новое во всех файлах форума (либо запустить ее на сервере через SSH, либо скачать форум в локаль, и сделать это там).
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 19 сентября 2003 10:43
XXXX Pro прости меня, ламера... но не мог бы ты подсказать куда конкретно нужно вставлять этот код в файле setmembers.cgi и куда нужно прилеплять ссылку вида setmembers.cgi?action=countmsg&member=$membername? Заранее спасибо ограмное!
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 19 сентября 2003 12:27
Вставлять можно либо между двумя процедурами (sub), либо в конец файла (так проще и надежнее). Ссылку надо вставить в процедуру showmember, после вот этого текста: <br> <tr><br> <td bgcolor=#FFFFFF valign=middle><font face=verdana color=#333333 size=1><b>Последний раз посетил форум:</b></font></td><br> <td bgcolor=#FFFFFF valign=middle><font face=verdana color=#333333 size=1>$lastvisit</font></td></tr><br> Сама ссялка имеет такой вид: <br> <tr><br> <td bgcolor=#FFFFFF valign=middle colspan=2 align=center><font face=verdana color=#333333 size=1><b><a href="$thisprog?action=countmsg&member=$member">Пересчитать сообщения пользователя.</a></b></font><br></td></tr><br> И еще в начале надо <br> my %Mode = ( <br> 'updatecount' => \&docount,<br> 'viewletter' => \&viewletter,<br> 'edit' => \&edit, <br> 'deletemember' => \&deletemember,<br> 'unban' => \&unban,<br> 'clean' => \&clean,<br> 'doclean' => \&doclean,<br> 'select' => \&select,<br> 'doselect' => \&doselect<br> ); <br> заменить на <br> my %Mode = ( <br> 'updatecount' => \&docount,<br> 'viewletter' => \&viewletter,<br> 'edit' => \&edit, <br> 'deletemember' => \&deletemember,<br> 'unban' => \&unban,<br> 'clean' => \&clean,<br> 'doclean' => \&doclean,<br> 'select' => \&select,<br> 'doselect' => \&doselect,<br> 'countmsg' => \&countmsg<br> ); <br> P.S. Обрати внимание: я немного изменил код в первом сообщении.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 19 сентября 2003 16:05
XXXX Pro cделал все, как ты сказал, однако при нажатии ссылки Настройки участников в Админцентре ничего не работает - конкретно пишет сие... Software error: Execution of /usr/local/www/docs/by/solo/planeta/www/cgi-bin/ikonboard/setmembers.cgi aborted due to compilation errors. For help, please send mail to the webmaster, giving this error message and the time and date of the error.
в чем может быть дело-то?? В коде или может мои ручки не под то заточены?
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 19 сентября 2003 20:05
В коде. Где-то есть примитивнейшая ошибка, из-за которой это происходит. Загляни в логи (каталог с названием типа logs, , и посмотри, что там появляется, и выложи сюда, я скажу, что исправить. Кстати, еще одна ошибка есть в строке с grep - форум не вывел косую черту (\) перед d+
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 20 сентября 2003 11:12
XXXX Pro ну ты задал мне задачку...и :( если б я знал где этот каталог... мож, када у тя будет свободная минутка протестируешь на локалке.... да выложишь - думаю, не только я оценю... жаль пиво ты не пьешь
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 20 сентября 2003 16:43
Короче, вот конечная версия процедуры countmsg <br>sub countmsg { <br>&getmember($inmember); <br>$inmember =~ s/ /_/g; <br>if ($userregistered ne "yes") { print "<tr><tr>Такого пользователя не существует</tr></td>"; } <br>else { <br> $msgcount = 0; <br> opendir (DIR, "$ikondir"); <br> @dirdata = readdir(DIR); <br> closedir (DIR); <br> @forumdata = grep(/^forum\d+/,@dirdata); <br> foreach $forum (@forumdata) { <br> opendir (FORUMDIR, "$ikondir"."$forum/"); <br> @dirdata = readdir(FORUMDIR); <br> @topicdata = grep(/\.thd$/,@dirdata); <br> closedir (FORUMDIR); <br> foreach $topic (@topicdata) { <br> open (FILE,"<$ikondir"."$forum/$topic"); <br> @messages=<FILE>; <br> close (FILE); <br> foreach $msg (@messages) { <br> ($poster,$trash) = split (/\|/,$msg); <br> if ($poster eq $inmember) { <br> $msgcount++; <br> } <br> } <br> } <br> } <br> open(FILE,">$ikondir"."members/$inmember.cgi"); <br> flock(FILE,2); <br> print FILE ("$inmember|$password|$membertitle|$membercode|$msgcount|$emailaddress|$showemail|$ipaddress|$homepage|$aolname|$icqnumber|$location|$interests|$joineddate|$lastpostdate|$signature|$timedifference|$privateforums|$useravatar|$misc1|$misc2|$misc3"); <br> close(FILE); <br> $message = formatword($msgcount,"сообщение","сообщения","сообщений");<br> print "<tr><td bgcolor=#FFFFFF valign=middle align=left colspan=2>Пользователь $member отправил $msgcount $message</tr></td>"; <br> } <br>} <br> У меня на локали вроде бы все работало нормально.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 сентября 2003 15:43
XXXX Pro мое огромное спасибо и респект! ВСЕ ПАШЕТ!
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 сентября 2003 16:17
XXXX Pro мдя... все пашет, только есть один глюк - если у пользователя в имени пробел имеется, то сразу при пересчете его сообщений становится НОЛЬ... :-/ в чем проблема, не подскажешь?
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 22 сентября 2003 21:02
Исправь <br> if ($poster eq $inmember) { <br> на <br> if ($poster eq $inmember || $poster eq $membername) { А в начало (после $inmember =~ s/ /_/g; ) добавь <br>$membername = $inmember;<br>$membername =~ s/_/ /g;<br>
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 23 сентября 2003 6:57
XXXX Pro спасибо, работает
| | |
Gram
Модератор раздела
Откуда: здешний Всего сообщений: 566 Рейтинг пользователя: 14 Репутация пользователя: 1Дата регистрации на форуме: 23 июля 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 28 сентября 2003 12:15
А можно сделать процедуру сразу для всех пользователей?
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 28 сентября 2003 12:30
Теоретически можно. Сразу после countmsg добавь вот этот кусок кода [code] opendir(DIR,$ikondir."members"); @members=readdir(DIR); closedir(DIR); @members=grep(/cgi$/,@members); foreach $inmember { [code] и в конец добавь еще одну фигурную скобку ({).
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 9 октября 2003 10:40
[B]XXXX Pro [/B] еще вопрос... можно ли сделать в админцентре возможность редактирования аватаров юзеров?
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 9 октября 2003 18:45
Теоретически - можно. Надо найти в profile.cgi соответствющий кусок кода и с минимальными изменениями перетащить в setmembers.cgi. Но нужно ли это? По-моему, работы много, а смысла мало: зачем админу менять аватары обычным пользователям?
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 10 октября 2003 14:24
[B]XXXX Pro [/B] 1. ок... сделаем 2. нужно - у некоторых такие аваторы стоят - волосы дыбом стоят: либо мат какой-нить либо еще чего.....- так ставишь вопр. знак и все... а мне приходится входить под ником юзера и менять ручками его профиль... так же и с интерсами... (у одного было написано, сорри за мат "*бля, суки и прочая х**ня"... видишь - нужно иногда...
| | |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 10 октября 2003 16:34
Я такие вопросы решаю проще: аватары стираю и запрещаю пользователю их закачку, и предупреждаю, что следующий раз будет бан на неделю, а затем - и пожизненный.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
| | |
JESUS
Новичок
Откуда: Минск Всего сообщений: 249 Рейтинг пользователя: 0 Дата регистрации на форуме: 10 сен. 2003
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 13 октября 2003 7:06
[B]XXXX Pro [/B] а все-таки
| | |
Время выполнения скрипта: 0.0729. Количество выполненных запросов: 18, время выполнения запросов 0.0499
|