Skip to main content

Rules: Checkbox abhängig von einem Seitentemplate zeigen

Comments

4 comments

  • Zendesk API User
    Author: hoebbel - 11/28/2022 13:00

    Hallo Juncus,

    erst einmal zwei Links in die Doku:

    Um den Kontext des Seitentemplates zu bekommen, nimmst Du den FormDataValueService;

    https://docs.e-spirit.com/odfs/vorlagenentwick/regeln/anbindung-exter/informationen/index.html

    Um dort das Template zu ermitteln:

    https://docs.e-spirit.com/odfs/vorlagenentwick/regeln/formulareigensc/eigenschaft-tem/index.html

    An der Stelle musst Du dann einen kleinen Umweg gehen. Das Ergebnis schreibst Du in eine versteckte Text-Eingabekomponente im Absatztemplate. Mit einer weiteren Regel prüfst Du denn den Inhalt dieser Text-Eingabekomponente und zeigst die Checkbox an, wenn diese dargestellt werden soll.

    Anmerkung: der FormDataValueService steht automatisch in allen FirstSpirit Versionen zur Verfügung, sofern diese nicht sehr alt sind. Wenn es den bei Euch nicht gibt, hilft ein Update

    Die Alternative zu diesem Vorgehen wäre es, einen eigenen ValueService zu schreiben. Der kann dann natürlich direkt prüfen, ob die Eingabekomponente angezeigt werden soll oder nicht und einen entsprechenden Boolean zurück liefern. Dann spart man sich den Umweg über die Texteingabekomponente, in der man die UID des Templates zwischenspeichert

    Viele Grüße
    Holger

    0
  • Zendesk API User
    Author: Juncus - 11/28/2022 14:44

    Hallo Holger;

    danke schon mal für deine Lösung.

    Ganz verstehe ich sie aber leider noch nicht.

    Ich habe über den FormDataValueService die Möglichkeit über die UID des Seitentemplates für die die Checkbox eingeblendet werden soll Formulardaten abzurufen.

    Ziel wäre es also über den FormDataValueService auf das spezielle Seitentemplate zu prüfen und wenn eine Seite von diesem Seitentemplatetyp ist und eine entsprechende Absatzvorlage enthält ein verstecktes Formularfeld in dieser Absatzvorlage mit dem Namen des Seitentemplates zu füllen.
    Anschließend wird per Rule geprüft, ob das hidden Feld leer ist oder den Namen enthält und abhängig davon die Checkbox eingeblendet. Soweit richtig?
    Mir ist allerdings noch nicht ganz klar wie ich FormDataValueService mit der Templateermittlung verknüpfe.
    In der Doku wird immer ein Param ‚Field‘ abgefragt

    <PARAM name="FIELD"> <TEXT>gs_maxTextSize</TEXT> </PARAM>


    Muss ich also in den Seitentemplates auch ein verstecktes Textfeld hinterlegen in das ich dann den Templatenamen schreibe und auf dieses Feld dann abfragen?
    Oder kann ich die Abfrage
    <RULE when="ONLOCK">
    <WITH><PROPERTY name="TEMPLATE" source="#global"/>
    </WITH>
    <DO>
    <PROPERTY name="VALUE" source="Template/>
    </DO>
    </RULE>

    irgendwie mit der anderen Abfrage verknüpfen?

    <RULE>
    <SCHEDULE delay="0" id="A" service="FormDataValueService">
    <PARAM name="UID">
    <PROPERTY name=„Template_UID" source="#global"/>
    </PARAM>
    <PARAM name="UIDTYPE">
    <TEXT TEMPLATESTORE</TEXT>
    </PARAM>
    <PARAM name="FIELD"> ????? </PARAM>
    </SCHEDULE>
    <DO><PROPERTY name="VALUE" source="st_templateSite“/> </DO>

    </RULE>

    Viele Grüße v.
    Ralf

    0
  • Zendesk API User
    Author: hoebbel - 11/28/2022 16:05

    Hallo Ralf,

    sorry, Du hast natürlich Recht. Das Template direkt zu übernehmen geht so nicht. der ValueService ist nur dafür gedacht, gespeicherte Daten aus einem anderen Kontext auszulesen.

    Du brauchst also auch auf Seitenebene eine versteckte Eingabekomponente, die entweder (mittels preset="copy") einen entsprechenden Standardwert bekommt oder über eine Regel den Namen der Vorlage [ich würde wahrscheinlich über das preset="copy" gehen, dann spart man sich die Regelausführung.

    Der Wert kann dann über den Valueservice in eine versteckte Eingabekomponente auf Absatzebene übernommen werden:

    <RULE> <SCHEDULE delay="0" id="Zunftlernpunkte" service="FormDataValueService"> <PARAM name="UID"> <PROPERTY name="PAGE_UID" source="#global"/> </PARAM> <PARAM name="UIDTYPE"> <TEXT>PAGESTORE</TEXT> </PARAM> <PARAM name="FIELD"> <TEXT>pt_template</TEXT> </PARAM> <PARAM name="LANGUAGE"> <PROPERTY name="MASTER" source="#global"/> </PARAM> </SCHEDULE> <DO> <PROPERTY name="VALUE" source="st_template"/> </DO> </RULE>

    Nicht die schönste aller Lösungen

    Hier kommt es drauf an, wie oft ihr so etwas braucht. Wenn es die Anforderung für mehrere Absatztemplates gibt, würde ich darüber nach denken, einen passenden ValueService zu schreiben, der anhand des aktuellen Absatztemplates entscheidet, was dargestellt werden soll. Der Rückgabewert müsst dann ein Boolean sein, der direkt zum Ein/Ausblenden der entsprechenden Eingabekomponenten genutzt werden kann.

    Ist es voraussichtlich nur dieser eine Anwendungsfall, würde ich es bei den zwei (oder drei) Regeln lassen - auch wenn die nicht so schönlesbar sind

    Viele Grüße
    Holger

    0
  • Zendesk API User
    Author: Juncus - 11/29/2022 10:08

    Hallo Holger,

    vielen Dank für deine Tips.
    Du hast mir sehr geholfen.

    Viele Grüße v.
    Ralf

    0

Please sign in to leave a comment.