Angeregt durch die Diskussion um MrList und ContentFlex und deren Seitennavigationen hab ich mal versucht, wie schwer es ist, sowas als direktes Feature von Sefrengo rein zu frickeln.
Ergebnis: Es geht, einfach als ich dachte, aber mit ein paar Kompromissen. Ich habe versucht möglichst flexible zu bleiben, und natürlich auch kompatibel.
Hier mal mein Stand der Dinge, meine Entscheidungen und Probleme:
Im Frontend kann ich schon bei sich wiederholenden Modulen (habs bisher an einer Textzeile ausprobiert, müßte aber mit jedem anderen auch tun) einen Teilbereich darstellen. Ist im Moment noch hart im Code hinterlegt welcher Bereich, aber es tut! Müßte jetzt anfangen den Bereicht aus dem Request zu holen. Weiß nicht, was da der richtige Sefrengo-Weg ist.
Dafür mußte ich nur etwas in der Datei inc.generate_code.php rumhacken.
Zum zerlegen in einzelne Teile benutze ich eine einfache Schleife, die aus dem $content-Array das rausholt, was ich brauche! (array_slice wollte irgendwie nicht...)
QUELLTEXT
// alle Module in einem Container generieren
if(is_array($content[$cms_mod['container']['id']])){
// <ME>
// Array für Paging kürzen, falls sinnvoll!
if ($cms_mod['container']['cms:paging'] == 'true') {
// test
$start = 2;
$length = 5;
// test
$newcontent = NULL;
$count = 0;
if (count($content[$cms_mod['container']['id']]) > 1) {
foreach ($content[$cms_mod['container']['id']] as $key3 => $value3) {
if ($count >= $start && $count < $start+$length) {
$newcontent[$cms_mod['container']['id']][$key3] = $value3;
}
$count++;
}
} else {
$newcontent = $content;
}
} else {
$newcontent = $content;
}
// </ME>
$first = true; // ME
foreach ($newcontent[$cms_mod['container']['id']] as $key3 => $value3) {
// letztes Modul in diesem Container?
if(is_array($content[$cms_mod['container']['id']])){
// <ME>
// Array für Paging kürzen, falls sinnvoll!
if ($cms_mod['container']['cms:paging'] == 'true') {
// test
$start = 2;
$length = 5;
// test
$newcontent = NULL;
$count = 0;
if (count($content[$cms_mod['container']['id']]) > 1) {
foreach ($content[$cms_mod['container']['id']] as $key3 => $value3) {
if ($count >= $start && $count < $start+$length) {
$newcontent[$cms_mod['container']['id']][$key3] = $value3;
}
$count++;
}
} else {
$newcontent = $content;
}
} else {
$newcontent = $content;
}
// </ME>
$first = true; // ME
foreach ($newcontent[$cms_mod['container']['id']] as $key3 => $value3) {
// letztes Modul in diesem Container?
Für das Backend gibt es da wohl irgendwo eine eigene Stelle!? Hat bei mir zumindest keine Auswirkung auf das Backend! Erstmal egal!
Woher weiß Sefrengo nun, welchen Container es zerhacken soll? Dafür hab ich etwas an der Modul-Konfiguration gedreht. Ich hab da cms:*-Variablen erfunden. Im besonderen eine cms:paging, ist diese auf 'true' gesetzt, wird der Container dieses Moduls zerschnitten. Das sieht im Modul wie folgt aus:
QUELLTEXT
// 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';
$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';
So kann das Modul Sefrengo mitteilen: Zerhack mich! ;-) Ich dachte das sei der Weg mit der größten Flexibilität und den geringsten Problemem, wenn man Module nachrüsten möchte.
So geht's jetzt erstmal! Was mir noch nicht ganz klar ist sind folgende Probleme:
- Wie bau ich den Pager in die Seite ein? Ich will auch hier wieder möglichst wenig in Sefrengo und die Module eingreifen.
- Wie bekomme ich die Werte für $offset und $length elegant über den Request, mod_rewrite kompatibel und mit geringem Aufwand?
Könntet Ihr euch vorstellen, sowas in den Core von Sefrengo aufzunehmen? Oder wäre sowas nur eine private Friggle-Lösung von mir? Falls Ihr es für sinnvoll erachtet, ist dann mein Vorgehen halbwegs sinnvoll, oder geht das einfacher, besser, eleganter?
Gebt euren Senf dazu ab, falls Ihr das für den falschen Weg haltet, dann überlege ich ein Blog/News-Plugin zu schreiben, um MrList als Blog-Tool abzulösen. Oder ich warte bis da das Speicherproblem gelößt ist!
Ich persönlich glaube aber, das ein einheitlicher paging-Mechanismus in Sefrengo sehr sinnvoll wäre!
Tschüss
Tiggr
PS: Ich häng die von mir gequälte Datei an, alle Änderungen von mir sind mit // ME oder <ME>...</ME> markiert!