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

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

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

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

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

alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Попробывал реализовать склейку постов у себя на конфе, все работает. Так что я решил хак для Ib219rus_plus2, но тут меня ждала большая проблема - post.cgi этой конфы очень сильно отличался от моего с хаком, так что данный хак был написан практически с нуля. Есть правда несколько недоработок уменьшающих скорость загрузки, но если вам срочно нужен этот хак юзайте все должно работать.
Ну начнем. Открываем post.cgi и ищем следующий код:

Цитата:
 
##### add the replyto the file.
 

Опускаемся еще ниже и находим

Цитата:
 
$filetomake = "$ikondir" . "forum$inforum/$intopic.thd";
        $filetomake = &stripMETA($filetomake);
        foreach $messages (@allmessages) {
            chomp $messages;
            $processed_data .= "$messages\n";
            }
        $processed_data .= "$inmembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost";
        open(FILE, ">$filetomake");
          #flock(FILE, 2);
        print FILE $processed_data;
        close(FILE);
        undef $processed_data;
         
        $threadposts = @allmessages;
         
        open(FILE, ">$file");
          #flock(FILE, 2);
        print FILE "$intopic|$topictitle|$topicdescription|$threadstate|$threadposts|$threadviews|$startedby|$startedpostdate|$inmembername|$currenttime";
        close(FILE);
 
 

С этим кодом мы и будем работать. Поскольку с оригинальным post.cgi я знаком недавно могу выполнить проверку на автора последнего ответа только так:
Заменяем этот код:

Цитата:
 
        foreach $messages (@allmessages) {
            chomp $messages;
            $processed_data .= "$messages\n";
            }
 

На вот этот.

Цитата:
 
        foreach $messages (@allmessages) {
chomp $messages;
if ($messagesprev ne "") {
            $processed_data .= "$messagesprev\n";
                        }
$messagesprev = "$messages";
}
 

По идее скрипт должен пробежаться по всем елементам кроме последнего, а послдений окажеться в переменной $messagesprev. Далее необходимо найти имя последнего написавшего, вставляем следующий код(если вы юзаете еще какие-нибудь хаки он может быть изменен):

Цитата:
 
        ($lastpostermembername, $trashtitle, $traship, $trashemoticons, $trashsignature, $trashtime, $trashpost, $trashmicon) = split(/\|/,$messagesprev);
 

Дальше находим вот этот код:

Цитата:
 
$processed_data .= "$inmembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost";
 

И заменяем его на вот этот:

Цитата:
 
if (($lastpostermembername eq "$inmembername") && ($lastpostermembername ne "Guest")) {
$inpost = "$trashpost<br>Добавлено:<br>$inpost";
        $processed_data .= "$inmembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost|$inmicon\n";
}
 
else {
        $numberofposts++;
$processed_data .= "$messagesprev\n";
        $processed_data .= "$inmembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost|$inmicon";
}
 

По идее все должно работать, посты guest'ов кстати не склеиваются. Сам не проверял у меня на конфе по другому принципу работает, более быстрому. Если будет время сделаю проверку на время как у batv'ы, а пока очень занят хаком для аватаров.

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei, этот хак соединяет два, подряд написанных сообщения, одним пользователеми добавляет "Добавлено:"???
 Если это так, то это очень нужный хак! А где его скачать? В Файловом архиве я что-то не нашел его...

Всего записей: 108 | Зарегистр. 18-10-2001 | Отправлено: 19:08 02-01-2002
pechalny



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
crashin

Цитата:
А где его скачать

Его не надо качать .Чуть выше своего поста глянь

----------
cynicism is the only thing that keeps me sane

Всего записей: 1852 | Зарегистр. 29-07-2001 | Отправлено: 19:51 02-01-2002
Yauheni



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
crashin, как я понял хак описан в самом посте

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



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати, автор flock'и забыл раскомментить в коде.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 20:56 02-01-2002 | Исправлено: Alexander Ipp, 21:02 02-01-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
У меня от Allaire редактор и я настроил его так чтобы flock в цги заменялся на #flock
Хак этот наподобие фичи склейки сообщений на ru-board только без проверки на время и наверное немного медленнее чем у batv'ы, наверное потому как цикл немного кривой. Если кто-то мне объяснит как даты кодируются то сделаю проверку на время(3 часа или 4 часа или 5 часов и т.д. до того как нельзя будет склеивать).
crashin, pechalny, Yauheni, Alexander Ipp
Если можете потестите его у себя и скажите как работает.
 
pechalny
Как там с конкурсом??? Извиняюсь за оффтоп

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



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexeiЗавтра потещу... Возможно, и проверку на время припишу...
Правда, у меня много поменяно очень, так что...

Цитата:
Как там с конкурсом??? Извиняюсь за оффтоп

Аналогично, вообще-то...

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



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alexander Ipp
Я бы время сам прикрутил только не знаю как его из того формата что в файле превратить в обычное. Насчет того что у тебя многое изменено то я в хаке сделал заметку где нужно обратить особое внимания, а вообще должно работать нормально даже с наворочеными версиями. Только flock раскоментируй.
 
Может текст хака себе на конфу повесить, а тут только линк оставить? Как такая реклама понравиться администрации? Шутка
 
Добавлено
Проверил кто в онлайн. Из администрации никого - batv'ы нет, DimoN'a нет, Antuan'a нет и Ausw'айсика с Pechalny нет.

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



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

Цитата:
Я бы время сам прикрутил только не знаю как его из того формата что в файле превратить в обычное.  
Просто. Тебе в какой формат нужно? Во-первых, в ikon.lib уже есть 6 функций, работающих с датой: dateformat, longdate, shortdate, shorttime, dateformatshort, joineddate. Вот их и посмотри.

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

Всего записей: 3171 | Зарегистр. 11-06-2001 | Отправлено: 02:53 03-01-2002
alexei



ibhacker
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Shurik
Посмотрю когда будет время

Всего записей: 647 | Зарегистр. 06-07-2001 | Отправлено: 11:44 03-01-2002
Shurik



Главком. флейма
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
alexei
юзай поиск, их быстро найти.
вообще говоря, в файле время в секундах, начиная с 1970го года. остается провести несложные математ-ие подсчеты, их-то и можно глянуть в тех функциях.

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

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



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexei
В бощем, проверку можно так сделать:
Находим в той же части файла:

Код:
 
        my $file = "$ikondir" . "forum$inforum/$intopic.pl";
        open (ENT, $file);
          flock ENT, 1;
        $in = <ENT>;
        close (ENT);
         
        ($topicid, $topictitle, $topicdescription, $threadstate, $threadposts ,$threadviews, $startedby, $startedpostdate, $lastposter, $lastpostdate) = split(/\|/,$in);
        if ($threadstate eq "closed" or $threadstate eq 'moved') { &error("$ibtxt{'1446'}&$ibtxt{'1447'}"); }
 

После этого добавляем:

Код:
 
if (($inmembername eq "$lastposter") && ($inmembername ne "Guest") && ($currenttime - $lastpostdate < 30)) {  
действие;
}
 

30 - время проверки в секундах, можно вынести в переменную, можно перевести в часы или минуты.
Действие - лучше всего присвоение некоей переменной значения, показывающего, что надо объединять посты.
Потом проверять её значения.
А вот и мой вопрос:
Как лучше вытащить из файла текст последнего поста и объединить его?
Кинь свой код, я его под себя исправлю...
 
Добавлено
Пофиг, чего и как там у тебя изменено.

Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 19:08 03-01-2002 | Исправлено: Alexander Ipp, 19:11 03-01-2002
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Склейка постов


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru