Seite 1 von 1

content_date - CMS_DATE - neues Format

Verfasst: Di 1. Dez 2015, 08:56
von steve04
Guten Morgen,

ich versuche gerade zum ersten Mal, das Modul content_date zu verwenden und hätte gern noch eine andere Formatierung oder gar zwei, z.B.

TT.MM. oder nur TT.

Wenn ich das Modul im Editor bediene, kann ich ja unter diversen Formaten wählen. Dort hätte ich halt gern noch ein, zwei weitere Einträge.
Kann ich da etwas daran drehen, ohne den Core verändern zu müssen?
Wie würde es gehen?

Vielen Dank schon mal!
Stephan

Re: content_date - CMS_DATE - neues Format

Verfasst: Di 1. Dez 2015, 10:22
von rethus
Da musst du schon an den Core, oder du erstellst eine eigene Klasse als Abkömmling von cContentTypeAbstact.

Hier für einen Laien der einfachere Weg:

Verändere contenido/classes/content_types/class.content.type.date.php indem du nach Zeile 80 dein gewünschtes Format eingibt.

Auszug ab Zeile 80:

Code: Alles auswählen

$this->_dateFormatsPhp = array(
            conHtmlentities('{"dateFormat":"","timeFormat":""}') => '',
            conHtmlentities('{"dateFormat":"d.m.Y","timeFormat":""}') => $this->_formatDate('d.m.Y'),
            conHtmlentities('{"dateFormat":"D, d.m.Y","timeFormat":""}') => $this->_formatDate('D, d.m.Y'),
            conHtmlentities('{"dateFormat":"d. F Y","timeFormat":""}') => $this->_formatDate('d. F Y'),
            conHtmlentities('{"dateFormat":"Y-m-d","timeFormat":""}') => $this->_formatDate('Y-m-d'),
            conHtmlentities('{"dateFormat":"d/F/Y","timeFormat":""}') => $this->_formatDate('d/F/Y'),
            conHtmlentities('{"dateFormat":"d/m/y","timeFormat":""}') => $this->_formatDate('d/m/y'),
            conHtmlentities('{"dateFormat":"F y","timeFormat":""}') => $this->_formatDate('F y'),
            conHtmlentities('{"dateFormat":"F-y","timeFormat":""}') => $this->_formatDate('F-y'),
            conHtmlentities('{"dateFormat":"d.m.Y","timeFormat":"H:i"}') => $this->_formatDate('d.m.Y H:i'),
            conHtmlentities('{"dateFormat":"m.d.Y","timeFormat":"H:i:s"}') => $this->_formatDate('m.d.Y H:i:s'),
            conHtmlentities('{"dateFormat":"","timeFormat":"H:i"}') => $this->_formatDate('H:i'),
            conHtmlentities('{"dateFormat":"","timeFormat":"H:i:s"}') => $this->_formatDate('H:i:s'),
            conHtmlentities('{"dateFormat":"","timeFormat":"h:i A"}') => $this->_formatDate('h:i A'),
            conHtmlentities('{"dateFormat":"","timeFormat":"h:i:s A"}') => $this->_formatDate('h:i:s A')
        );

Re: content_date - CMS_DATE - neues Format

Verfasst: Di 1. Dez 2015, 13:23
von steve04
Vielen Dank für die prompte und kompetente Antwort!
Ob ich dafür an den Core gehe, muss ich noch mal genauer überdenken.

Viele Grüße,
Stephan

Re: content_date - CMS_DATE - neues Format

Verfasst: Mi 2. Dez 2015, 08:44
von Oldperl
Servus,
rethus hat geschrieben:Da musst du schon an den Core, oder du erstellst eine eigene Klasse als Abkömmling von cContentTypeAbstact.
Nein! Muss er nicht!
Die Liste kann per EffectiveSettings in Form eines Arrays im JSON-Format erweitert werden (siehe contenido/classes/content_types/class.content.type.date.php ab Zeile 98).

Code: Alles auswählen

// add formats from client settings
        $additionalFormats = getEffectiveSettingsByType('cms_date');
        foreach ($additionalFormats as $format) {
            $formatArray = json_decode($format, true);
            // ignore invalid formats
            if (empty($formatArray) || count($formatArray) != 2 || !array_key_exists('dateFormat', $formatArray) || !array_key_exists('timeFormat', $formatArray)) {
                cWarning('An invalid date-time-format has been entered in the client settings.');
                continue;
            }
            $key = conHtmlSpecialChars($format);
            $value = implode(' ', $formatArray);
            $this->_dateFormatsPhp[$key] = $this->_formatDate($value);
        } 
Leider konnte ich weder in der Klasse selbst noch auf dem docs-Portal eine Doku finden, wie dieser Eintrag genau aussehen soll/müsste. Er wird aber zumindest unter https://docs.contenido.org/display/CONDEVE/Settings aufgeführt (einfach mal nach cms_date suchen).
Selbst habe ich es zwar noch nicht getestet, aber ich denke, sofern ich den Code richtig lese, der Eintrag ist analog zu den bereits vorhandenen Einträgen zu machen, wobei der Settings-Name wohl frei wählbar ist.

Code: Alles auswählen

{"dateFormat":"d.m.Y","timeFormat":"H:i"}
Gruß aus Franken

Re: content_date - CMS_DATE - neues Format

Verfasst: Mi 2. Dez 2015, 14:52
von rethus
Immer gut wenn jemand in der Freizeit Quellcode ließt :wink:
Daumen hoch für deinen Beitrag Oldperl.

Hab mal ein wenig rumgetestet, da man ja auch dazulernen möchte.

Legt man in den Mandanten-Variablen folgendes an:

Code: Alles auswählen

cms_date   |  dateFormat    |   {"dateFormat":"d.m.Y","timeFormat":"H:i"}
wird dies der CMS-Date-Liste hinzugefügt.
Der Wert in den Mandanten-Variablen ist also ein json codierter array.

Allerdings habe ich auch gleich einen Bug entdeckt. Geht man, nach dem abspeichern wieder auf die Variable, um den Wert z.B. zu verändern, steht in dem Textfeld nur noch eine Klammer "{".
Im Sourcecode sieht die das Textfeld dann so aus:

Code: Alles auswählen

<input id="m14" name="csvalue" value="{" dateformat":"yyyy","timeformat":"h:i"}"="" size="30" type="text">
Und noch ein Bug(?), man kann nur ein Datumsformat übergeben. Gibt man komma-separierte json-Arrays an, wird ein Fehler ausgeworfen,
gibt man mehrere Array-Werte an:

Code: Alles auswählen

{"dateFormat":"YYYY","timeFormat":"H:i","dateFormat":"dd","timeFormat":"H:i:s"}
wird nur die jeweils letzte Formatierung erzeugt. Demnach ist der Kommentar im Sourcecode irreführend, das hier mehrere Formate übernommen werden könnten.

Re: content_date - CMS_DATE - neues Format

Verfasst: Mi 2. Dez 2015, 16:02
von Oldperl
rethus hat geschrieben:Immer gut wenn jemand in der Freizeit Quellcode ließt :wink:
  1. liest und nicht ließt! Man kann' s aber auch lassen... :P
  2. Wer hat was von Freizeit gesagt? Hat man die eigentlich? :mrgreen:
rethus hat geschrieben:Und noch ein Bug(?), man kann nur ein Datumsformat übergeben. Gibt man komma-separierte json-Arrays an, wird ein Fehler ausgeworfen,
gibt man mehrere Array-Werte an:

Code: Alles auswählen

{"dateFormat":"YYYY","timeFormat":"H:i","dateFormat":"dd","timeFormat":"H:i:s"}
wird nur die jeweils letzte Formatierung erzeugt. Demnach ist der Kommentar im Sourcecode irreführend, das hier mehrere Formate übernommen werden könnten.
Und wieder NEIN! :wink:
Steht soviel ich mich jetzt gerade erinnere auch so nicht im Code. Dort steht nämlich

Code: Alles auswählen

$additionalFormats = getEffectiveSettingsByType('cms_date');
Damit werden alle Einträge für 'cms_date'
rethus hat geschrieben:

Code: Alles auswählen

cms_date   |  dateFormat    |   {"dateFormat":"d.m.Y","timeFormat":"H:i"}
in ein Array eingelesen. Man muss also nur anstelle von 'dateFormat' nur immer wieder einen anderen Namen eingeben (Beispiel: DateFormat-EN und DateFormat-DE). Dann werden die entsprechenden Einträge am Ende des Auswahlfeldes hinzugefügt.

Gruß aus Franken

Ortwin

Re: content_date - CMS_DATE - neues Format

Verfasst: Mi 2. Dez 2015, 16:23
von rethus
Oldperl hat geschrieben: Und wieder NEIN!
Hui, so kennen wir dich ja gar nicht, hier direkt rumzubrüllen? :shock: Harter Tag?

Bei mir steht in Zeile 98 dieser Kommentar:
// add formats from client settings

Re: content_date - CMS_DATE - neues Format

Verfasst: Mi 2. Dez 2015, 19:17
von Oldperl
rethus hat geschrieben:Bei mir steht in Zeile 98 dieser Kommentar:
// add formats from client settings
Man beachte den Plural... :roll:
Und wo steht da bitte das er die Angabe nur in einer einzelnen Einstellung erwartet?

Gruß aus Franken

Ortwin

Re: content_date - CMS_DATE - neues Format

Verfasst: Do 3. Dez 2015, 09:00
von frederic.schneider_4fb
Guten Morgen die Herren,

vielen Dank erneut für Eure Vorarbeit. In der Tat ist es richtig: Über den Typ "cms_date" können beliebig viele (System-/Mandanten-)Variablen gesetzt und so die CMS_DATE-Formate erweitert werden. Ich nehme ein Beispiel mal in der Dokumentation unter "Settings" auf, damit jemand Drittes nicht wieder von Neuem suchen muss. Ferner kann ich bestätigen, dass die geschweiften Klammern beim Bearbeiten geschluckt werden. Ich nehme das als Ticket auf. Ggf. löse ich das auch direkt heute (sonst nächste Woche), da das für mich ein durchaus ärgerlicher Fehler ist.

Re: content_date - CMS_DATE - neues Format

Verfasst: Do 3. Dez 2015, 09:35
von Oldperl
Guten Morgen Frederic ;)
Immer gerne! :D

Gruß aus Franken

Ortwin

Re: content_date - CMS_DATE - neues Format

Verfasst: Do 3. Dez 2015, 10:59
von frederic.schneider_4fb
Anbei die korrigierte Datei include.clientsettings.php (Ordner contenido/includes) aus der Entwicklerversion CONTENIDO 4.9.9. Wie immer der Hinweis, dass der Einsatz deshalb ohne Gewähr ist.