Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Модификация системы хранения регов в IB. Нужна помощь...

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Итак, как известно, IB снабжена уродливой системой хранения мемберов - файлы, название которых = имямембера+.cgi
Это не даёт возможности в полной мере использовать различные символы в никах, а аткже создаёт проблемы с русскими никами.
Решил тут поправтьь это. Имеем:
Файл listofmembers.cgi формата:
$memberfilenumber{'AI'} = "0001";
$memberfilenumber{'AlexanderIpp'} = "0002";
$memberfilenumber{'Flex'} = "0003";
$memberfilenumber{'Guest'} = "0004";
$memberfilenumber{'TestAdmin'} = "0005";
$memberfilenumber{'Tester'} = "0006";
$memberfilenumber{'Tester2'} = "0007";
$memberfilenumber{'TestFlooder'} = "0008";
$memberfilenumber{'TestMember'} = "0009";
$memberfilenumber{'TesterNew'} = "0010";
Файл nextmembernumber.cgi содержания:
$nextmembernumber = "0010";
В принципе, нулей можно и поболее сделать, если надо.
И файлы мемберов с низваниями 0001.cgi и т.п.
Подпрограмма getmember в ikon.lib:

Код:
 
##########################
# Get member info.
 
sub getmember {
    my $nametocheck = shift;
    $nametocheck =~ s/ /\_/g;
    require "$ikondir" . "members/listofmembers.cgi";
    $memberfiletoopennumber = $memberfilenumber{$nametocheck};
    $filetoopen = "$ikondir" . "members/$memberfiletoopennumber.cgi";
    $filetoopen = &stripMETA($filetoopen);
    if (-e $filetoopen) {
        open(FILE,"$filetoopen");
        $filedata = <FILE>;
        close(FILE);
        chomp($filedata);
        ($membername, $password, $membertitle, $membercode, $numberofposts, $emailaddress, $showemail, $ipaddress, $homepage, $aolname, $icqnumber ,$location ,$interests, $joineddate, $lastpostdate, $signature, $timedifference, $privateforums, $useravatar, $rating, $misc1, $misc2, $misc3) = split(/\|/,$filedata);
            chomp $privateforums;
            if($privateforums) {
            @private = split(/&/,$privateforums);
            foreach $accessallowed (@private) {
                chomp $accessallowed;
                ($access, $value) = split(/=/,$accessallowed);
                $allowedentry{$access} = $value;
                }
            }
        }
    else { $userregistered = "no"; }
    }
 

В скриптах, в тех местах, где идёт запись в файлы мемберов имеем:

Код:
 
require "$ikondir" . "members/listofmembers.cgi";
$memberfiletoopennumber = $memberfilenumber{$cleanmembername};
$filetomake = "$ikondir" . "members/$memberfiletoopennumber.cgi";
        $filetomake = &stripMETA($filetomake);
        open(FILE, ">$filetomake");
          #####flock(FILE, 2);
        print FILE "$inmembername|$password|$membertitle|$membercode|$numberofposts|$emailaddress|$showemail|$ipaddress|$homepage|$aolname|$icqnumber|$location|$interests|$joineddate|$lastpostdate|$signature|$timedifference|$privateforums|$useravatar|$rating|$misc1|$misc2|$misc3";
        close(FILE);
 

Или аналогично.
В register.cgi имеем:

Код:
 
        require "members/nextmembernumber.cgi";
             
        $memberfiletitle = $inmembername;
        $memberfiletitle =~ y/ /_/;
 
    $filetomake = "$ikondir" . "members/$nextmembernumber.cgi";
        open(FILE, ">$filetomake");
          ##flock(FILE, 2);
        print FILE "$inmembername|$password|$membertitle|$membercode|$numberofposts|$emailaddress|$showemail|$ipaddress|$homepage|$aolname|$icqnumber|$location|$interests|$joineddate|$lastpostdate|$signature|$timedifference|$privateforums|$useravatar|0|$misc1|$misc2|$misc3";
        close(FILE);
 
 
