Hallo Max,
In FS 5.2 wird es eine Erweiterung der Regeln geben, mit der man Werte in optionsbasierte Komponenten einfacher setzen kann.
Aktuell (FS 5.1) sollte folgendes helfen:
Zunächst die Definition von zwei zusätzlichen versteckten Comboboxen, analog zu ltTarget:
<CMS_INPUT_RADIOBUTTON name="ltTargetBlank" hidden="yes" useLanguages="no">
<ENTRIES>
<ENTRY value="_blank">
<LANGINFOS>
<LANGINFO lang="*" label="new window"/>
</LANGINFOS>
</ENTRY>
<ENTRY value="_self">
<LANGINFOS>
<LANGINFO lang="*" label="same window"/>
</LANGINFOS>
</ENTRY>
</ENTRIES>
<LANGINFOS>
<LANGINFO lang="*" label="Blank target"/>
</LANGINFOS>
</CMS_INPUT_RADIOBUTTON>
<CMS_INPUT_RADIOBUTTON name="ltTargetSame" hidden="yes" useLanguages="no">
<ENTRIES>
<ENTRY value="_blank">
<LANGINFOS>
<LANGINFO lang="*" label="new window"/>
</LANGINFOS>
</ENTRY>
<ENTRY value="_self">
<LANGINFOS>
<LANGINFO lang="*" label="same window"/>
</LANGINFOS>
</ENTRY>
</ENTRIES>
<LANGINFOS>
<LANGINFO lang="*" label="Same window"/>
</LANGINFOS>
</CMS_INPUT_RADIOBUTTON>
Bei diesen beiden Comboboxen per Vorgabewert je eine der beiden Werte eintragen (new window bei ltTargetBlank, same window bei ltTargetSame).
Dazu zwei Regeln, die - basierend auf dem ausgewohlten Wert in ltLinkReferenceType entweder den Wert (=VALUE) der einen oder der anderen versteckten Combobox in die eigentliche Box ltTarget kopieren:
<ON_EVENT>
<IF>
<EQUAL>
<PROPERTY source="ltLinkReferenceType" name="ENTRY" />
<TEXT>ext</TEXT>
</EQUAL>
</IF>
<WITH>
<PROPERTY source="ltTargetBlank" name="VALUE" />
</WITH>
<DO>
<PROPERTY source="ltTarget" name="VALUE" />
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<EQUAL>
<PROPERTY source="ltLinkReferenceType" name="ENTRY" />
<TEXT>int</TEXT>
</EQUAL>
</IF>
<WITH>
<PROPERTY source="ltTargetSame" name="VALUE" />
</WITH>
<DO>
<PROPERTY source="ltTarget" name="VALUE" />
</DO>
</ON_EVENT>
Einen kleinen Haken gibt es dann allerdings dann noch: Man kann nicht gezielt steuern, dass das Schreiben wirklich nur dann passiert wenn der Benutzer den Wert von ltLinkReferenceType ändert. Das kann dazu führen, dass wenn der Benutzer sich doch entscheidet der Vorgabe eben NICHT zu folgen, sein manuell gesetzter Wert wieder überschrieben wird wenn die Regel neu ausgewertet wird (z.B. beim Wechsel des Sprachreiters oder einem Sperren des Elementes).
Hier hilft dann ein zusätzliches Toggle "Ziel automatisch bestimmen", das man in den IFs abfragen kann (und mit dem man außerdem dann gleich das ltTarget nicht editierbar schalten sollte):
<CMS_INPUT_TOGGLE name="ltAutoTarget" type="radio" singleLine="no">
<LANGINFOS>
<LANGINFO lang="*" label="Auto target"/>
</LANGINFOS>
<OFF>
<LANGINFO lang="*" label="no"/>
</OFF>
<ON>
<LANGINFO lang="*" label="yes"/>
</ON>
</CMS_INPUT_TOGGLE>
...
<ON_EVENT>
<IF>
<AND>
<EQUAL>
<PROPERTY source="ltAutoTarget" name="VALUE" />
<TRUE/>
</EQUAL>
<EQUAL>
<PROPERTY source="ltLinkReferenceType" name="ENTRY" />
<TEXT>ext</TEXT>
</EQUAL>
</AND>
</IF>
<WITH>
<PROPERTY source="ltTargetBlank" name="VALUE" />
</WITH>
<DO>
<PROPERTY source="ltTarget" name="VALUE" />
</DO>
</ON_EVENT>
<ON_EVENT>
<IF>
<AND>
<EQUAL>
<PROPERTY source="ltAutoTarget" name="VALUE" />
<TRUE/>
</EQUAL>
<EQUAL>
<PROPERTY source="ltLinkReferenceType" name="ENTRY" />
<TEXT>int</TEXT>
</EQUAL>
</AND>
</IF>
<WITH>
<PROPERTY source="ltTargetSame" name="VALUE" />
</WITH>
<DO>
<PROPERTY source="ltTarget" name="VALUE" />
</DO>
</ON_EVENT>
<ON_EVENT>
<WITH>
<NOT>
<EQUAL>
<PROPERTY source="ltAutoTarget" name="VALUE" />
<TRUE/>
</EQUAL>
</NOT>
</WITH>
<DO>
<PROPERTY source="ltTarget" name="EDITABLE" />
</DO>
</ON_EVENT>
Hinweis: Der Vergleich mit TRUE ist hier bewusst gewählt - denn ein Toggle kann auch null liefern 😉
Viele Grüße
Michael