Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 01. Januar 2016 15:20

Sven
probiert CMS/ms aus
Registriert: 25. April 2014
Beiträge: 35

CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Hallo Forum,

allen ein gesundes neues Jahr 2016.

Ich kämpfe hier gerade mit CMSMS 1.12.1 und CGCalendar 1.13.3 (PHP 5.6.11), und möchte eine Liste mit Terminen des ganzen Jahres angezeigt bekommen, aufsteigend(!), also die Termine vom Februar zuerst und von Oktober zuletzt.

Aufgerufen habe ich das Modul V 1.13.3 mit

{CGCalendar category='Webseite' display='yearlist' year='2016'}

Da wird mir jedoch der Oktober zuerst angezeigt. Lt. Hilfe soll es sich mit dem Parameter reverse=true umkehren lassen.

Denkste sad! Geht nicht.

Hab auch den Parameter year weggelassen und anstatt CGCalendar cms_module module="CGCalendar" verwendet. Nix.

Soweit meine Kenntnisse reichen, ist für diese Aktion function.displayyearlist.php maßgebend. Dort werden die Daten via

$idlist = $db->GetCol(cgcalendar_utils::get_query($start,$end,$category,$reverse));

geladen. In der class.cgcalendar_utils.php finden sich zu get_query die nach meiner Meinung relevanten Zeilen

    $sorting = ($reverse == true ? 'DESC' : 'ASC');

und

    $sql .= " ORDER BY E.event_date_start $sorting";

Um einen Fehler auszuschließen, hab ich $sorting manuell auf DESC und ASC gesetzt ... keine Änderung.

Nun gehen mir erst einmal die Ideen aus, was ich da noch machen / versuchen könnte.

Und möglichst keine Empfehlung a la "auf die letzte Modulversion aktualisieren". Wollte CGCalendar 1.15.7 installieren, fordert unter anderem CGExtensions 1.49.10. Lade ich dieses Modul hoch, verschwindet es komplett aus der Modulliste. Ähnliches, wenn ich die neueste Version von CGSimpleSmarty nehme.

Komme mir vor, wie der absolute Anfänger  ops  ops  ops ...

Offline

#2 07. Januar 2016 10:06

Sven
probiert CMS/ms aus
Registriert: 25. April 2014
Beiträge: 35

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Niemand das gleiche Problem?

Niemand sonst eine Idee dazu?

ops  cry  ops

Offline

#3 07. Januar 2016 11:24

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Der Fehler liegt nicht in der SQL Abfrage. Die ist ok.
Das Problem liegt in der Datei function.displayyearlist.php in Zeile 77:

$loader = new cgc_event_loader($id,$idlist,$detailpage,$this->GetPreference('url_prefix','calendar'));

Das müsste eigentlich so lauten (die Variable $reverse wurde nicht übergeben):

$loader = new cgc_event_loader($id,$idlist,$detailpage,$reverse,$this->GetPreference('url_prefix','calendar'));

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#4 07. Januar 2016 13:55

Sven
probiert CMS/ms aus
Registriert: 25. April 2014
Beiträge: 35

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Danke fürs Reinschauen!! Auf einen Fehler im Loader-Aufruf bin ich nicht gekommen ...

Sven schrieb:
    $sql .= " ORDER BY E.event_date_start $sorting";

Um einen Fehler auszuschließen, hab ich $sorting manuell auf DESC und ASC gesetzt ... keine Änderung.

Aber hätte es da nicht zumindest funktionieren müssen, wenn ich $sorting durch DESC bzw ASC ersetze  ops ?

EDIT:

- function.displayyearlist.php angepasst
- Aufruf des Kalenders mit {cms_module module='CGCalendar' display='yearlist' reverse=true}

-> Ergebnis: siehe oben  cry

EDIT 2:

Der Vollständigkeit halber - Modul-Output wird nicht gecached.

Wird immer kurioser

Modulhilfe zum Parameter "reverse" schrieb:

Applicable to "list", "pastlist" and "upcominglist" displays

Setze ich die Aktion auf list oder upcominglist, passiert gar nichts (Output=0).

Beitrag geändert von Sven (07. Januar 2016 14:18)

Offline

#5 07. Januar 2016 15:56

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Aber hätte es da nicht zumindest funktionieren müssen, wenn ich $sorting durch DESC bzw ASC ersetze

Nein, denn am Query liegt es ja nicht.
Der ist korrekt.
Der lädt außerdem nur die IDs der Events, nicht die Events selbst.
Die Reihenfolge ist an dieser Stelle vollkommen egal.
Denn die Events werden dann vom Loader geladen.
Diesem werden die IDs der zu ladenden Events übergeben. *)
Nur wird dabei der reverse Parameter nicht an den Loader übergeben bzw. wird stattdessen das URL-Preffix übergeben. Das resultiert am Ende darin, dass beim Loader generell "reverse" sortiert wird. Weil das URL-Preffix für den Parameter "reverse" in boolean als "true" gewertet wird.

{cms_module module='CGCalendar' display='yearlist' reverse=true}

Und ohne reverse?
Reverse sortiert absteigend.
Also von Dezember 2016 bis Januar 2016.
Du willst es aber in der "richtigen" Reihenfolge, oder?
Also brauchst du das Reverse eigentlich nicht bzw. müsstest es auf "false" setzen.
(false ist aber sowieso die Standardeinstellung)



*) Frag nicht, warum das alles doppelt geladen wird. Ich hab keine Ahnung.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#6 08. Januar 2016 10:47

Sven
probiert CMS/ms aus
Registriert: 25. April 2014
Beiträge: 35

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Es funktioniert weder mit noch ohne den Parameter reverse sad ...

Offline

#7 08. Januar 2016 14:21

Sven
probiert CMS/ms aus
Registriert: 25. April 2014
Beiträge: 35

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Kann den Fehler wenigsten jemand bestätigen? Oder stell ich mich nur zu blöd an?

Offline

#8 08. Januar 2016 14:39

Sven
probiert CMS/ms aus
Registriert: 25. April 2014
Beiträge: 35

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Und falls ersteres, kann ich das $event Array irgendwie via Smarty "umdrehen", also nach $event.event_date_start sortieren? Wie?

Beitrag geändert von Sven (08. Januar 2016 14:39)

Offline

#9 08. Januar 2016 15:40

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: CGCalendar: Jahresliste aufsteigend funktioniert nicht :( ...

Kann den Fehler wenigsten jemand bestätigen?

Ja kann ich: Es wird generell absteigend sortiert.

Wenn ich aber die genannte Stelle ändere, dann klappt es so wie es soll.
Warum es bei Dir nicht klappt, kann ich nicht sagen.
Bist Du sicher, dass Du die richtige Datei geändert hast?
Ist die geänderte Datei auch auf dem Server angekommen?
(Wenn Du das Modul über den Modulmanager installiert hast, dann kannst Du die Datei nur mit der Dateiverwaltung überschreiben - oder vorher die Zugriffsrechte im Modul-Ordner ändern, dann klappts auch mit FTP)

kann ich das $event Array irgendwie via Smarty "umdrehen", also nach $event.event_date_start sortieren? Wie?

Das ginge evtl. mit einem UDT:

uasort($params['events'], function($a, $b) {
	return ($a['event_date_start'] < $b['event_date_start']) ? -1 : 1;
});
cmsms()->GetSmarty()->assign('events', $params['events']);

Und im Template dann so vor der foerach-Schleife aufrufen:


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline