Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Erweiterte Blätterfunktion    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6298
     Erweiterte Blätterfunktion Zitat | Bearbeiten

Manchmal ist es nicht ausreichend, wenn die Blätterfunktion alle Unterseiten anzeigt.
Dies ist z.B. der Fall, wenn man in einem Gästebuch o.ä. 80 Seiten hat.

Darum hier meine Funktion für eine Blätterfunktion, wo nur eine bestimmte Anzahl von Seiten angezeigt werden:
 PHP 
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:
<?php
function blaetterfunktion($seite,$maxseite,$url="",$anzahl=4,$get_name="seite")
   {
   if(
ereg("\?",$url)) $anhang "&";
   else 
$anhang "?";

   if(
substr($url,-1,1) == "&") {
      
$url substr_replace($url,"",-1,1);
      }
   else if(
substr($url,-1,1) == "?") {
      
$anhang "?";
      
$url substr_replace($url,"",-1,1);
      }

   if(
$anzahl%!= 0$anzahl++; //Wenn $anzahl ungeraden, dann $anzahl++

   
$a $seite-($anzahl/2);
   
$b 0;
   
$blaetter = array();
   while(
$b <= $anzahl)
      {
      if(
$a AND $a <= $maxseite)
         {
         
$blaetter[] = $a;
         
$b++;
         }
      else if(
$a $maxseite AND ($a-$anzahl-2)>=0)
         {
         
$blaetter = array();
         
$a -= ($anzahl+2);
         
$b 0;
         }
      else if(
$a $maxseite AND ($a-$anzahl-2)<0)
         {
         break;
         }

      
$a++;
      }
   
$return "";
   if(!
in_array(1,$blaetter) AND count($blaetter) > 1)
      {
      if(!
in_array(2,$blaetter)) $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=1\">1</a>&nbsp;...";
      else 
$return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=1\">1</a>&nbsp;";
      }

   foreach(
$blaetter AS $blatt)
      {
      if(
$blatt == $seite$return .= "&nbsp;<b>$blatt</b>&nbsp;";
      else 
$return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$blatt\">$blatt</a>&nbsp;";
      }

   if(!
in_array($maxseite,$blaetter) AND count($blaetter) > 1)
      {
      if(!
in_array(($maxseite-1),$blaetter)) $return .= "...&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$maxseite\">letzte</a>&nbsp;";
      else 
$return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$maxseite\">$maxseite</a>&nbsp;";
      }

   if(empty(
$return))
      return  
"&nbsp;<b>1</b>&nbsp;";
   else
      return 
$return;
   }   
?>


An die Funktion wird folgendes Übergeben:
$seite: Auf welcher Seite der Besucher immoment ist.
$maxseite: Wieviele Unterseiten es insgesamt gibt.
$url: Die URL, auf die die Links verweisen sollen.
$anzahl: Wieviele Links zu den Seiten ausgegeben werden soll.
$get_name: Der GET-Name für die Seitenanzahl. Wenn dieser seite heißt, dann wird an die URL ?seite=xxx angehängt.

Die Werte für $url, $anzahl und $get_name sind optional.


Kombination mit der einfachen Blätterfunktion
Dieses lässt sich eigentlich sehr einfach mit unserer einfachen Blätterfunktion kombinieren. Als erstes muss man natürlich irgendwie die Funktion mit einbinden, entweder in einer anderen Datei auslagern und per include laden oder direkt in die Datei einbinden.
Anschließend, dort wo vorher die Ausgabe der Seiten waren, steht nun der Aufruf der Funktion.

Insgesamt sieht es so aus:
 PHP 
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:
<?php
//Hier muss die Funktion 'blaetterfunktion' stehen
//Entweder per include laden, oder
//direkt einbinden, also
//function blaetterfunktion($seite,$maxseite,$url="",$anzahl=4,$get_name="seite") //{
//...
//}

// Alter Code wie gewohnt

$seite $_GET["seite"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
   
$seite 1;


//Verbindung zu Datenbank aufbauen

$mysqli = new mysqli("localhost""user""password""database");


//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite 15;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start $seite $eintraege_pro_seite $eintraege_pro_seite;


//Tabelle Abfragen
//Tabelle hei&szlig;t hier einfach: Tabelle
$abfrage "SELECT * FROM Tabelle LIMIT $start$eintraege_pro_seite";
$ergebnis $mysqli->query($abfrage);
while(
$row $ergebnis->fetch_object())
    {
   echo 
$row->id."<br>"// Hier die Ausgabe der Einträge
   
}


//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5


//Wie viele Einträge gibt es überhaupt

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, blo&szlig; das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id

$result $mysqli->query("SELECT COUNT(*) FROM Tabelle");
$menge $result->fetch_row();
$menge $menge[0];

//Errechnen wie viele Seiten es geben wird
$wieviele_seiten ceil($menge $eintraege_pro_seite);


//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo 
"<b>Seite:</b> ";


//*****************************************
//* Dieser Abschnitt ist neu
//*****************************************
//Aufruf unserer Funktion
echo blaetterfunktion($seite,  $wieviele_seiten);


echo 
"</div>";
?>



Für Fragen bitte extra Thema im PHP-Forum eröffnen.


www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich





Post wurde schon 6x editiert, das letzte mal am 18.10.2018 um 15:59 von Andavos
25.09.2005, 16:59 Profil | PM | E-Mail  
Gast


     wichtige Frage Zitat | Bearbeiten

Kann ich auch die seite zb 10 oder 80 anschauen oder werden nur 5 links ausgegeben?
und springt er mit wenn ich auf eine seite weiter gehe?
also bin jetzt auf Seite 5
[...]4,5,6[...]
und wenn ich dann auf seite 6 gehe
[...]5,6,7[...]

oder ist die ausgabe der links fest?
das nur max 10 seiten angezeigt werden koennen?

Danke im vorraus


12.11.2005, 10:56  
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6298
      Zitat | Bearbeiten

Hallo,
also die Anzeige springt mit, sie sieht z.B. so aus:

1 ... 4 5 6 7 8 ... letzte
1 ... 5 6 7 8 9 ... letzte

Die Anzahl der ausgegebenen Links kann man auch anpassen.

Sonst schau dir die Blätterfunktion hier im Forum an.


www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich



12.11.2005, 11:31 Profil | PM | E-Mail  
CookIe
Mitglied
Neuling


Dabei seit: 11.05.2006
Herkunft:
Posts: 1
      Zitat | Bearbeiten

Sehr schoenes Tutorial / Codeschnipsel.

Werde es mir etwas genauer anschauen und so einiges
daran veraendern, Prinzip habe ich ja jetzt verstanden.

Danke Dir!

Gruss
CookIe


14.05.2006, 03:34 Profil | PM | E-Mail  
Micha234
Mitglied
Aktiver User


Dabei seit: 19.08.2005
Herkunft: Marburg
Posts: 219
      Zitat | Bearbeiten

Super Funktion!
Das hat mir heute mindestens 3 Stunden erspart .

Besten Dank!

Grüße Micha




Post wurde schon 1x editiert, das letzte mal am 07.08.2006 um 20:46 von Micha234
07.08.2006, 20:46 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Hallo!

Schönes Tut mit der Blätterfunktion.
Hat mir sehr gut geholfen.

Hab aber nun ein Problem, die Blätterfunktion an sich funktioniert, aber leider nicht die, die nur eine bestimmte Anzahl von Seiten anzeigt.

Wie binde ich das genau ein?

Gruß,
der Dude


16.02.2007, 19:46  
yngvar
Mitglied
Anfänger


Dabei seit: 09.04.2005
Herkunft: deutschland
Posts: 34
      Zitat | Bearbeiten

Hallo,

ich bin auch sehr erleichtert gewesen über das Tutorial. Allerdings habe ich dann letztendlich doch noch etwas verändert (ausschließlich der Anpassung).

Ich hab vor den return noch eine Zeile eingeschoben.

 Code 
1:
2:
3:
4:
  // [...]
  $return = (empty($return)) ? "&nbsp;<b>1</b>&nbsp;" : $return ;
  return // [...]


Wenn denn jetzt z.B. noch $maxseite = 0; ist, wird als return ein leerer String zurückgegeben.

Man betrachte sich zu diesem Fall jetzt folgendes Beipiel:

 Code 
1:
2:
3:
4:
$seite = 1;
$maxseite = 0;
echo "Gehe zu Seite".blaetterfunktion($seite,$maxseite,"i","").".";


Man bekäme als Ausgabe (bei der ursprünglichen Version):
"Gehe zu Seite."

Fügt man die Zeile noch hinzu wäre die Ausgabe:
"Gehe zu Seite&nbsp;<b>1</b>&nbsp;."

Meiner Meinung nach besser.

Gruß Heinrich S.


10.01.2008, 13:53 Profil | PM | E-Mail  
delix
Mitglied
Guter User


Dabei seit: 10.06.2007
Herkunft: schlumpfenwald
Posts: 339
      Zitat | Bearbeiten

hallo. wie kann ich die neuste antwort von meinem gästebuch auf die 1ste seite machen?

danke im vorraus


 PHP 
1:
2:
3:
4:

<?php
echo "Ich bin keine Signatur. Ich putze hier nur  ";
?>
30.05.2008, 18:10 Profil | PM | E-Mail  
koellmania
Mitglied
Aktiver User


Dabei seit: 15.12.2007
Herkunft:
Posts: 207
      Zitat | Bearbeiten

glaub das gehört zwar nicht hier hinein, aber sieh dir mal das an:

http://php-einfach.de/einf_mysql_weitere_abfragen.php --> ORDER BY


Barrierefreie Schriftgrößen >> Barrierefreies Texten >> Übersicht aller CSS Eigenschaften >> CSS kompakt >> 100 Usability Tricks
30.05.2008, 20:28 Profil | PM | E-Mail  
delix
Mitglied
Guter User


Dabei seit: 10.06.2007
Herkunft: schlumpfenwald
Posts: 339
      Zitat | Bearbeiten

habs' probiert, geht immer noch nicht gruss


 PHP 
1:
2:
3:
4:

<?php
echo "Ich bin keine Signatur. Ich putze hier nur  ";
?>
31.05.2008, 10:11 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Muss gehen!

 PHP 
1:
2:
3:
<?php
$abfrage 
"SELECT * FROM links ORDER BY id DESC";
?>


Diese Ausgabe gibt alles abwärts zurück. Also, wie dort beschrieben ist (4, 3, 2, 1).

Wenn dort ein ASC steht, dann tausche ASC mit DESC aus!




Post wurde schon 1x editiert, das letzte mal am 31.05.2008 um 11:03 von BerlinerBaer
31.05.2008, 11:03  
Rajan
Mitglied
Neuling


Dabei seit: 02.06.2008
Herkunft: keine Angabe
Posts: 2
      Zitat | Bearbeiten

Guten Abend,

habe mal die normale Blätterfunktion bei mir soweit eingebaut und soweit funktioniert auch alles nur es gibt eine unschöne meldung wenn man die seiter zum ersten mal aufruft und zwar:

Notice: Undefined index: seite in ... on line 6

in der zeile ist dieser Code:

 PHP 
1:
$seite = $_GET["seite"];


Wäre super wenn mir da einer helfen könnte wie ich diese meldung beseitigen, da so alles funktioniert mit der Blätterfunktion.

Bin für jeden tipp oder hilfe dankbar.

MfG
Rajan
----------------------------------------------
Morgen,

habe das Problem selber lösen können





Post wurde schon 1x editiert, das letzte mal am 03.06.2008 um 09:33 von Rajan
02.06.2008, 23:01 Profil | PM | E-Mail  
Benny
Mitglied
Aktiver User


Dabei seit: 01.05.2007
Herkunft: Deutschland
Posts: 205
      Zitat | Bearbeiten

Hi,

setze am Anfang der php Datei folgendes ein:

 PHP 
1:
2:
3:
4:

<?php
error_reporting
(E_ALL & ~E_NOTICE);
?>


Wenn Du mit Sessions arbeitest erst nach



 PHP 
1:
2:
3:
4:

<?php
session_start
();
?>


Der o.g Code für Errors sagt das alle Fehler außer die "Notices" angezeigt wird

Ich hoffe ich konnte helfen.


03.06.2008, 13:31 Profil | PM | E-Mail  
Rajan
Mitglied
Neuling


Dabei seit: 02.06.2008
Herkunft: keine Angabe
Posts: 2
      Zitat | Bearbeiten

super danke jetzt gehts


08.06.2008, 17:48 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Hi,

ich würde auch gerne wissen wie man die einfache mit der fortgeschrittenen Blätterfunktion kombiniert!

danke schonmal

greets h32Lg 8)


27.06.2008, 15:20  
Gast


      Zitat | Bearbeiten

Wär tatsächlich super!

Ich habe sehr lange nach einem guten Tutorial gesucht. Gut im sem Sinne, das ich als PHP Einsteiger die einzelnen Schritte verstehe.

Das Tutorial hat mir das alles sehr verständlich gemacht. Da ich vorher bereits meinen eigenen Code zur Aus- und Eingabe der Einträge erstellt hatte konnte ich den Code auch nicht einfach kopieren ^^ musste noch viel rumbasteln und hab jetzt insgesamt 2 wochen für ein gästebuch gebraucht, aber vielen Dank für die unterstützung mit den seitenzahlen... da bin ich zuerst gar nicht durch gestiegen!!

Hier könnt ihr es euch übrigens auch anschauen.

http://reimkrieger.de/test/GBuch/index.html

Leider funktioniert die erweiterte Version bei mir auch noch nicht, aber ich werds schon rausfinden auf jeden fall bin ich glücklich dasses jetzt erstmal läuft




09.07.2008, 09:35  
Aragorn
Mitglied
Anfänger


Dabei seit: 06.10.2006
Herkunft: keine Angabe
Posts: 44
      Zitat | Bearbeiten

An so nem Skript war ich letzte Woche über ne Stunde dran.

hät ich mir ersparen können. Sehr schön gemacht!


13.07.2008, 21:31 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Hi,

Ich habe mir das Script angeschaut, und mir ist aufgefallen, dass "letzte", nicht so geht wie es gehen sollte, es spring immer nur ein paar Seiten weiter.

Hier die Lösung:

if(!isset($seite))
$seite = 1;

->

if(!isset($seite)){
$seite = 1;
}

Dann gehts.

Super Script!


13.08.2008, 12:18  
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6298
      Zitat | Bearbeiten

Hallo,

if(!isset($seite))
$seite = 1;

und

if(!isset($seite)){
$seite = 1;
}

sind identisch.
Wenn nach einer if Anweisung nur ein Befehl ausgeführt werden soll, kann man die Klammern weglassen.


www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich



13.08.2008, 13:41 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Mir fehlt in der Blätterfunktion

zurück und vor

Also wenn man eine 1 Seite vor und 1 Seite zurück klicken könnte, dass wäre toll.


12.09.2008, 16:31  


Neuling


Dabei seit: 01.01.1970
Herkunft:
Posts:
      Zitat | Bearbeiten

Soweit funktioniert bei mir die Blätterfunktion, aber irgendwas mach ich falsch, denn mir zeigt er keine Einträge die ich eigentlich schon habe an.


21.10.2008, 11:26 Profil | PM | E-Mail  
Staggerwing
Mitglied
Neuling


Dabei seit: 16.10.2008
Herkunft: keine Angabe
Posts: 5
     Blätterfunktion - Vor und Zurück Zitat | Bearbeiten

Hallo,

kann mir jemand einen Tipp geben wie ich die erweiterte Blätterfunktion um Buttons für vor und zurück erweitern kann?

Eigentlich wäre das kein Problem (z.B. ($seite+1)), ich finde mich aber in der Funktion "function blaetterfunktion" nicht richtig zurecht und weiß nicht so richtig wie ich den Link plazieren muß.

Vielen Dank im Voraus!

Gruß,
Karsten



22.10.2008, 21:52 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Hey hab noch ne Frage:

Undzwar: was muss ich verändern um noch z.B: '&'$_GET["irgendwas"] ranzuhängen?


01.12.2008, 18:55  
Creech
Mitglied
Anfänger


Dabei seit: 25.11.2008
Herkunft: keine Angabe
Posts: 57
      Zitat | Bearbeiten

Zitat:
Orginal von Gast
Hey hab noch ne Frage:

Undzwar: was muss ich verändern um noch z.B: '&'$_GET["irgendwas"] ranzuhängen?

wo wie was ranhängen?

also es gibt die möglichkeit werte über die URL zu übergebn

www.url-domain.de/index.php?wert1=1&wert2=2&wert3=3

nun kannst du machen

$wert1=$_GET['wert1']
echo "Wert1:$wert1<br>"
$wert2=$_GET['wert2']
echo "Wert2:$wert2<br>"
$wert3=$_GET['wert3']
echo "Wert3:$wert3<br>"

//Ausgabe
Wert1:1
Wert2:2
Wert3:3



Gruß
Creech
------------------------------------------------------
Bitte bitte bitte gebt euren threads eindeutige Namen.

HILFE!!!!! und HELP!?!?!?!?! oder WARUM!?!?!?!
sind nicht hilfreich.
Denkt auch an den User der die suche funktion benutzt.
02.12.2008, 09:47 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

guten morgen,

erstmal sehr schönes Script, hat mir ne Menge arbeit erspart.
Es funktioniert soweit auch ganz gut, einzige Ausnahme:

id ist immer 1...15 (weil er ja nur 15 Ergebnisse ausgeben soll, ist es möglich das er aber fortlaufend durch nummeriert?

Also Seite 1 id = 1 bis 15, Seite 2 id =16 bis 30 und so weiter.

mfg


13.12.2008, 08:50  
Seiten (4):  1  2  3  4 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Erweiterte Blätterfunktion   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz