Search the FirstSpirit Knowledge Base
Hallo Community,
ich versuche mit folgender Regel in Abhängigkeit zum ausgewählten Wert einer CMS_INPUT_RADIOBUTTON-Komponente (ptEventType) die CMS_INPUT_TEXT-Komponente (ptTitle) required zu setzen, bzw. nicht (wenn ptEventType = child, dann nicht required).
Mit folgender Regel klappt das rein visuell im WebEdit perfekt (keine Warnhinweise mehr) - beim Abspeichern kommt allerdings die Meldung, dass nicht gespeichert werden konnte, da ptTitle nicht ausgefüllt wurde. Der JavaClient setzt das Feld (natürlich) immer auf required.
<ON_SAVE>
<IF>
<EQUAL>
<PROPERTY source="#global" name="LANG"/>
<TEXT>DE</TEXT>
</EQUAL>
</IF>
<WITH>
<OR>
<NOT>
<PROPERTY source="ptTitle" name="EMPTY"/>
</NOT>
<EQUAL>
<PROPERTY source="ptEventType" name="VALUE"/>
<TEXT>child</TEXT>
</EQUAL>
</OR>
</WITH>
<DO>
<VALIDATION>
<PROPERTY source="ptTitle" name="VALID"/>
<MESSAGE lang="*" text="Bitte tragen Sie eine Überschrift für diesen Artikel ein."/>
</VALIDATION>
</DO>
</ON_SAVE>
Sobald ich den IF-Passus gegen folgenden ersetze, reagiert der WebEdit wie er soll und im JavaClient ist das Feld ptTitle wie erwartet nicht mehr required.
<IF>
<AND>
<EQUAL>
<PROPERTY source="#global" name="LANG"/>
<TEXT>DE</TEXT>
</EQUAL>
<PROPERTY source="#global" name="WEB"/>
</AND>
</IF>
Die gewünschte Lösung wäre, dass JavaClient und WebClient beide abhängig von ptEventType ptTitle required setzen. Bekomme ich das irgenwie hin?
Danke im Voraus,
beste Grüße,
Daniel
Hi Daniel,
Argl. Lesen hilft. Jetzt sehe ich auch erst das Problem
Du benutzt ja einen Radiobutton. Und der Wert eines Radiobuttons ist natürlich kein Text sondern eine Option. Daher schlägt ein Vergleich mit einem Text immer fehl. In Webedit funktioniert's, weil dort technisch bedingt eine Zeichenkette als Wert verwendet wird.
Richtig ist die Verwendung der Eigenschaft ENTRY statt VALUE (gilt übrigens auch für Combobox). Allerdings nur dann, wenn der Wert nicht aus der Datenbank geladen wird (dann hättest du verloren).
Und als Bonbon: deine Regel vom Anfang stimmt dann.
Gruß
Stefan
Hallo,
ich bin mir nicht sicher, ob ich das geschilderte Problem richtig verstanden habe.
Zur Erklärung für mich:
Es existieren die zwei Eingabekomponenten "ptEventType" (Radiobutton) und "ptTitle" (Textzeile).
Die Regel soll folgendes erwirken?
* Radiobutton nicht aktiviert -> Textzeile muss gefüllt werden
* Radiobutton aktiviert -> Textzeile muss nicht gefüllt werden
Stimmt das so?
Ich hab das jetzt nur mit zwei CMS_INPUT_TEXT-Komponenten probiert. Da funktioniert die folgende Regel für beide Clients:
<RULES>
<ON_SAVE>
<IF>
<EQUAL>
<PROPERTY source="#global" name="LANG"/>
<PROPERTY source="#global" name="MASTER"/>
</EQUAL>
</IF>
<WITH>
<NOT>
<AND>
<PROPERTY source="ptEventType" name="EMPTY"/>
<PROPERTY source="ptTitle" name="EMPTY"/>
</AND>
</NOT>
</WITH>
<DO>
<VALIDATION>
<PROPERTY source="ptEventType" name="VALID"/>
<MESSAGE lang="*" text="No content provided!"/>
</VALIDATION>
<VALIDATION>
<PROPERTY source="ptTitle" name="VALID"/>
<MESSAGE lang="*" text="No content provided!"/>
</VALIDATION>
</DO>
</ON_SAVE>
</RULES>
LG Michaela
Hallo Michaela,
nicht ganz:
Sobald ptEventType den Wert "child" annimmt, darf ptTitle nicht leer sein.
Das funktioniert wie gesagt wunderbar im WebEdit mit der meinigen Lösung, aber nicht im JavaClient. Ich bräuchte diese Lösung allerdings auf irgendeine Art und Weise für beide Clients.
LG,
Daniel
Hi Daniel,
ich mag mich ob deines Ziels täuschen, aber aktuell sagt deine Regel (if-Teil mal außen vor, denn der bestimmt nur, ob die Regel durchgeführt wird oder nicht), dass ptTitle dann valide ist, wenn es nicht leer ist oder ptEventType = child ist. Ich glaube aber, du willst ptEventType != child haben, oder?
Das wäre dann folgender Werteabschnitt:
<NOT>
<AND>
<PROPERTY source="ptTitle" name="EMPTY"/>
<EQUAL>
<PROPERTY source="ptEventType" name="VALUE"/>
<TEXT>child</TEXT>
</EQUAL>
</AND>
</NOT>
Regeln sollten prinzipiell in beiden Clients gleich funktionieren, ansonsten liegt möglicherweise ein Fehler vor.
Gruß
Stefan
Hi Stefan,
ich will ptEventType == child haben. Nur dann soll ptTitle "required" sein – sonst nicht.
ptTitle wird bei anderen Werten des Radiobuttons sogar ausgeblendet, was auch das Problem darstellen könnte.
So blende ich ptTitle aus (in Abhängigkeit eines weiteren Feldes):
<ON_EVENT>
<WITH>
<OR>
<NOT>
<PROPERTY source="#global" name="WEB"/>
</NOT>
<NOT>
<AND>
<EQUAL>
<PROPERTY source="ptType" name="VALUE"/>
<TEXT>event</TEXT>
</EQUAL>
<EQUAL>
<PROPERTY source="ptEventType" name="VALUE"/>
<TEXT>child</TEXT>
</EQUAL>
</AND>
</NOT>
</OR>
</WITH>
<DO>
<PROPERTY source="ptTitle" name="VISIBLE"/>
</DO>
</ON_EVENT>
Vielen Dank und Grüße zurück,
Daniel
Daniel Klimsa schrieb:
ich will ptEventType == child haben. Nur dann soll ptTitle "required" sein – sonst nicht.
Ja, genau das beschreibt die Logik, die ich oben angegeben habe.
Vielleicht mal umgangssprachlich: ptTitle ist dann ungültig, wenn es leer ist und wenn ptEventType child ist.
Folglich gilt:
Ich vermute mal, dein eigener Denkansatz führt dich ein wenig in die Irre. Es geht in der Regel nicht um "required", sondern um die Definition, wann der Zustand (also die Kombination der Werte in den Eingabekomponenten) gültig ist und wann nicht. Das "required" kommt durch das ON_SAVE hinzu, dass nämlich nur dann gespeichert werden kann, wenn ein gültiger Zustand erreicht ist.
Hoffe, das klärt es ein wenig.
Gruß
Stefan
Hi Stefan,
danke für Deine unendliche Geduld und natürlich liegst Du vollkommen richtig. 🙂
Allerdings habe ich bereits Michaela falsch geantwortet - es ist so, wie ich eingangs schrieb:
Nur wenn ptEventType == child, dann soll ptTitle nicht mit einer Fehlermeldung versehen werden - deshalb mein Lösungsansatz mit <or> (ptEventType hat mehrere Werte, bei deren Auswahl ptTitle nicht leer sein darf).
Wie muss ich die Regel schreiben, damit das so funktioniert?
Viele Grüße,
Daniel
P.S.: Ein eventueller gemeinsamer Kaffee geht dann mal auf mich. 😉
Hi Daniel,
Argl. Lesen hilft. Jetzt sehe ich auch erst das Problem
Du benutzt ja einen Radiobutton. Und der Wert eines Radiobuttons ist natürlich kein Text sondern eine Option. Daher schlägt ein Vergleich mit einem Text immer fehl. In Webedit funktioniert's, weil dort technisch bedingt eine Zeichenkette als Wert verwendet wird.
Richtig ist die Verwendung der Eigenschaft ENTRY statt VALUE (gilt übrigens auch für Combobox). Allerdings nur dann, wenn der Wert nicht aus der Datenbank geladen wird (dann hättest du verloren).
Und als Bonbon: deine Regel vom Anfang stimmt dann.
Gruß
Stefan
Hi Stefan,
wir müssen uns glaub ich alle nen Kaffee spendieren. ,-)
Danke für den Hinweis mit der zu verwendenden Eigenschaft "ENTRY" – muss ich die "TEXT"-Tags auch anpassen? Denn so komm ich nicht zum gewünschten Ergebnis, obwohl die Einträge nicht aus der DB kommen:
<ON_SAVE>
<IF>
<EQUAL>
<PROPERTY source="#global" name="LANG"/>
<TEXT>DE</TEXT>
</EQUAL>
</IF>
<WITH>
<OR>
<NOT>
<PROPERTY source="ptTitle" name="EMPTY"/>
</NOT>
<EQUAL>
<PROPERTY source="ptEventType" name="ENTRY"/>
<TEXT>child</TEXT>
</EQUAL>
</OR>
</WITH>
<DO>
<VALIDATION>
<PROPERTY source="ptTitle" name="VALID"/>
<MESSAGE lang="*" text="Bitte tragen Sie eine Überschrift für diesen Artikel ein."/>
</VALIDATION>
</DO>
</ON_SAVE>
Sorry, bin in der Doku nicht fündig geworden.
Grüße,
Daniel
Das sollte so funktionieren. Bitte gib mal die FS-Versionsnummer an und poste die Definition des Radiobutton.
Nebenfrage: Wozu machst du eigentlich die Einschränkung auf DE?
Gruß
Stefan