open (FILE, ">>$ikondir" . "members/listofmembers.cgi");
##flock(FILE, 2);
print FILE "\$memberfilenumber\{\'$inmembername\'\} \= \"$nextmembernumber\"\;\n";
close (FILE);
 
$nextmembernumbernew = $nextmembernumber + 1;
         
    open(NOMFILE, "members/nextmembernumber.cgi" );
    #flock(NOMFILE, 2 );
    print NOMFILE "\$nextmembernumber \= \"$nextmembernumbernew\"\;";
    close(NOMFILE);    
 
  $inmembername =~ y/_/ /;
 

Надеюсь, не надо пояснять, где?
Те, кому надо - плиз, почитайте пока другую ветку. ;)
И тут мы имеем гимор - скрипт setmembers.cgi. Вот здесь всёи встало.
Вот его код. Думаю, поместить эту простыню здесь удобнее, если модераторы так не считают - пусть снесут, я выложу в виде файла.

Код:
 
#!/usr/bin/perl
*
*
*
 

Сейчас главный гимор у меня с куском, помеченным жирным шрифтом.
Всё бы ничего, но как бы разобрать строки файла со списком мемберов?
И вытащить ник в переменную...
PS Оригинальный код того фрагмента - в виде комментариев...
Преимущественно в тему приглашаются batva, DimoN, Ausw, pechlny и др., прилично знающие Перл.
Для тех, кто мало чего умеет, я потом опишу всё это как положено.
PPS Потом можно бы наваять конвертор, хотя, наверное, с этим я и сам справлюсь. ;)
 
Добавлено
Кстати, рег мемберов сейчас идёт нормально. ;)

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 19:32 16-01-2002
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Думаю, поместить эту простыню здесь удобнее, если модераторы так не считают - пусть снесут, я выложу в виде файла.  

 
такие портянки всегда отдельным файлом давай

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 20:01 16-01-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
batva

Цитата:
такие портянки всегда отдельным файлом давай
Ok, вчера заливать некогда было.
А по сабжу?
PS Линк сейчас дам...
 
Добавлено
http://www.alexanderipp.wallst.ru/setmembers.zip
 
Добавлено
А кусок имелся в виду этот:

Код:
 
sub memberoptions {
 
    #$dirtoopen = "$ikondir" . "members";
$filetoopen = "$ikondir" . "members/listofmembers.cgi";
    open (FILE, $filetoopen);
foreach (FILE) {
#$_ =~ /\$memberfilenumber\{\''\} \= \"\s*(.*?)\s*\"\;\n";/isg;
$_ =~ /\$memberfilenumber\{\'\s*(.*?)\s*\'\} \= \".*?\"\;\n/isg;
$memnamenametoopen = $1;
#$memnamenametoopen = "TestMember";
open (FILETWO, ">>testmassiveofmembers.cgi");
print FILETWO "$memnamenametoopen";
print FILETWO "Test passed\n";
close (FILETWO);

#$membernumber = $2;
#&getmember("$1");
#$fr = substr($membername, 0, 1);
    #$fr =~ tr/a-z/A-Z/;
    push(@sortedfile,$memnamenametoopen);
}
close (FILE);
#opendir (DIR, "$dirtoopen");  
    #@filedata = readdir(DIR);
    #closedir (DIR);
#@sortedfile = @filedata;
    #@sortedfile = sort(@filedata);
    #@sortedfile = grep(/cgi/,@sortedfile);
 
    foreach (@sortedfile) {
        $fr = substr($_, 0, 1);
        $fr =~ tr/a-z/A-Z/;
        push(@letters,$fr);
        }
 
    @sortedletters = sort(@letters);
 

PS То, что связано с FILETWO - это отладочный код... Так удобнее...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 12:32 17-01-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну что, никто ничего так и не скажет?..

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 09:44 18-01-2002
iggy



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Та как теперь это установить?

Всего записей: 31 | Зарегистр. 07-10-2001 | Отправлено: 12:22 29-01-2002
Alexander_Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iggy
Что - это?
Когда сделаю - тогда ставить будешь.
Никто помочь так и не смог. Потом буду сам выкручиваться...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:26 29-01-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Поскольку тема актуальна до сих пор поднимаю ее опять.
Alexander Ipp
Я не вьезжаю зачем хранить весь список мемберов в каком то файле? Свое предложение:
Для каждого юзера создаем в папке members файл с названием $i++.cgi, где $i номер последнего зарегистрировавшегося. Содержание файла следующее:
login|pass|status...
Если делать так то в login'e можно использовать русские символы. Ну систему вывода везде надо будет поменять на номерную, например  
http://forum.ru-board.com/profile.cgi?action=show&member=547.
Помойму так лучше

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 17:12 16-02-2002
Shurik



Главком. флейма
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
alexei

Цитата:
http://forum.ru-board.com/profile.cgi?action=show&member=547.  
Помойму так лучше  
так зато абсолютно непонятно, кого смотришь!

----------
Metal Bands...

Всего записей: 3171 | Зарегистр. 11-06-2001 | Отправлено: 04:46 17-02-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
Так а как сопостовлять номер мембера и ник?

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 08:54 18-02-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
В файле member'a остается в первом поле ник просто название файла меняется на номер.

Цитата:
так зато абсолютно непонятно, кого смотришь!  

Ну с этим ничего не поделаешь

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 12:06 18-02-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
Всё равно не ясно, как узнать номер мембера, зная только ник.
Хотя... Сделать можно и так, но либо менять ОЧЕНЬ много надо, либо тормоза будут...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:17 18-02-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
Так везде в флатах будут номера, а когда будем выводить то будем вскрывать имя из файла мембера. Теперь понятно?

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 20:40 18-02-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
Это я понял.
Ну а дальше что? В темах и т.п. хранить номер, а потом вытаскивать наружу? Хмммм... Ну, можно так...
Хотя для удобства файл имхо лучше создавать. Хотя...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:48 18-02-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
Так все равно же когда тему выводим файл открываем.

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 11:07 19-02-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
Ну ладно, вывод темы и т.п. - это ясно.
А поиск, работа setmembers.cgi - менять много надо. Очень много. Особенно в сетмемберсе - там вообще всё переписывать придётся...

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:39 19-02-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
Конечно прийдется Это для тех кому очень хочеться русские ники. А вообще если занятся серьезно то за выходные можно сделать. Меня это пока мало волнует, мемберлист свой пишу.

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 21:21 19-02-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
За выходные - вряд ли. Хотя тебе может быть и под силу успеть... Мне нет.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 10:46 20-02-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
Я тут придумал как еще упростить, или может для тебя усложнить, кроме того что файлы будут называться по номеру мембера так еще и ведем список, что-то вроде:

Код:
 
000001 => "Alexei";
000002 => "Guest";
000003 => "RedHat";
...
 

В ubb енто вот так:

Код:
 
admin|!!|00000001
guest|!!|00000002
...
 

 

Цитата:
За выходные - вряд ли. Хотя тебе может быть и под силу успеть... Мне нет.

Просто лучше делать одним днем и не растягивать на неделю. Когда все делаешь за один раз меньше багов и глюков Да кстати насчет выходных - у меня выходной один, в суботу учусь

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 17:23 20-02-2002
Alexander Ipp



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
Угу, такой вариант может и удобнее... По крайней мере, для поиска. Не надо каждый файл мембера открывать. Хотя ещё неизвестно, что быстрее.
Как в юбб - я в курсе.

Цитата:
Просто лучше делать одним днем и не растягивать на неделю. Когда все делаешь за один раз меньше багов и глюков  Да кстати насчет выходных - у меня выходной один, в суботу учусь  

Ну ладно, сворачиваем флейм.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:00 20-02-2002
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Модификация системы хранения регов в IB. Нужна помощь...


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru