Jun 10

Hallo,

Ich habe mir mal erlaubt die Smarty-Pagination von Monte Ohrt http://www.phpinsider.com/php/code/SmartyPaginate/ zu erweitern. Die Smarty-Pagination ist eine feine Sache, will man aber die Spalten sortieren, so fern man welche hat, müsste man mit normalen PHP dazwischen funken. Aber damit das alles schön schnuckelig bleibt und vor allem dann auf jeder Seite geht, zeige ich euch Heute wie ihr eure Smarty-Pagination Klasse erweitert könnt.

Vorbereitung:

Wenn ihr alles selbst erweitern wollt, braucht ihr DIESE Datei. Die ihr nach dem Download  in das Verzeichnis “plugins” im Smarty-Verzeichnis kopiert.

Hab ihr keine modifizierte Pagination auf eurer Seite, oder wollt gerade die Pagination installieren, dann ladet HIER schon die fertige bzw. originale SmartyPagination 1.6 + meiner integrierten Sortierung runter.

 

Los geht’s

 

Als erstes öffnet ihr die  SmartyPaginate.class.php

Dort sucht ihr die Funktion connect() und erweitert sie nach folgenden Code:

// use $_GET by default unless otherwise specified
$_formvar = isset($formvar) ? $formvar : $_GET;

mit =>

// set sort

if(isset($_formvar['p_ord']) && isset($_formvar['updown'])) {
$_SESSION['SmartyPaginate'][$id]['pagi_orderby'] = $_formvar['p_ord'];
$_SESSION['SmartyPaginate'][$id]['pagi_updown'] = $_formvar['updown'];
}

Habt ihr das erledigt geht ihr weiter runter und setzt vor der Funktion setTotal() folgende Funktion ein:

function setSort($porder, $so = “DESC”, $id = ‘default’) {
if(!$porder) {
trigger_error(‘SmartyPaginate setSort: You must set a entity-type from your database.’);
return false;
}
if ($porder && !isset($_SESSION['SmartyPaginate'][$id]['pagi_orderby'])) {
$_SESSION['SmartyPaginate'][$id]['pagi_orderby'] = $porder;
}
if (isset($_SESSION['SmartyPaginate'][$id]['pagi_orderby']) && !isset($_SESSION['SmartyPaginate'][$id]['pagi_updown'])) {
$_SESSION['SmartyPaginate'][$id]['pagi_updown'] = $so;
}
}

Jetzt geht ihr zum ende dieser Klasse und setzt vor der letzten Klammer ” } ” folgende Funktion ein:

function getSort($what, $id) {
if ($what == “order” || $what == “sort” || isset($id)) {
if ($what == “sort”) {
return $_SESSION['SmartyPaginate'][$id]['pagi_updown'];
}
if ($what == “order”) {
return “ORDER BY “. $_SESSION['SmartyPaginate'][$id]['pagi_orderby']. ” “;
}
} else {
return ” “;
}
}

jetzt könnt ihr die  SmartyPaginate.class.php speichern und schließen.

Zum Modul & Template:

Im Modul (im PHP) könnt ihr die Sortierung am Anfang der Datei wie folgt initialisieren:

SmartyPaginate::setSort(‘spalte’, ‘sortierung’, ‘id’);
Diese Einstellung ist nur der Defaultwert, also wenn die Seite aufgerufen wird, könnt ihr hiermit bestimmen welche Spalte und in welcher Richtung sortiert werden soll.

Spalte = die spalte eures Datensatzes aus der Datenbank (Datenbanktabellenspalte)
sortierung = ASC oder DESC
id = ist eure Paginatio-ID

zb.: SmartyPaginate::setSort(‘datum’, ‘DESC’, ‘default’);

Euer Query sieht dann dann so aus:

SELECT * FROM tabelle WHERE  “.SmartyPaginate::getSort(‘order’, ‘default’).” “.SmartyPaginate::getSort(‘sort’, ‘default’).” LIMIT “.SmartyPaginate::getCurrentIndex(‘default’).”, “.SmartyPaginate::getLimit(‘default’).”";

Wie ihr sehen könnt ist SmartyPaginate::getSort(‘order’, ‘default’) und SmartyPaginate::getSort(‘sort’, ‘default’) hinzugekommen. Wichtig ist das ihr order und sort angibt. Damit weiß die Funktion was ihr zurück haben wollt. order gibt euch den ORDER BY und sort die Tabellenspalte. Ihr könnt auch nur order verwenden.

 

Im Template wird das nun in alter Smartymanier verwendet :

Mit folgender Zeile verwendet ihr das Plugin:

{paginate_sort id=”default” title=”Sortierung der Nummer” orderby=”datum” text=”Datum” class=”meinstyle”}

Diese könnt ihr in den Spaltenkopf eurer Tabelle legen.

id = eure pagination ID, habt ihr keine bleibt die frei oder weg und es wird Default benutzt.
title = ist euer Titletag
orderby = ist der Spaltenname aus der Datenbank den ihr sortieren wollt
text = Linkt text, (Leerzeichen verwenden wenn ihr ein Bild verwenden wollt)
class = ist der CSS-Style den ihr in eurer CSS definiert habt, zb. wenn ihr ein Bild verwenden wollt. :)

Ja ich denke der Rest erklärt sich von selbst. Habt ihr mehre Tabellenspalten die ihr sortieren lassen wollt, dann benutzt einfach weitere {paginate_sort} Zeilen und vergebt einfach bei orderby andere Spaltenbezeichnungen.

Viel erfolg!

Bye bye…

 

Die Kommentarfunktion für diesen Beitrag ist deaktiviert.