Search the FirstSpirit Knowledge Base
Hallo,
es gibt bei den Regeln die Möglichkeit gegebene Daten aus Eingabekomponenten (beispielsweise CMS_INPUT_DATE) oder fix eingegebene Daten/Datum in irgendeiner Form gegeneinander abzugleichen z.B mit greater_than o.ä.
Gibt es auch eine Möglichkeit das aktuelle Datum, sozusagen #global.now, mit einem Datum aus einer Eingabekomponente abzugleichen?
Im Optiomalfall im datetime Format?
Vielen Dank,
Svenja Bauer
Hallo Svenja,
zur ersten Deiner Fragen, ja das geht. Im ODFS findest Du unter Vorlagenentwicklung / Regeln / Vergleich. Ausdrücke / GREATER_THAN (der Link geht zur offiziellen Dokumentation, aber jeder FirstSpirit-Server bringt ein eigenes ODFS mit):
<GREATER_THAN>
<PROPERTY source="tt_date" name="VALUE"/>
<PROPERTY source="tt_ref_date" name="VALUE"/>
</GREATER_THAN>
Das aktuelle Datum kann man auf jeden Fall beim initialen Verwenden des Formulars befüllen lassen. Das Beispiel habe ich aus einer Tabellenvorlage einer Pressemitteilung kopiert:
<CMS_INPUT_DATE name="tt_ref_date" hFill="yes" mode="datetime" preset="created" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="DE" label="Datum" format="dd.MM.yyyy"/>
<LANGINFO lang="*" label="Date" format="yyyy-MM-dd"/>
</LANGINFOS>
</CMS_INPUT_DATE>
Wenn man das Referenzdatum verstecken möchte, dann kann man z.B. es per hidden="YES" im Formular verstecken.
Grüße Marian
Hallo Svenja,
zur ersten Deiner Fragen, ja das geht. Im ODFS findest Du unter Vorlagenentwicklung / Regeln / Vergleich. Ausdrücke / GREATER_THAN (der Link geht zur offiziellen Dokumentation, aber jeder FirstSpirit-Server bringt ein eigenes ODFS mit):
<GREATER_THAN>
<PROPERTY source="tt_date" name="VALUE"/>
<PROPERTY source="tt_ref_date" name="VALUE"/>
</GREATER_THAN>
Das aktuelle Datum kann man auf jeden Fall beim initialen Verwenden des Formulars befüllen lassen. Das Beispiel habe ich aus einer Tabellenvorlage einer Pressemitteilung kopiert:
<CMS_INPUT_DATE name="tt_ref_date" hFill="yes" mode="datetime" preset="created" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="DE" label="Datum" format="dd.MM.yyyy"/>
<LANGINFO lang="*" label="Date" format="yyyy-MM-dd"/>
</LANGINFOS>
</CMS_INPUT_DATE>
Wenn man das Referenzdatum verstecken möchte, dann kann man z.B. es per hidden="YES" im Formular verstecken.
Grüße Marian
Hallo Marian,
das hatte ich auch schon als Lösung angepeilt, was mir allerdings gefehlt hat war die format Info. für meinen Fall wäre dann preset="changed" passender. Aber generell scheint es so zu funktionieren
Danke für die Info.
Ich würde das gerne aber flexibler halten. Kann man, wie ursprünglich angefragt, auch mit #global.now oder so kombinieren? Nur Datümer zulassen, die kleiner gleich now sind? Da muss es doch eine schlanke Lösung geben...
Ich hoffe, das meine Frage noch gelesen wird, auch wenn das Ticket schon als beantwortet markiert ist.
Hallo Marcus,
was Du haben möchtest klingt nach einer Regel. Die kann man selbstverständlich zusätzlich angeben. Durch preset="created" wird ja immer automatisch das aktuelle Datum beim Anlegen gesetzt.
Grüße Marian
Wie kann ich denn verhindern, dass ein Redakteur ein Datum in der Zukunft auswählt?
Ich würde das als RULE anlegen wollen:
<RULES>
<RULE>
<WITH>
<GREATER_THAN>
<PROPERTY name="VALUE" source="pt_veroeffentlichung"/>
<DATE>2017-12-01 12:00:00 +0100</DATE>
</GREATER_THAN>
</WITH>
<DO>
<NOT>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="pt_veroeffentlichung"/>
<MESSAGE lang="*" text="Das Datum darf nicht größer als heute sein."/>
</VALIDATION>
</NOT>
</DO>
</RULE>
</RULES>
Aber wie bekomme ich in den DATE-Teil sowas wie #global.now rein? Also ein dynamisches Datum...
Hallo Marcus,
ich fürchte, dass dies ein fehlendes Feature ist, dass "schlank" hinzubekommen. Ich fürchte, das geht nur so (nicht getestet, kann also noch Tipp-und Denk-Fehler beinhalten )
<CMS_INPUT_DATE name="pt_hiddendate" hFill="yes" hidden="no" preset="created" useLanguages="no">
<LANGINFOS>
<LANGINFO
lang="*"
label="Hidden Date (created date)"
format="dd.MM.yyyy"/>
<LANGINFO
lang="DE"
label="Verstecktes Datum (Erstellungsdatum)"
format="dd.MM.yyyy"/>
</LANGINFOS>
</CMS_INPUT_DATE>
<CMS_INPUT_DATE name="pt_veroeffentlichung" hFill="yes" useLanguages="no">
<LANGINFOS>
<LANGINFO
lang="*"
label="release date"
format="dd.MM.yyyy"/>
<LANGINFO
lang="DE"
label="Datum der Veröffentlichung"
format="dd.MM.yyyy"/>
</LANGINFOS>
</CMS_INPUT_DATE>
<RULES>
<RULE>
<WITH>
<GREATER_THAN>
<PROPERTY name="VALUE" source="pt_veroeffentlichung"/>
<PROPERTY name="VALUE" source="pt_hiddendate"/>
</GREATER_THAN>
</WITH>
<DO>
<NOT>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="pt_veroeffentlichung"/>
<MESSAGE lang="*" text="Das Datum darf nicht größer als heute sein."/>
</VALIDATION>
</NOT>
</DO>
</RULE>
</RULES>
Um den "schlanken" Fall [Prüfung geben #global.now zu bekommen] müsstest Du einen Feature Request einstellen. Wobei ich nicht glaube, dass dieser umgesetzt wird. In die Richtung, in der Du das haben willst (Datum muss älter als "jetzt" sein) ist das noch logisch. Wenn man aber ein Datum in der Zukunft haben will (also größer als jetzt), dann würde die Regel im Laufe der Zeit ungültig werden. [Deshalb habe ich oben auch modified und nicht changed verwendet, falls das jemand mal umgedreht verwenden will ]. Das Verhalten, das daraus resultieren würde, sehe ich als zumindest "unschön" an.
Viele Grüße,
Holger