СообЧа > База Знаний > Интернет > Веб-строительство > Perl

Вопрос

Я пишу web-галерею. Подскажите, как сделать на PERL так, чтобы под картинками отображались номера последующих страниц, но не все, а скажем, по 3-4, а дальше ссылка «next» на следующие (примерно так: 1,2,3,next), при нажатии на которую генерится следующая страница уже с другими тремя номерами и ссылкой назад «back» (т.е. так, «back»,4,5,6,"next»). Подскажите алгоритм реализации такой конструкции.

Ответ

#!/usr/bin/perl
#File: gallery.pl
#Галерея картинок
#Copyright © 2002 by A.Z.

use CGI qw/:standard/;
use strict;
my $path_to_script = "gallery.pl";
# В файле images.dat построчно лежат пути к картинкам
my $path_to_image_base = "images.dat";

my $count = 5;
my $from = param('from') || 0;
$from =~ s/^(\d+)/$1/;

my $prevtext = ($from>0)?"<a
href=\"$path_to_script?from=${\($from-1)}\">Prev</a>":"";

open(FILE, "< $path_to_image_base") or die "Can't open $path_to_image_base: $! \n";
my @images = <FILE>;
close FILE;

my $im_count = scalar @images;

my $nexttext = ($from+1<$im_count)?"<a
href=\"$path_to_script?from=${\($from+1)}\">Next</a>":"";
$from = $im_count-1 if $from>$im_count;

print header();
print <<END_HEAD
<HTML><BODY><TABLE width=100% height=100%>
<tr valigh="middle"><td align="center"><img src="$images[$from]"></td></tr>
<tr valigh="middle"><td align="center">
END_HEAD
;
print $prevtext;

for( my $i = (($from+$count)<$im_count)?$from:$im_count-$count; $i<($from+$count) &&
$i<$im_count;$i++){
if ($i != $from) {
print "<a href=\"$path_to_script?from=$i\">$i</a> ";
} else {
print " $i ";
}
}
print $nexttext;
print <<END_FOOTER
</td></tr></table>
</BODY></HTML>
END_FOOTER


A.Z.



Copyright © 2000-2004 Сообщество Чайников
Контактная информация