Hier mal die Fortsetzung des Feature-Requests zum Paging als Core-Funktionalität.
Die Idee hinter dem ganzen, ist es eine Gruppe von MOD_VALUE[] zu schaffen, die nicht nur im Modul, sondern auch im Core ausgewertet werden. Andersrum gibt es auch eine Gruppe solcher Werte, die der Core an das Modul zurück gibt.
Nachdem ich festgestellt habe, dass ja die Bezeichnung nicht rein nummerisch sein muß, habe ich mich entschieden, diese in der Form 'cms:identifier' zu benennen, um sie von normalen MOD_VALUE[]-Werten zu unterscheiden.
Moment hab ich nur zwei Variablen eingebaut, die für das Paging benutzt werden
Diese sind:
cms:paging
Diese teilt Sefrengo mit, dass man den Inhalt eines Containers nur teilweise ausgeben möchte.
cms:items_per_page
Teilt Sefrengo dann mit, wie lang der auszugebende Teil ist.
In der Konfiguration des Moduls sieht das ganze dann wie folgt aus:
QUELLTEXT
<?php
// Paging aktivieren/deaktivieren
$mip_form['cms:paging']['desc'] = 'Inhalte auf mehrere Seiten aufteilen und Navigation anzeigen?';
$mip_form['cms:paging']['cat'] = 'chk';
$mip_form['cms:paging']['option_var']['0'] = 'MOD_VAR[cms:paging]';
$mip_form['cms:paging']['option_val']['0'] = $dedi_mod['value']['cms:paging'];
$mip_form['cms:paging']['option_desc']['0'] = 'ja';
$mip_form['cms:paging']['option_val_select']['0'] = 'true';
// Elemente pro Seite
$mip_form['cms:items_per_page']['cat'] = 'txt';
$mip_form['cms:items_per_page']['desc'] = 'Elemente pro Seite:';
$mip_form['cms:items_per_page']['cms_var'] = 'MOD_VAR[cms:items_per_page]';
$mip_form['cms:items_per_page']['cms_val'] = $dedi_mod['value']['cms:items_per_page'];
$mip_form['cms:items_per_page']['cms_val_default'] = '15';
mip_formsp($mip_form['cms:paging']);
mip_formsp($mip_form['cms:items_per_page']);
?>
// Paging aktivieren/deaktivieren
$mip_form['cms:paging']['desc'] = 'Inhalte auf mehrere Seiten aufteilen und Navigation anzeigen?';
$mip_form['cms:paging']['cat'] = 'chk';
$mip_form['cms:paging']['option_var']['0'] = 'MOD_VAR[cms:paging]';
$mip_form['cms:paging']['option_val']['0'] = $dedi_mod['value']['cms:paging'];
$mip_form['cms:paging']['option_desc']['0'] = 'ja';
$mip_form['cms:paging']['option_val_select']['0'] = 'true';
// Elemente pro Seite
$mip_form['cms:items_per_page']['cat'] = 'txt';
$mip_form['cms:items_per_page']['desc'] = 'Elemente pro Seite:';
$mip_form['cms:items_per_page']['cms_var'] = 'MOD_VAR[cms:items_per_page]';
$mip_form['cms:items_per_page']['cms_val'] = $dedi_mod['value']['cms:items_per_page'];
$mip_form['cms:items_per_page']['cms_val_default'] = '15';
mip_formsp($mip_form['cms:paging']);
mip_formsp($mip_form['cms:items_per_page']);
?>
Vorteil:
Das Modul braucht sich nicht mehr um die Aufteilung des Contents zu bemühen, Sefrengo übernimmt das. Dadurch wird nicht unwesentlich Speicher gespart.
Im Gegenzug ermittelt der Core für das Modul einige wesentliche Daten für die Seitennavigation: Anzahl der Elemente, und die aktuell dargestellt Seite.
MOD_VALUE[cms:elements]
Steht im Modul zur Verfügung und enthält die Gesamtzahl der Elemente.
MOD_VALUE[cms:akt_page]
Enthält die aktuell dargestellte Seite, die Zählung beginnt mit 1. Der Core liest dazu im Request eine Variable aus, deren Name in den Einstellungen der jeweiligen Sprache eingestellt werden kann.
Frage: Macht das Sinn, das Sprachabhängig zu machen? Muß das überhaupt wählbar sein?
In der Frontendausgabe des Moduls können diese Werte dann verwendet werden:
QUELLTEXT
<CMSPHP>
echo '<p>Elemente gesamt: MOD_VALUE[cms:elements]<br />';
echo 'Aktuelle Seite: MOD_VALUE[cms:akt_page]</p>';
</CMSPHP>
echo '<p>Elemente gesamt: MOD_VALUE[cms:elements]<br />';
echo 'Aktuelle Seite: MOD_VALUE[cms:akt_page]</p>';
</CMSPHP>
Oder komplexer, um eine Navigation aufzubauen (Der Code ist nicht getestet und nur als Beispiel zu verstehen!):
QUELLTEXT
$pager =& sf_factoryGetObject('GUI', 'Pager');
$pager->setTotalItems(MOD_VALUE[cms:elements]);
$pager->setCurrentPage(MOD_VALUE[cms:akt_page]);
$pager->setItemsPerPage(MOD_VALUE[cms:items_per_page]);
$pager->generate();
$out = str_replace('{navigation}', $pager->getLinks(), $template);
$pager->setTotalItems(MOD_VALUE[cms:elements]);
$pager->setCurrentPage(MOD_VALUE[cms:akt_page]);
$pager->setItemsPerPage(MOD_VALUE[cms:items_per_page]);
$pager->generate();
$out = str_replace('{navigation}', $pager->getLinks(), $template);
Damit sollte es Modulautoren wesentlich leichter sein, eine Seitennavigation in ihren Modulen zu integrieren. Darüber hinaus werden noch die Resourcen (=Speicher) geschont, da nur das verarbeitet werden muß, was auch dargestellt wird.
Notwenig dafür ist zum einen eine angepaßte inc.generate_code.php, zum anderen kleine Fixes im SQL der Sprachanlage und Installation, und an der Sprachdatei lang_clients_config.php.
Die beigelegte inc.generate_code.php verwendet hardcoded die Request-Variable 'page' um leicht testen zu können.
Was auch noch fehlt ist:
- Paging für's Backend, klappt zur Zeit nur im Frontend, im Backend wird immer alles angezeigt, warum auch immer
- Unterstützung für mod_rewrite (keine Ahung wie das geht!)
Und so sieht das im Frontend aus:
Und jetzt bitte Vorschläge, Tipps, Meinungen...
Tschüss
Tiggr