Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9572[/thread]

Poard: Hilfe gesucht (page 2)



<< |< 1 2 3 4 5 ... 7 >| >> 66 entries, 7 pages
PerlProfi
 2007-06-19 14:28
#91746 #91746
User since
2006-11-29
340 articles
BenutzerIn
[default_avatar]
Also eine einfache Subroutine könnte ja in etwa so aussehen:
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
sub formatpages($$) {
# pick parameters
my($act, $max, $min) = (@_, 1);

# pick pages to link
my @pages = map { { text => $_, link => 1 } }
grep { $_ >= $min && $_ <= $max }
$act-2 .. $act+2;

# may add first page
if ($pages[0]->{text} > $min) {
if ($pages[0]->{text} > $min+2) {
unshift(@pages, { text => $min, link => 1 }, { text => '...', link => 0 });
}
else {
unshift(@pages, { text => $_, link => 1 }) for reverse $min .. $pages[0]->{text}-1;
}
}

# may add last page
if ($pages[-1]->{text} < $max) {
if ($pages[-1]->{text} < $max-2) {
push(@pages, { text => '...', link => 0 }, { text => $max, link => 1 });
}
else {
push(@pages, { text => $_, link => 1 }) for $pages[-1]->{text}+1 .. $max;
}
}

# return pagelist
return @pages if wantarray();
return \@pages;
} # formatpages

Mit den 3 Werten, die du angegeben hast, kannst du sie so aufrufen:
Code: (dl )
my @pagelist = formatpages($actualPageId, $itemsCount / $itemsPerPage);


Das einzig Interessante ist hier eben nur, dass bei sehr geringen Abständen zwischen Anfang/Ende und Mitte, alle Seitenzahlen dargestellt werden.
Ich persönlich lese nämlich nicht so gerne 1 ... 3 4 5 ... 7 oder ähnliches.

MfG
Strat
 2007-06-19 15:18
#91747 #91747
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
@PerlProfi: dankeschoen. ich schau's mir genauer an, aber auf den ersten blick sieht's sehr gut aus.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2007-06-19 15:28
#91748 #91748
User since
2003-08-04
12204 articles
Admin1
[Homepage]
user image
threads splitten/mergen?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
styx-cc
 2007-06-19 15:29
#91749 #91749
User since
2006-05-20
532 articles
BenutzerIn

user image
Das erklaeren bzw. umschreiben der Ikonboard-Erklaerungsseite fuer die BB-Codes wuerde ich uebernehmen, muesste man mir nur die BB-Codes geben, damit ich weiß welche alle vorkommen..

MfG
Pörl.
Strat
 2007-06-19 15:43
#91750 #91750
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
Ich hab's gerade getestet und ein klein wenig erweitert
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
#! /usr/bin/perl
use warnings;
use strict;

my $itemsPerPage = 10;

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

sub FormatPages {
my( $max, $act, $itemsPerPage ) = @_;

my $min = 1;

$max = int( 0.99 + $max / $itemsPerPage );
$act = 1 unless $act;

print "IN: Max: $max, Act: $act, Min: $min, ItemsPerPage: $itemsPerPage\n";

# pick pages to link
my @pages = map { { text => $_, link => 1 } }
grep { $_ >= $min && $_ <= $max }
$act-2 .. $act+2;

# may add first page
if( defined $pages[0]->{text} and $pages[0]->{text} > $min ) {
if( $pages[0]->{text} > $min+2 ) {
unshift( @pages,
{ text => $min, link => 1 },
{ text => '...', link => 0 },
);
} # if
else {
unshift( @pages,
{ text => $_, link => 1 }
) for reverse $min .. $pages[0]->{text}-1;
} # else
} # if

# may add last page
if( defined $pages[0]->{text} and $pages[-1]->{text} < $max ) {
if( $pages[-1]->{text} < $max-2 ) {
push( @pages,
{ text => '...', link => 0 },
{ text => $max, link => 1 },
);
} # if
else {
push( @pages,
{ text => $_, link => 1 }
) for $pages[-1]->{text}+1 .. $max;
} # else
} # if

@pages = () if scalar @pages < 2;

# debug output
print "Output: ", join( ' ', map {
$_->{link} ? "L<$_->{text}>" : "'$_->{text}'"
} @pages ), "\n\n";

# return \@pages;
} # FormatPages

