Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » PHP » Algrithmus zur Erstellung von Seiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.04.2004, 20:55 Uhr
Pablo
Supertux
(Operator)


Hallo
ich versuche schon seit einigen Tagen einen gescheiten Algorithmus zu erstellen, der auf eine intellige Art und Weise die Seiten anzeigt. Was ich meine ist folgendes. Wenn man eine Tabelle hat, wie z.b. ein Gästebuch oder ein Forum und die Tabelle hat so viele Einträge, dass man sie in mehreren Seiten aufspaltet, dann gibt es Links, um in die andere Seiten zu gelanagen. Einige Skripte sind normal, es werden alle Seite angezeigt. Aber es gibt manche, die besser sind. Angenommen man ist auf der Seite 33 und es gint 276 Seiten, dann möchte ich so haben:


Code:
Zurück 1, 2, 3, ... 30, 31, 32, >33<, 34, 35, 36, ...  274, 275, 276 Weiter



Das heißt, alle sollen Links sein außer Nummer 33.

Ich hab mir den Kopf zerborchen, wie ich das machen könnte, kommte ich aber nicht drauf, wie!
Kennt jemand einen guten Algorithmus, der etwas ähnliches macht?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.04.2004, 22:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nun mal so auf die schnelle:


PHP 4:
$datacount = 33; // Anzahl Datensätze
$dataperpage = 5; // Datensätze pro Seite

echo 'Seiten: '.(($start==0) ? '1' : '<a href="?start=0">1</a>');
$y = 2;
for($x = $dataperpage; $x < $datacount; $x+= $dataperpage)
{
  echo ', '.(($start==$x) ? $y : '<a href="?start='.$x.'">'.$y.'</a>');
  $y++;
}



aufruf dann per filename.php?start=datensatz
--
class God : public ChuckNorris { };

Dieser Post wurde am 20.04.2004 um 22:12 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.04.2004, 01:57 Uhr
Pablo
Supertux
(Operator)


hmm nicht schlecht, aber sowas habe ich auch schon mal. Was ist will, wie hier im Forum, dass ab eine bestimmte Seite (bsp 7) Pünkten erscheinen und wenn page=x, dann müssen 3 Seiten vor x als Link dargestellt werden und auch 3 Seiten nach x.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.04.2004, 03:46 Uhr
Pablo
Supertux
(Operator)


Gut, ich hab folgendes in C gemacht, leider hab ich ein paar kleine Bugs entdeckt, und ich weiß nicht warum.


C++:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 4096

void print_pages(int current, int pages, int links, int lastlink)
{
   int i;
   char umgebung[MAX_LENGTH];
   char templinks[MAX_LENGTH];
   char temprechts[MAX_LENGTH];
   char temp[MAX_LENGTH];
   char* verify;
   int firstumgebung=0;
   int lastlinks=0;
   int lastumgebung=0;
   int firstright=0;
   sprintf(umgebung, ">%d<", current);
   *temp=0;
   *templinks=0;
   *temprechts=0;
   for (i=1; i<=links; ++i) {
       strcpy(temp, templinks);
       if (current-i > 0)
        sprintf(templinks, "[%d], ", current-i);
    else
        *temp=0;
    strcat(templinks, temp);
    if (current+i <= pages) {
        sprintf(temp, "[%d], ", current + i);
        lastumgebung=i+current;
    } else
        *temp=0;
    if (umgebung[strlen(umgebung)-1]!=' ')
        strcat(umgebung, ", ");
    strcat(umgebung, temp);
   }
   strcat(templinks, umgebung);
   strcpy(umgebung, templinks);
   sscanf(umgebung, "[%d]", &firstumgebung);

   *templinks=0;

   for(i=1; i<=lastlink && i<current-links; ++i) {
       sprintf(temp, "[%d]", i);
       verify = strstr(umgebung,temp);
    if (!verify) {
        strcat(temp, ", ");
        strcat(templinks, temp);
        lastlinks=i;
    }
   }

   if (current < lastlink) {
       for(i=current+1; i<=lastlink; ++i) {
        sprintf(temp, "[%d], ", i);
        strcat(umgebung, temp);
        lastlinks=i;
    }
   }

   if (firstumgebung-1!=lastlinks) {
    verify=strrchr(templinks, ',');
    if (verify) {
        *verify=0;
        if (current < lastlink) {
            if (lastlink+1==firstumgebung)
                strcat(templinks, " ... ");
            else strcat(templinks, ", ");
        } else strcat(templinks, " ... ");
    }
   }
   strcat(templinks, umgebung);
   strcpy(umgebung, templinks);

   *templinks=0;


   for(i=pages; i>pages-lastlink && i>current+links; --i) {
       sprintf(temp, "[%d]", i);
    verify = strstr(umgebung,temp);
        if (!verify) {
            strcat(temp, ", ");
        strcpy(templinks, temprechts);
        strcpy(temprechts, temp);
        strcat(temprechts, templinks);
            firstright=i;
       }
   }

   temprechts[strlen(temprechts)-2]=0;


   if (lastumgebung+1==firstright) {
       strcat(umgebung, temprechts);
   } else {
       umgebung[strlen(umgebung)-2]=0;
    if (current!=pages)
        strcat(umgebung, " ... ");
    strcat(umgebung, temprechts);
   }

  
   printf ("%d Seite(n) %s %s %s\n", pages, current!=1 ? "Zurück" : "", umgebung, current!=pages ? "Weiter" : "");
}

int main(int argc, char** argv)
{

    if (argc != 5) {
        fprintf(stderr, "usage: %s currentpage numofpages numoflinks firstlink\n", argv[0]);
    return 0;
    }

    print_pages(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), atoi(argv[4]));  

    return 0;
}




bash:

$ ./pager 31 276 3 3
276 Seite(n) Zurück [1], [2], [3] ... [28], [29], [30], >31<, [32], [33], [34] ... [274], [275], [276] Weiter



So hab ich es mir vorgestellt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: