Zum Inhalt springen

pagebrowser für eigene Extension

Erstellt am 26. April 2007 · 7 Antworten · letzte Antwort am 5. Juni 2007

Tags: PHP, Datenbank, Frage

gkahr ·

Hallo,

für eine kleine Extension will ich eine pagebrowsing-Funktion integrieren, so dass ich immer nur 10 Ergebnisse pro Seite habe.

Im Moment hole ich mir die Wert so aus der DB:

$query = "SELECT uid, vorname, nachname FROM tx_mitarbeiter_haupt WHERE hidden <> 1 AND deleted <> 1";
$result = mysql(TYPO3_db,$query);

Bis jetzt hole ich mir die Ergebnisse mit einer while-Schleife heraus, aber weiß nicht so ganz weiter, wie man da ein Ergebnisnavigation einbauen kann.

Gruß
Lars

Sturmi ·

Hallo,

ich würde mal vorschlagen, Du machst es in etwa so.
PS: Probiere es mal aus, habe es nicht getestet.

$sql2 = "SELECT uid, vorname, nachname FROM tx_mitarbeiter_haupt WHERE hidden <> 1 AND deleted <> 1";

	if (!isset($_REQUEST['Total']))
{
  $result2 = mysql_query($sql2);
  $Total = mysql_num_rows($result2);
  mysql_free_result($result2);
  unset($result2);
}
else
{
  $Total = $_REQUEST['Total'];
}

if (!isset($_REQUEST['Seite']))
{
  $Seite = 1;
}
else
{
  $Seite = $_REQUEST['Seite'];
}
if ($Seite > $Total) $Seite = $Total;



$ProSeite = 10;
$LinksZahl = 7;
$SeitenZahl = ceil($Total/$ProSeite);
if ($LinksZahl % 2 == 0) $LinksZahl++;
$NumerischeLinks = ($LinksZahl - 1) / 2;
$url = $_SERVER['PHP_SELF'];


$sql2 .= " limit ". ($Seite * $ProSeite - $ProSeite) .", ".$ProSeite;
$result2 = mysql_query($sql2);


$AuslassungszeichenVorn = '';
$AuslassungszeichenHinten = '';
$AnfangLink = '';
$EndeLink = '';
$ZurueckLink = '';
$WeiterLink = '';
$SichtbareLinks = '';

if ($SeitenZahl > 1)
{
  $Nr = $Seite - $NumerischeLinks;
  $Anzeige = 0;

  while ($Nr <= $SeitenZahl)
  {
  
  
     if ($Nr < 1) {$Nr++; continue;}
     elseif ($Nr > $Seite + $NumerischeLinks) {break;}
     //Link der aktuellen Seite......................//
	 if ($Nr == $Seite) {$SichtbareLinks .= "[<font color=\"red\"><b>$Nr</b></font>]";}////
	 //////////////////////////////////////////////////
     else {$SichtbareLinks .= ' <a onfocus="if(this.blur) this.blur()" class="menu2" href="'.$url.'?Seite='.$Nr.'&Total='.$Total.'">'.$Nr.'</a> ';}
     $Nr++;
     $Anzeige++;
  }
  
}

//if($seite

if ($Seite > 1)
{
  $AnfangLink = ' <a onfocus="if(this.blur) this.blur()" class="menu2" href="'.$url.'?Seite=1&Total='.$Total.'">Anfang</a> ';
  if ($Seite - 1 > 1)
  {
    $ZurueckLink = ' <a onfocus="if(this.blur) this.blur()" class="menu2" href="'.$url.'?Seite='.($Seite-1).'&Total='.$Total.'">Zurück</a> ';
  }
}

if ($Seite < $SeitenZahl)
{
  $EndeLink = ' <a onfocus="if(this.blur) this.blur()" class="menu2" href="'.$url.'?Seite='.$SeitenZahl.'&Total='.$Total.'">Ende</a> ';
  if ($Seite + 1 < $SeitenZahl)
  {
    $WeiterLink = ' <a onfocus="if(this.blur) this.blur()" class="menu2" href="'.$url.'?Seite='.($Seite+1).'&Total='.$Total.'">Weiter</a> ';
  }
} 

if ($Seite - $NumerischeLinks > 1)
{
  $AuslassungszeichenVorn = '...';
}
if ($Seite + $NumerischeLinks < $SeitenZahl)
{
  $AuslassungszeichenHinten = '...';
}

$Nav = $AnfangLink;
$Nav .= $ZurueckLink;
$Nav .= $AuslassungszeichenVorn;
$Nav .= $SichtbareLinks;
$Nav .= $AuslassungszeichenHinten;
$Nav .= $WeiterLink;
$Nav .= $EndeLink;

if($Total > $ProSeite) {
print "<div align=\"right\"><br /><strong>Seite:</strong> (".$Seite."/".$SeitenZahl.")<br /> <strong>".$Nav."</strong><br /><br /></div>";
}

Dieser Code würde eine Blätternavigation erzeugen, die in etwa so aussieht:
Anfang Zurück ... 7 8 9 10 11 ... Weiter Ende

Bei der Variable $ProSeite stellst Du ein, wieviele Datensätze pro Ausgabeseite angezeigt werden sollen und bei der Variable $LinksZahl kannst Du einstellen, wieviele sichtbare Links angezeigt werden sollen.
Gebe hier bitte bescheid, ob mein Code so funktioniert hat.

Gruss

Sturmi ·

Achso .... nochwas .....
Alles was aus dem Plugin (also Deiner Extension) ins Frontend ausgegeben werden soll, solltest Du in der Variable $content .= "[Wert]"; schreiben.
Also keine print- und echo-Befehle, wie in meinem Code.

gkahr ·
Norman2k schrieb

Wieso etwas selber basteln wenn TYPO3 schon eine Funktion dafür bereit stellt?

Hey Norman,

du hast zwar schon recht, aber mir fehlt ein reales Bespiel dafür, weil ich da irgendwie nen Brett vorm Kopf habe 😢
Mit Sturmis Code kann ich im Moment sofort was anfangen. Hättest du ein Beispiel für die Anwendung?

Gruß
Lars

bagalude ·
Norman2k schrieb

Wieso etwas selber basteln wenn TYPO3 schon eine Funktion dafür bereit stellt? 😃
http://typo3.org/fileadmin/typo3api-4.0.0/df/d32/classtslib__pibase.html#ba8eebaed52748cdf9acb31562295378

Norman

Zumal mir für die Verwendung dieser Funktion bis jetzt nicht ein HowTo/Tut begegnet ist und glaub mir ich suche schon ne weile. Versuche sie seit 2 Tagen zum laufen zu bekommen aber will nicht....
Mit nem normalen Query bekomme ich die Daten aber keinen Pagebrowser mit der pi_exec_query bekomme ich den Pagebrowser aber keine Daten und mit $GLOBALS['TYPO3_DB']->debugOutput=1 bekomme ich "Fatal Cache Error" und sonst nix. #angry#