Thread Poard: Hilfe gesucht (65 answers)
Opened by Strat at 2007-06-17 17:11

Linuxer
 2007-06-19 23:44
#91755 #91755
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Hi,

hier also mal mein erwähnter nächtlicher Code :

[edit]:
* nachdem ich strats Testroutine auf meine Routine losgelassen habe, habe ich noch eine Nachbesserung vorgenommen (Definition der Ausnahmefaelle); ausserdem habe ich die Tests uebernommen und auf meine Routine angepasst .

* die aktuelle Seite soll Text sein und kein Link


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);

sub FormatPagedResults {

my( $itemsCount, $itemsPerPage, $actualPageId ) = @_;

# wieviel "rand" soll dargestellt werden? sprich:
# wie viele Links sollten jeweils neben dem aktuellen angezeigt werden?
my $border = 2;

# Ausnahmefaelle definieren; evtl. sollten die uebergebenen Werte
# auf Gueltigkeit geprueft werden?
return [] unless ( $itemsCount > 0 );
return [] unless ( defined $actualPageId );

# ID d. letzten Seite ermitteln; mehr darf nicht sein!
my $last = int ( $itemsCount / $itemsPerPage + ( $itemsCount % $itemsPerPage == 0 ? 0 : 1 ) );

# Anfang und Ende vor-befuellen
my %pages = (
# PAGE => Set_link (boolean)
1 => 1,
$last => 1,
);

# den Bereich um die aktuelle Seite eintragen
for my $id ( $actualPageId-$border .. $actualPageId+$border ) {

# Werte ausserhalb der Gueltigkeit ueberspringen
next if ( $id < 1 or $id > $last );

# ansonsten eintragen
$pages{$id} = 1;
}

# akt. Seite eintragen; ueberschreibt evtl. default f. erste/letzte Seite
# vorausgesetzt, die Seitenzahl ist im gueltigen Bereich
if ( $actualPageId > 0 and $actualPageId < $last ) {
$pages{$actualPageId} = 0;
}

# Hash umwandeln in den benoetigten AoH
my @pages = ();
my $prev = 0;

for my $id ( sort { $a <=> $b } keys %pages ) {

# Abstandshalter einfuegen
if ( $id - 1 != $prev ) {
push( @pages, { 'id' => '...', 'link' => 0 } );
}

push ( @pages, { 'id' => $id, 'link' => $pages{$id} } );

$prev = $id;
}

return \@pages;

} # FormatPagedResults ( $itemsCount; $itemsPerPage, $actualPageId )


#$Data::Dumper::Sortkeys = 1;
#print Dumper ( FormatPagedResults( 0, 0, 10 ) );


testing();


sub testing {
my $itemsPerPage = 10;

output( FormatPagedResults( 199, $itemsPerPage, $_)) for 0..20;
output( FormatPagedResults( 1 , $itemsPerPage, $_)) for 0..3;
output( FormatPagedResults( 211, $itemsPerPage, $_)) for 21..23;
output( FormatPagedResults( 218, $itemsPerPage, $_)) for (1,2,4,6,9,14,19,20,22);
output( FormatPagedResults( 0 , $itemsPerPage, 0 ));
output( FormatPagedResults( 130, $itemsPerPage, $_ ));
output( FormatPagedResults( 81, $itemsPerPage, $_ )) for (3..8);

}

sub output {
my $aref = shift;

print "Output: ",
join( ' ',
map { $_->{link} ? "L<$_->{id}>" : "'$_->{id}'" }
@$aref
), "\n\n";
}
\n\n

<!--EDIT|Linuxer|1182288026-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Poard: Hilfe gesucht