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'ы, а пока очень занят хаком для аватаров. |