Moin alle,
Zitat von
lomex
Den Rest muss ich mir noch ein paar Mal durchlesen, bis ich das verstanden habe :-)
Na dann hier mal ein Patch, der meine Idee umsetzt. Ich hoffe, dass das verständlicher ist. Da ich ebenfalls denke, dass die Verwendung von News als Termine und damit auch die ASC Sortierung eher die große Ausnahme ist, habe ich es mir einfach gemacht und weder das Backend, noch die Datenbank geändert. Stattdessen fügt man für jedes [news_slideshow] Modul, das aufsteigend sortiert sein soll, einen Eintrag in die Datei system/config/localconfig.php hinzu (VOR der Zeile ### INSTALL SCRIPT START ###, siehe unten)
Code:
--- ModuleNewsSlideshow.p-revBASE.svn002.tmp.php So 5. Feb 23:42:27 2012
+++ system/modules/news_slideshow/ModuleNewsSlideshow.php So 5. Feb 22:48:40 2012
@@ -96,6 +96,12 @@
$limit = $this->news_numberOfItems;
}
+ $order = 'DESC';
+ if (isset($GLOBALS['MISC']['news_slideshow_id'][$this->id]['ASC_OFFSET'])) {
+ $order = 'ASC';
+ $asc_offset = intval($GLOBALS['MISC']['news_slideshow_id'][$this->id]['ASC_OFFSET']);
+ }
+
// Get the total number of items
$objTotal = $this->Database->execute("
SELECT COUNT(*) AS total
@@ -103,8 +109,9 @@
WHERE pid IN(" . implode(',', array_map('intval', $this->news_archives)) . ")" . (($this->news_featured == 'featured') ? "
AND featured=1" : (($this->news_featured == 'unfeatured') ? "
AND featured=''" : "")) . (!BE_USER_LOGGED_IN ? " AND (start='' OR start<$time) AND (stop='' OR stop>$time) AND published=1" : "") . "
- AND news_slideshow=1
- ORDER BY date DESC");
+ AND news_slideshow=1" . (($order == 'ASC') ? "
+ AND date>$time-$asc_offset" : "") . "
+ ORDER BY date $order");
$total = $objTotal->total - $skipFirst;
// Split the results
@@ -148,8 +155,9 @@
WHERE pid IN(" . implode(',', array_map('intval', $this->news_archives)) . ")" . (($this->news_featured == 'featured') ? "
AND featured=1" : (($this->news_featured == 'unfeatured') ? "
AND featured=''" : "")) . (!BE_USER_LOGGED_IN ? " AND (start='' OR start<$time) AND (stop='' OR stop>$time) AND published=1" : "") . "
- AND news_slideshow=1
- ORDER BY date DESC");
+ AND news_slideshow=1" . (($order == 'ASC') ? "
+ AND date>$time-$asc_offset" : "") . "
+ ORDER BY date $order");
// Limit the result
if (isset($limit))
Dieser Patch ist getestet, hier ist die Demoseite. Dort ist auch dokumentiert, welche Einträge man in localconfig.php machen muss. Im Prinzip:
PHP-Code:
$GLOBALS['MISC']['news_slideshow_id'][<Modul-ID>]['ASC_OFFSET'] = <Offset in Sekunden>;
Update: dabei ist die Integer-Zahl <Modul-ID> die ID des Frontendmoduls mit der Slideshow, das anders sortiert werden soll (und NICHT die ID irgend eines Archivs).
Im Anhang die neue Version von system/modules/news_slideshow/ModuleNewsSlideshow.php, damit buntwelt das schnell erproben kann (Original sichern, falls was schiefgeht).
Noch etwas: auch mit der nicht gepatchten Version ist die Anzeige nicht korrekt, wenn es weniger als 2 anzuzeigende News gibt. Das fällt bei normalen News selten auf, aber bei der ASC Sortierung mit dem Offset kann es ja schon mal vorkommen. Bei nur 1 News wird das große Bild nicht gezeigt, dafür wird nur ein leeres <ul> ohne <li> generiert, die/der Titel rechts erscheinen aber. Bei 0 News wird "Array" ausgegeben. Kannst Du, Oliver, da bitte nochmal hinsehen?
LG, Georg
Lesezeichen