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

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

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

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

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

Xnom



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Объявления (новости): делаем постраничный вывод

 
 
Это будет полезно тем, у кого слишком много объявлений(новостей).
Принцип, да и сам код, взят из topic.cgi
 
Открываем announcement.cgi и всё, что находится между

Код:
 
                ### start displaying the announcements.
                     
                     
                $filetoopen = "$ikondir" . "data/news.cgi";
                    $filetoopen = &stripMETA($filetoopen);
                open(FILE, "$filetoopen");
                @announcements = <FILE>;
                close(FILE);
         
                $postcountcheck = 0;

и

Код:
 
                                ($title, $dateposted, $post) = split(/\|/, $line);
         
                                $dateposted = $dateposted + ($timedifferencevalue*3600) + ($timezone*3600);
 
     
меняем на

Код:
 
 
                 $instart        = $query -> param('start');
                $pagestart      = $query -> param('pagestart');
                $nado=10; #кол-во выводимых сообщений
                $numberofitems = @announcements;
                 
                                 
                if ($numberofitems eq "0") {  
                        $dateposted = time;              
                        @announcements[0] = qq~$ibtxt{'0316'}|$dateposted|$ibtxt{'0317'} <a href="$thisprog?action=add"><img src="$imagesurl/images/a_add.gif" border=0"></a> $ibtxt{'0318'}~;
                        }
                else{
   $numberofpages = $numberofitems / $nado;
 
    if ($numberofitems > $nado) {
        $showmore = "yes";
        if ((!$instart) or ($instart < 0)) { $instart = 0; }
        if ($instart > 0) { $startarray = $instart; } else { $startarray = 0; }
        $endarray = $instart + $nado - 1;
        if ($endarray < ($numberofitems - 1)) { $more = "yes"; }
        if (($endarray > ($nado - 1)) and ($more ne "yes")) { $endarray = $numberofitems - 1; }
        }
        else {
             $showmore = "no";
             $startarray = 0;
             $pages = qq~<font face="$font" color=$menufontcolor size=$dfontsize1>Единственная страница</font>~;
             $endarray = $numberofitems - 1;
             }
 
     if ($showmore eq "yes") {
     if ($nado < $numberofitems) {
        ($integer,$decimal) = split(/\./,$numberofpages);
        if ($decimal > 0) { $numberofpages = $integer + 1; }
            $pagestart = 0; $counter = 0;
            while ($numberofpages > $counter) {
                $counter++;
                if ($instart ne $pagestart) { $pages .= qq~<a href="$thisprog?start=$pagestart"><font face="$font" color=$fonthighlight size=$dfontsize1><b>$counter</b></font></a> ~; }
                else { $pages .= qq~<a href="$thisprog?start=$pagestart"><font face="$font" color=$menufontcolor size=$dfontsize1>$counter</font></a> ~; }
            $pagestart = $pagestart + $nado;
            }
        }
     $pages = qq~<font face="$font" color=$menufontcolor size=$dfontsize1><b>Все страницы</b> [ $pages ]~;
     } }
                 
               $output .= qq~<tr><td bgcolor=#ffffff>$pages</td></tr>~;
                 
                        foreach $line (@announcements[$startarray .. $endarray]) {

                         
У кого какие будут замечания ?

Всего записей: 778 | Зарегистр. 09-10-2002 | Отправлено: 08:34 30-11-2002 | Исправлено: lynx, 05:59 29-06-2003
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xnom
 
Супер! Спасибо! Только не работает в таком виде. Ты сам подумай, для начала ты не открываешь файл news.cgi
Впрочем, все равно большое спасибо, с твоей рыбой я все довела до ума.
Вот так работает:
 
Меняем:
 

Код:
 
   ### start displaying the announcements.
 
   $filetoopen = "$ikondir" . "data/news.cgi";
   $filetoopen = &stripMETA($filetoopen);
   open(FILE, "$filetoopen");
   @announcements = <FILE>;
   close(FILE);
   $postcountcheck = 0;
   $totals = @announcements;
   if ($totals eq "0") {  
   $dateposted = time;              
   @announcements[0] = qq~$ibtxt{'0316'}|$dateposted|$ibtxt{'0317'} <a href="$thisprog?action=add">&#196;&#238;&#225;&#224;&#226;&#232;&#242;&#252;</a> $ibtxt{'0318'}~;
   }                
 
  foreach $line (@announcements) {
 ($title, $dateposted, $post, $myposter) = split(/\|/, $line);
 
 

 
На:
 

Код:
 
   ### start displaying the announcements.
 
   $filetoopen = "$ikondir" . "data/news.cgi";
   $filetoopen = &stripMETA($filetoopen);
   open(FILE, "$filetoopen");
   @announcements = <FILE>;
   close(FILE);
   $postcountcheck = 0;
 
###start pages
$instart        = $query -> param('start');  
$pagestart      = $query -> param('pagestart');  
$nado=10; #количество выводимых сообщений на странице
$numberofitems = @announcements;  
                                 
 if ($numberofitems eq "0") {  
 $dateposted = time;              
@announcements[0] = qq~$ibtxt{'0316'}|$dateposted|$ibtxt{'0317'} <a href="$thisprog?action=add"><img src="$imagesurl/images/a_add.gif" border=0"></a> $ibtxt{'0318'}~;  
                        }  
                else{  
   $kolvopages=$numberofitems;
   $numberofpages = $numberofitems / $nado;  
 
    if ($kolvopages > $nado) {  
        $showmore = "yes";  
        if ((!$instart) or ($instart < 0)) { $instart = 0; }  
        if ($instart > 0) { $startarray = $instart; } else { $startarray = 0; }  
        $endarray = $instart + $nado - 1;  
        if ($endarray < ($numberofitems - 1)) { $more = "yes"; }  
        if (($endarray > ($nado - 1)) and ($more ne "yes")) { $endarray = $numberofitems - 1; }  
        }  
        else {  
             $showmore = "no";  
             $startarray = 0;  
             $pages = "";  
             $endarray = $numberofitems - 1;  
             }  
 
     if ($showmore eq "yes") {  
     if ($nado < $numberofitems) {  
        ($integer,$decimal) = split(/\./,$numberofpages);  
        if ($decimal > 0) { $numberofpages = $integer + 1; }  
            $pagestart = 0; $counter = 0;  
            while ($numberofpages > $counter) {  
                $counter++;  
                if ($instart ne $pagestart) { $pages .= qq~<a href="$thisprog?start=$pagestart"><font face="$font" color=$fonthighlight size=$dfontsize1><b>$counter</b></font></a> ~; }  
                else { $pages .= qq~
                <font face="$font" color=$menufontcolor size=$dfontsize1>$counter&#160;</font>~; }  
            $pagestart = $pagestart + $nado;  
            }  
        }  
     $pages = qq~<font face="$font" color=$menufontcolor size=$dfontsize1><b>Страницы объявлений:</b> $pages ~;  
     } }  
                 
               $output .= qq~<tr><td bgcolor=#ffffff>$pages</td></tr>~;  
                 
foreach $line (@announcements[$startarray .. $endarray]) {  
 ($title, $dateposted, $post) = split(/\|/, $line);
###end pages                        
 

 
 
Я еще убрала линк на текущую пагу - зачем линковать пагу, если на ней находишься, и чуть вывод изменила, мне очень не нравятся квадратные скобки, я их убрала
 
Там лишняя переменная, может, и без нее можно, вообще не претендую на оптимальность кода, тестите, плиз

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 05:48 01-12-2002 | Исправлено: lynx, 15:20 02-12-2002
Xnom



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

Цитата:
ты не открываешь файл news.cgi  

как это ? Я же написал

Цитата:
всё, что находится между  

следовательно,

Код:
$filetoopen = "$ikondir" . "data/news.cgi";  
                    $filetoopen = &stripMETA($filetoopen);  
                open(FILE, "$filetoopen");  
                @announcements = <FILE>;  
                close(FILE);  
 

должен был остаться
 
И ещё, у тебя там строка

Код:
($title, $dateposted, $post, $myposter) = split(/\|/, $line);  

поправь здесь её, в стандартном скрипте не выводится ник оставившего объявление (новость)
 

Всего записей: 778 | Зарегистр. 09-10-2002 | Отправлено: 16:56 01-12-2002
lynx



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

Цитата:
как это ? Я же написал  
 
Цитата:всё, что находится между  
 
следовательно,  

 
Упс, сори, у меня вечно код уже перекроен.
 
 

Цитата:
И ещё, у тебя там строка  
 
Код$title, $dateposted, $post, $myposter) = split(/\|/, $line);  
 
поправь здесь её, в стандартном скрипте не выводится ник оставившего объявление (новость)  

 
Спасибо, поправлю в первой моей мессаге в этом топике

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 15:19 02-12-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