und finde, es sieht gut aus. was meint ihr?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2007-06-19 15:51
#91751 #91751
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
[quote=pq,19.06.2007, 13:28]threads splitten/mergen?[/quote]
@pq: habs aufgenommen. wenn du das machen willst, liebend gerne. Ich baue gerade was, damit die vorhandenen Links (interne und von aussen) weiterhin gueltig bleiben, weil das Einfluss auf die Datenuebernahme hat; deshalb kann ich es leider nicht auf eine zukuenftige Version verschieben. Und da ich das Poard moeglichst vor meinem naechsten Projekt produktiv haben will, koennte die zeit vielleicht knapp werden. Das ist auch der Grund, wieso ich diesen Thread gestartet habe.\n\n

<!--EDIT|Strat|1182254785-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
PerlProfi
 2007-06-19 15:54
#91752 #91752
User since
2006-11-29
340 articles
BenutzerIn
[default_avatar]
Finds auch hübscher so.
Allerdings dachte ich, man könnte die Teile # may add first/last page noch irgendwie abkürzen.

Die sehen zu groß für die Aufgabe aus - meiner Meinung nach.
Strat
 2007-06-19 16:04
#91753 #91753
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
@styx-cc: das waere echt cool.

die momentan vorhandenen tags lauten:

nop (keine Ersetzung)
code
perl
java
php
cpp (C/C++)
html
sql
cpan
img
perldoc
perlmonks
wp (wikipedia deutsch)
wpe (wikipedia englisch)
leo
google
wiki
edit
url
attach ( gibt's noch nicht)

b i u s small tt
ul mit untertag li
ol mit untertag li
table mit untertags tr th td
color
quote

wenn du die seite nicht statisch, sondern dynamisch bauen willst, sag bescheid, dann sende ich dir die Variablen, in denen die Info steht, welche Tag verwendet werden und wie sie in html umgewandelt werden und dann koennte man die Beschreibung vielleicht noch in diese Struktur aufnehmen, z.B.
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
Readonly::Hash %TagsBlocked => (

# [code] doesn't use the external program, so we have to do everything
code => { # toCheck

# -start => qq~<div class="stdDiv"><b>Code:</b><div class="showCode">~,
-start => qq~<div class="stdDiv"><div class="showCode">~,
-string => sub {
my $code = &CGI::escapeHTML( $_[0] );
$code =~ s~\r?\n~<br />\n~g;
$code =~ s~^(\s+)~'&nbsp;' x length($1)~gem;
$code =~ s/ /&nbsp;/g;
$code =~ s~\r?\n~<br/>\n~g;
return $code;
},
-end => qq~</div></div>~,
-description => 'Dumme Code-Tags',
},

# the following tags use $SourceHighlightBin to color code
perl => {
-start => qq~<div class="stdDiv">Perl:<div class="showCode">~,
-end => qq~</div></div>~,
-string => sub {
my $code = &PBoard::Posting::HighlightPerlCode( $_[0] );
$code =~ s~\r?\n~<br/>\n~g;
return $code;
},
-description => 'Code-Tags mit Syntax highlightning fuer perl',
},
java => {
-start => qq~<div class="stdDiv">Java:<div class="showCode">~,
-end => qq~</div></div>~,
-string => sub {
my $code = &PBoard::Posting::HighlightJavaCode( $_[0] );
$code =~ s~\r?\n~<br/>\n~g;
return $code;
},
-description => 'Code-Tags mit Syntax highlightning fuer Java',
},
...



Das Stylesheet liegt auf http://develop.perl-community.de/styles/default.css
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2007-06-19 16:08
#91754 #91754
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
[quote=PerlProfi,19.06.2007, 13:54]Finds auch hübscher so.
Allerdings dachte ich, man könnte die Teile # may add first/last page noch irgendwie abkürzen.

Die sehen zu groß für die Aufgabe aus - meiner Meinung nach.[/quote]

@PerlProfi: gerne
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Linuxer
 2007-06-19 23:44
#91755 #91755
User since
2006-01-27
3779 articles
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!
<< |< 1 2 3 4 5 ... 7 >| >> 66 entries, 7 pages



View all threads created 2007-06-17 17:11.