PDA

Tam Sürümünü Görmek İçin : Buda algoritma ama perl de


Sahin
10/08/2002, 14:14
Bu kod sayfaları en son eklenenden itibaren en ilk kayıta kadar sıralıyor her sayfada sadece 10 kayıt oluyor;

sub sirasi
{
$geri = "<a href=\"uyeler.cgi?sayfa=".($sayfa-1)."\&mesaj=".($mesaj)."\">
<sub><img height=18 src=\"..\/images/geriok.gif\" width=18 border=\"0\"><\/sub> <b>geri</b><\/a>";
$ileri = "<a href=\"uyeler.cgi?sayfa=".($sayfa+1)."\&mesaj=".($mesaj)."\"><b>ileri</b>
<sub><img height=18 src=\"..\/images/ok.gif\" width=18 border=\"0\"><\/sub><\/a>";
@sayilar ="";
$j=0;
while ($j <= ($#lists/$mesaj))
{
$j++;
push (@sayilar," <a href=\"uyeler.cgi?sayfa=".($j)."\&mesaj=".($mesaj)."\">$j<\/a> ");
}
if ($mesaj-1 >= $#lists)
{
$sonuc = " ";
}
elsif ($sayfa <= 1){
$sonuc = "$ileri @sayilar";
}
elsif ((($sayfa*$mesaj)-1)>=($#lists))
{
$sonuc = "$geri @sayilar";
}
else
{
$sonuc = "$geri | $ileri @sayilar"
}
}

Benim istediğim bunu A|B|C|D|E|F|G... diye sıralamak.

Ayrıca bir link olacak ona tıklandığında o zaman son kayıta göre sıralama olacak. Ama bu sıralamada 1|2|3|4|5|6....21|22 gibi olacak.


Düzgün
10/08/2002, 20:36
Merhaba,
biraz kasıp yazmaya çalıştım..

#!/usr/bin/perl -w
# coded by yavuz yasin düzgün
# info@duzgun.com
# 8/10/2002 update
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param);
my $char = substr(param('c'),0,1) || "A";
my $sayfa = param('s') || 1;
my $mesaj = param('m') || 20;
print "Content-type: text/html; charset=windows-1254\n\n";
# harfleri sırala
print "| ";
foreach ('A'..'Z') {
print "<a href=\"?c=".$_."\">".$_."</a> | ";
}
# gelen $char da A..Z ise
if ($char =~ m/[A-Z]/) {
my @dizi = datagetir($char);
my $sayi=0;
my $max = (($sayfa-1) * $mesaj);
foreach (@dizi){
$sayi++;
if (($sayi > $max) && ($sayi <= ($max+$mesaj)))
{
&liste($char,$_);
}
}
my $geri ="<a href=\"?c=".$char."\&s=".($sayfa-1)."\&m=".($mesaj)."\">&lt;&lt;<\/a>";
my $ileri="<a href=\"?c=".$char."\&s=".($sayfa+1). "\&m=".($mesaj)."\">&gt;&gt;<\/a>";
my $j=0;
my @sayilar=();
my $sonuc;
my $toplam=int($#dizi/$mesaj);
while ($j <= $toplam)
{
$j++;
#toplam sayfa sayısı 10dan fazla ise
if ($toplam >10) {
if ($j<9 || ($toplam - $j)< 1 ){
if ($sayfa == $j)
{
push (@sayilar," [$j] ");
}else{
push (@sayilar," <a href=\"?c=".$char."\&s=".($j)."\&m=".($mesaj)."\">$j<\/a> ");
}
if ($j==8){
push (@sayilar," .. ");
}
}
}
else
{
if ($sayfa == $j)
{
push (@sayilar," [$j] ");
}else{
push (@sayilar," <a href=\"?c=".$char."\&s=".($j)."\&m=".($mesaj)."\">$j<\/a> ");
}
}
}
if ($sayfa <= 1 ){
$sonuc = "@sayilar $ileri" if($toplam!=0);
}
elsif ((($sayfa*$mesaj)-1)>=($#dizi)){
$sonuc = "$geri @sayilar";
}
else{
$sonuc = "$geri @sayilar $ileri";
}
print "<br>$sonuc";

}
sub liste
{
my ($char,$data)= @_;
print ("<br>".$char." listeleniyor... ".$data."\n");
}
sub datagetir
{
#şimdi diyeceksiniz aşağıdakilede neler
#bunları data farzedin yani burada databasenize bağlanın ve return
#olarak verilerinizi dizi yapısında geri gonderin... :)
my $data = shift;
#A kategorisinde 50 kayıt olsun
if ($data eq "A"){
return my @A = ("01".."123");
}
#B kategorisinde 70 kayıt olsun
if ($data eq "B"){
return my @B = ("01".."258");
}
#C kategorisinde 98 kayıt olsun
if ($data eq "C"){
return my @C = ("01".."198");
}

}

example (http://www.duzgun.com/cgi-bin/mesajlistele.pl)
source (http://www.duzgun.com/questions/mesajlistele_1_2.htm)

selamlar..

Sahin
10/08/2002, 23:47
Eline sağlık kardeş deneyeceğim ama database txt bazlı bir database. Neyse bir deneyeyim;)