Skip to main content

Gültigkeitszeitraum Datum und Zeit zentral steuern

Comments

8 comments

  • Holger Höbbel

    Hallo Thomas,

    ich bin mir nicht sicher, was genau die Frage ist ;)

    Die Methode "setLifespan(long from, long to)" auf der Section kennst Du? Damit kann man per Skript den Gültigkeitszeitraum setzen.
    Beispiel: "<section>.setLifespan(1781259924000L,-1L);" setzt den Gültigkeitszeitraum von "12.06.2026, 12:25:24 Uhr" ohne Befristung (vorher den Lock setzen, danach speichern und den Lock wieder entfernen nicht vergessen)

    Du kannst Dir natürlich von einem beliebigen Absatz den dort definierten Gültigkeitszeitraum mittels "sectionLifespan = <section>.getLifespan();" holen und den dann auf beliebige, andere Absätze mittels "<section>.setLifespan(sectionLifespan[0],sectionLifespan[1]);" setzen.

    Oder im Skript über entsprechende Eingabekomponenten (DATE, TOGGLE) den Nutzer abfragen, welche Zeitspanne gesetzt werden soll.

    Hilft die Antwort weiter?

    Viele Grüße
    Holger

    0
  • Thomas Biedermann

    Hallo Holger,

    Vielen lieben DANK für deinen Tipp. Die Methode setLifespan(.. auf der Section kenne ich noch nicht. Wie müsste ich hier vorgehen? Hättest du evt. ein kleines Bespiel? Danach hoffe ich, kann ich mein Vorhaben umsetzen ;)

    Grüsse
    Thomas

    0
  • Holger Höbbel

    Hallo Thomas,

    hier mal ein ganz einfaches Beispiel, um die Funktion zu zeigen:

    Formular (einfach auf dem Formular-Tab des Skriptes definieren)

    <CMS_MODULE>
    <CMS_INPUT_DATE name="sc_fromData">
        <LANGINFOS>
          <LANGINFO lang="*" label="valid from"/>
        </LANGINFOS>
      </CMS_INPUT_DATE>
    <CMS_INPUT_DATE name="sc_toData">
        <LANGINFOS>
          <LANGINFO lang="*" label="valid untill"/>
        </LANGINFOS>
      </CMS_INPUT_DATE>
    <CMS_INPUT_TOGGLE name="sc_unlimited">
        <LANGINFOS>
          <LANGINFO lang="*" label="valid indefinitely"/>
        </LANGINFOS>
      </CMS_INPUT_TOGGLE>
    </CMS_MODULE>

    Quellcode des Skriptes:

    result=context.showForm();
    section = context.getElement();
    if(result != null) {
    validFrom = result.get(null,"sc_fromData").get().getTime();
    if(result.get(null,"sc_unlimited").get()) {
    validTo = -1L;
    } else {
    validTo = result.get(null,"sc_toData").get().getTime();
    }
    section = context.getElement();
    section.setLock(true);
    section.setLifespan(validFrom, validTo);
    section.save("lifespan set");
    section.setLock(false);
    }

    Das Skript prüft dabei gar nichts (es geht beispielsweise davon aus, dass der Toggle einen Vorgabewert hat und das der Redakteur die Gültigkeitsdaten korrekt eingibt (sc_fromData < sc_toData), niemand die Seite gesperrt hat usw. 

    Das muss natürlich alles noch hinzugefügt werden. Wenn man die GUI korrekt bedient und das Skript auf einer Section aufruft, die sich nicht im Bearbeitungsmodus befindet, dann setzt das Skript den entsprechenden Gültigkeitszeitraum.

    Viele Grüße
    Holger

    0
  • Thomas Biedermann

    Hallo Holger,

    DANKE für das Beispiel. Ich habe es angeschaut, aber noch nicht zum laufen gebracht.

    Grüsse, Thomas

    0
  • Holger Höbbel

    Hallo Thomas,

    das Skript ist nur als Beispiel gedacht. Es müsste aber funktionieren, wenn Du es auf einem entsprechenden Absatz ausführst, der aktuell nicht bearbeitet wird. Dort müsste dann der entsprechende Gültigkeitszeitraum gesetzt werden, wenn in den Eingabekomponenten passende Werte gesetzt wurden.

    Was klappt denn nicht? (ich werde aber erst morgen dazu kommen, mir das anzusehen)

    Viele Grüße
    Holger

    0
  • Thomas Biedermann

    Hooii Holger

    Ja, dass reicht völlig aus ;)

    Ich habe die Script-Vorlage wie beschrieben erstellt und versuche sie nun per 
    $CMS_RENDER(script: "setlifespan")$ aufzurufen. Vermutlich mache ich hier was falsch. Es geht kein Fenster auf. Oder was müsste geschehen? Ich habe den Geltungsbereich als Vorlage eingestellt.

    Ich plane, eine zentrale Datenquelle zu erstellen, in der Events mit Datum und Uhrzeit gepflegt werden können. Diese Events lassen sich anschliessend direkt im Formular des Scripts auswählen.

     

    DANKE vielmals und Grüsse, Thomas

    0
  • Holger Höbbel

    Hallo Thomas,

    > Ich habe die Script-Vorlage wie beschrieben erstellt und versuche sie nun per $CMS_RENDER(script: "setlifespan")$ aufzurufen.

    OK - Fehler gefunden :) 

    Das Skript ist dazu gedacht, als Kontextmenü Skript aufgerufen zu werden. Also auf der Karteikarte Eigenschaften des Skriptes die Option Kontextmenü wählen und dann im SiteArchitect auf einem Absatz das Skript über das Kontextmenü das Skript ausführen.

    Der Aufruf im Templatecode ($CMS_RENDER(script:...)$) ist problematisch, da es sich ja um eine Änderung (noch dazu am aktuellen Knoten) handelt. Eine Generierung arbeitet mit einer historischen Version und hat somit nur lesenden Zugriff. davon abgesehen kann aus dem template auf diese Art kein Dialog geöffnet werden.

    Wenn das Skript mit einer Generierung aufgerufen werden soll, dann muss es in dem entsprechenden Auftrag als Skript Aktion (Skript ausführen) definiert werden, die vor der Generierungsaktion ausgeführt wird. Auch dort ist ein interaktiver Dialog nicht möglich, man muss also mit festen Werten arbeiten. 

    Lösung (für diesen Anwendungsfall): Einen Standardabsatz definieren, auf dem der entsprechende Gültigkeitszeitraum gesetzt wird. Von dem Absatz den Gültigkeitszeitraum holen (sectionLifespan = <section>.getLifespan();) und den dann auf beliebige, andere Absätze mittels "<section>.setLifespan(sectionLifespan[0],sectionLifespan[1]);" setzen. Für die entsprechende Skriptaktion  im Auftrag müssen dann unter Eigenschaften entsprechende Verbindungsdaten gesetzt werden. (Ansonsten ist die Session der Skriptaktion read-only).

    Viele Grüße
    Holger

    0
  • Michael Bergmann

    Hallo Thomas,

    kannst du vielleicht den Anwendungsfall etwas genauer beschreiben? Irgendwie hört sich zumindest auf Basis der bisherigen Infos der Ansatz, hier überhaupt über das Gültigkeitsdatum zu gehen, etwas umständlich an.
    Dieser Mechanismus ist/war soweit ich weiß dazu gedacht, für einfache Fälle einzelne Absätze zeitgesteuert ein- und auszuschalten - eben damit man für so einen einfachen (!) Standardfall eben KEINE eigene Logik in Templates bauen muss.
    Inzwischen scheint es mir fast, als wäre es vielleicht einfacher, eine entsprechende Logik ganz „normal“ per Template-Syntax zu bauen…

    Viele Grüße
    Michael

    0

Please sign in to leave a comment.