Wir haben den Elterndatensatz aufgerufen und holen uns erstmal die RecId (die kann man ja immer mal gebrauchen), mit der wie die relevanten Daten aus der Kind-Datengruppe holen. Dabei holen wir uns auch gleich das Jahr und den Monat des geholten Datumwertes. Es ist vollkommen ok, dass wir das immer wieder überschreiben, da es ja immer der gleiche Wert ist. Sicherlich hätten wir das auch aus dem Elterndatensatz holen können, aber so sind wir einfach sauberer. Den Datumswert selbst schreiben wir in ein Array, das wir in Zeile 2 initialisieren. Weil die Funktion aber einen Rückgabewert hat, speichern wir den auf der Variablen $ignoreValue, die wir fortan ignorieren werden (benennt eure Variablen sinnvoll!)
Jetzt wird es spannend, Freunde! Wir können nämlich die schwierigen Dinge alle von der Velocity-Datums-API erledigen lassen. Es kitzelt mir manchmal einfach den Hirnstamm, wie gut die eigentlich ist.
Zunächst holen wir uns den nächsten Monat, indem wir den zuvor ermittelten Monat um 1 erhöhen. Ja, das kann auch mal eine 13 werden, aber die Großartigkeit des $DtUtil macht es uns an dieser Stelle einfach, da wir beim erzeugen eines Datumswertes auch direkt ein bisschen herumrechnen können. In Zeile 2 und 3 holen wir uns nämlich den ersten und letzten Tag des Monats, indem wir aus dem ermittelten Jahr ($intYear), dem entsprechenden Monat ($intMonth bzw. $intNextMonth) und einem festen Tag ein Datum erzeugen. Der 13. Monat wäre also wieder der Januar des darauffolgenden Jahres und der nullte Tag ist der letzte Tag des vorherigen Monats.
In Zeile 5 und 6 bestimmen wir mit .getDay() die Wochentage dieser Datumswerte. Hier muss man aufpassen, da die Woche in der Velocity-Denke mit dem Sonntag beginnt, wir uns jetzt aber schon auf den Montag geeinigt haben. Das hätte man sicherlich anpassen können, aber…
Die 8. Zeile ist vielleicht ein bisschen schwierig, aber ich versuche mal zu erklären, was hier passiert. Wir brauchen nämlich eine Range, die wir später noch durchiterieren werden. Nun kann so ein Monat aber durchaus auch unterschiedlich viele Tage haben, also formatieren wir uns das Datum des ersten Tag des Monats so, dass uns nur der Tag des Monats zurück gegeben wird (.format(‘d’) gibt also eine Zahl zwischen 1 und 31 zurück). Anschließend wandeln wir das in ein Integer um, weil wir das so zu Iteration brauchen. Das gleiche nochmal für den letzten Tag, getrennt von zwei Punkten, umgeben von ekigen Klammern – fertig ist die Range. Im Grunde könnte da also auch [1..30] stehen. Und das benutzen wir nun, um uns einen Kalender zu basteln. Seid ihr schon aufgeregt?
Hallo! Mein Name ist Marco Friedersdorf und bin Freelancer im Bereich der Software-Entwicklung und IT-Beratung. Mit Artikeln wie diesem möchte ich einen kleinen Einblick in meine Arbeit geben und über die Dinge sprechen, die mich als Informatiker beschäftigen.
Wir verwenden Cookies, um unsere Website und unseren Service zu optimieren.
Funktional
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt.Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Aus dem Intrexx-Labor: Eine eigene Kalender-Funktion mit multiplen Einträgen und voreingestelltem Monat
Wir organisieren uns die benötigten Werte
#set($strid = $DC.getRecId()) #set($array = []) #set($statement = $PreparedQuery.prepare($DbConnection, "SELECT DT_DATUM FROM DATAGROUP('<DATAGROUP_GUID>') WHERE FKSTRID = ?")) $statement.setString(1, $strid) #set($rs = $statement.executeQuery()) #foreach($element in $rs) #set($intYear = $element.getDateValue(1).getYear() + 1900) #set($intMonth = $element.getDateValue(1).getMonth()) #set($ignoreValue = $array.add($element.getDateValue(1))) #end $rs.close() $statement.close()
Code language: C++ (cpp)Wir haben den Elterndatensatz aufgerufen und holen uns erstmal die RecId (die kann man ja immer mal gebrauchen), mit der wie die relevanten Daten aus der Kind-Datengruppe holen. Dabei holen wir uns auch gleich das Jahr und den Monat des geholten Datumwertes. Es ist vollkommen ok, dass wir das immer wieder überschreiben, da es ja immer der gleiche Wert ist. Sicherlich hätten wir das auch aus dem Elterndatensatz holen können, aber so sind wir einfach sauberer.
Den Datumswert selbst schreiben wir in ein Array, das wir in Zeile 2 initialisieren. Weil die Funktion aber einen Rückgabewert hat, speichern wir den auf der Variablen $ignoreValue, die wir fortan ignorieren werden (benennt eure Variablen sinnvoll!)
#set($intNextMonth = $intMonth + 1) #set($dtFirst = $DtUtil.date($intYear, $intMonth, 1, $User.getTimeZone())) #set($dtLast = $DtUtil.date($intYear, $intNextMonth, 0, $User.getTimeZone())) #set($intBefore = $dtFirst.getDay()) #set($intAfter = $dtLast.getDay()) #set($range = [$TextUtil.parseInt($dtFirst.format('d'))..$TextUtil.parseInt($dtLast.format('d'))])
Code language: PHP (php)Jetzt wird es spannend, Freunde! Wir können nämlich die schwierigen Dinge alle von der Velocity-Datums-API erledigen lassen. Es kitzelt mir manchmal einfach den Hirnstamm, wie gut die eigentlich ist.
Zunächst holen wir uns den nächsten Monat, indem wir den zuvor ermittelten Monat um 1 erhöhen. Ja, das kann auch mal eine 13 werden, aber die Großartigkeit des $DtUtil macht es uns an dieser Stelle einfach, da wir beim erzeugen eines Datumswertes auch direkt ein bisschen herumrechnen können. In Zeile 2 und 3 holen wir uns nämlich den ersten und letzten Tag des Monats, indem wir aus dem ermittelten Jahr ($intYear), dem entsprechenden Monat ($intMonth bzw. $intNextMonth) und einem festen Tag ein Datum erzeugen. Der 13. Monat wäre also wieder der Januar des darauffolgenden Jahres und der nullte Tag ist der letzte Tag des vorherigen Monats.
In Zeile 5 und 6 bestimmen wir mit .getDay() die Wochentage dieser Datumswerte. Hier muss man aufpassen, da die Woche in der Velocity-Denke mit dem Sonntag beginnt, wir uns jetzt aber schon auf den Montag geeinigt haben. Das hätte man sicherlich anpassen können, aber…
Die 8. Zeile ist vielleicht ein bisschen schwierig, aber ich versuche mal zu erklären, was hier passiert. Wir brauchen nämlich eine Range, die wir später noch durchiterieren werden. Nun kann so ein Monat aber durchaus auch unterschiedlich viele Tage haben, also formatieren wir uns das Datum des ersten Tag des Monats so, dass uns nur der Tag des Monats zurück gegeben wird (.format(‘d’) gibt also eine Zahl zwischen 1 und 31 zurück). Anschließend wandeln wir das in ein Integer um, weil wir das so zu Iteration brauchen. Das gleiche nochmal für den letzten Tag, getrennt von zwei Punkten, umgeben von ekigen Klammern – fertig ist die Range. Im Grunde könnte da also auch [1..30] stehen. Und das benutzen wir nun, um uns einen Kalender zu basteln. Seid ihr schon aufgeregt?