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

Seiten-Jump



<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
Froschpopo
 2006-10-17 22:55
#70844 #70844
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Hier im Forum gibts ja auch sone schöne Seitennavigation, anhand derer man einfach auf eine Seite springen kann:
Code: (dl )
<  6 7 8 9 10 [11] 12 13 14 15 16 ... >


Wie könnte man sowas am einfachsten realisieren? Es geht mir nur ums Prinzip. Brauche jetzt nicht irgendwelche Codes.

Gegeben sind folgende Werte:
$gesamt_zahl_der_seiten
$aktuelle_seitennummer
pq
 2006-10-18 00:00
#70845 #70845
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wenn du verraetst, welches problem du eigentlich hast? einfache mathematik?
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
daywalka
 2006-10-18 00:05
#70846 #70846
User since
2004-02-03
15 Artikel
BenutzerIn
[default_avatar]
Die meisten Seiten die ich kenne, arbeiten mithilfe von LIMIT, welches u.a. MySQL bietet. Damit lassen statt sämtlicher Ergebnisse nur bestimmte Ergebnisfelder ausgeben.
Bsp:
Code: (dl )
select * from table LIMIT 1,20

beschränkt die Ergebnistabelle auf die ersten 20 Ergebnisse.

Als Parameter für die jeweiligen Seiten kannst du dann das LIMIT direkt übergeben oder halt eine Seitenzahl, die du dann mit nem Seitenanzahlwert multiplizierst.

Bsp:
index.pl?page=11
Code: (dl )
1
2
3
my $inc = 20;
my $limit = $cgi->param('page') * $inc;
my $query = "select * from table LIMIT $limit, $inc"
esskar
 2006-10-18 00:22
#70847 #70847
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
schau dir mal CPAN:Data::Pager an!
Froschpopo
 2006-10-18 00:27
#70848 #70848
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ganz einfach: Ich habe in meiner Datenbank ca 80.000 Einträge, die ich seitenweise ausgeben will. Auf jeder Seite 12.
Oben in der Navigation soll man aber auch per Link direkt auf die Seiten springen können.

Würd eich 80.000 durch 12 teilen, müsste ich 6666 mal diesen Link oben einfügen.

Lieber wäre mir soetwas wie:

Seite: 1, 2, 3, 4...6666

wenn man dann auf Seite 4 ist:
1... 2, 3, [4], 5, 6...6666
MartinR
 2006-10-18 08:46
#70849 #70849
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,17.10.2006, 22:22]schau dir mal CPAN:Data::Pager an![/quote]
... oder CPAN:Data::Pageset und dort die Methode 'mode' (für Deine Anzeige dann slide). Das benutze ich.

Wobei mir selbst noch zwei Punkte nicht klar sind:

1. Auf welcher Seite sich nun ein bestimmter Datensatz befindet muss man noch selbst berechnen
2. Den Start-Wert für das LIMIT in SQL muss mann auch noch selbst berechnen
esskar
 2006-10-18 09:49
#70850 #70850
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=MartinR,18.10.2006, 06:46]1. Auf welcher Seite sich nun ein bestimmter Datensatz befindet muss man noch selbst berechnen
2. Den Start-Wert für das LIMIT in SQL muss mann auch noch selbst berechnen[/quote]
zu 2. "mein" Modul liefert dür das SQL LIMIT die passenden Parameter.
zu 1. ergibt sich dann
renee
 2006-10-18 10:22
#70851 #70851
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das sollte vielleicht auch noch in unser neues Board eingebaut werden...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
MartinR
 2006-10-19 09:10
#70852 #70852
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,18.10.2006, 07:49][quote=MartinR,18.10.2006, 06:46]1. Auf welcher Seite sich nun ein bestimmter Datensatz befindet muss man noch selbst berechnen
2. Den Start-Wert für das LIMIT in SQL muss mann auch noch selbst berechnen[/quote]
zu 2. "mein" Modul liefert dür das SQL LIMIT die passenden Parameter.
zu 1. ergibt sich dann[/quote]
zu2) Nun da ist ja der Punkt wo ich mich immer im Kreis drehe. Henne oder Ei, was war eher da?

Damit 'skipped' berechnet werden kann, muss dem Objekt ja die Menge der insgesamt verfügbaren DS bekannt sein (total_entries). Die kann aber noch nicht bekannt sein, da ich die SQL-Abfrage ja erst noch mache wozu ich dann aber wieder 'skipped' brauche. Außer man nimmt natürlich 2 Abfragen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*dies müsste also vor SQL stehen damit skipped bekannt ist
use Data::Page;
my $page_info = Data::Page->new( ... );

SELECT
    SQL_CALC_FOUND_ROWS
        ...
    FROM
        ...
    LIMIT
        $page_info->skipped, $page_info->entries_per_page

*es kann aber erst hier stehen damit die Anzahl der DS bekannt ist
use Data::Page;
my $page_info = Data::Page->new( ... );


zu1) Ergibt sich aber leider nicht so einfach. Wenn ich 9852 DS habe und mir den 73ten anzeigen lassen will bei 12 DS je Seite wurde ich gerne wissen auf welcher Seite dieser steht. Keines der beiden Module hat aber diese Möglichkeit.
Beispiel: Ich lasse mir Überschriften in einem Forum anzeigen. 12 je Seite. Auf der 3. Seite nehme ich den 3. (also insgesamt den 27ten) und möchte mir die Details ansehen. Um dann aber wieder zurück zu kommen, brauche ich wieder die Seite (3) auf der dieser gestanden ist. Jetzt muss ich diese Angabe immer im cgi-query mitziehen.
esskar
 2006-10-19 09:16
#70853 #70853
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
zu 2: klar, mann muss vorher ein COUNT(*) machen; kostet ja aber (meistens) nix.

zu 1: page = ceil( entry / entries_per_page );

3 = ceil( 27 / 12 );
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2006-10-17 22:55.