Moin prffrost,
meine beiden Hilfstabellen mit den jeweiligen Daten für die Optionen habe ich kurzerhand mit der Visforms 'Form Factory' erzeugt.
Mit der 'Form Factory':
- auf Reiter 'Individuelles Formular' gehen, Formular Titel und Namen vergeben, 2 Felder vom Typ 'Text' hinzufügen und den Button 'Formular und Felder erzeugen' gedrückt
- auf Reiter 'Beispieldaten' gehen und Button 'Daten erzeugen' drücken (einmal 10 Datensätze und einmal 20 Datensätze, weil wegen Unterschied)
Danach hatte ich passend zu den beiden neuen Formularen die beiden Visforms Daten-Tabellen '#__visforms_13' und '#__visforms_14'.
Mein steuerndes Feld hat weiterhin den Namen 'sql-6' und bekommt das folgende leicht abgewandelte SQL-Statement:
Code:
SELECT 'AntwortA' AS label, 'group_a' AS value
UNION ALL SELECT 'AntwortB' AS label, 'group_b' AS value
UNION ALL SELECT 'AntwortC' AS label, 'no-options' AS value;
Mein neues abhängiges Feld hat den Namen 'sql-8' und ist ebenfalls vom Typ 'Listbox Sql'.
Es zeigt nur dann die jeweiligen Optionen aus einer Hilfstabelle an, wenn in Feld 'sql-6' die Option 'AntwortA' oder 'AntwortB' ausgewählt ist.
Bei der Auswahl von 'AntwortA' enthält es 10 Optionen.
Bei der Auswahl von 'Antwortb' enthält es 20 Optionen.
Bei keiner Auswahl oder Auswahl 'AntwortC' enthält es keine Optionen.
Es hat das folgende SQL-Statement:
Code:
select F96 as label, F97 as value from jx_visforms_13 where 'group_a' in ${input:sql-6}
union select F100 as label, F101 as value from jx_visforms_14 where 'group_b' in ${input:sql-6};
Eine Zeilenschaltung ist nur zwischen den select-Teilen erlaubt, also unmittelbar vor dem 'union select'.
Innerhalb eines select-Teils darf keine Zeilenschaltung stehen.
Das Ganze geht auch mit Visforms-externen Hilfstabellen, die nicht durch Visforms erzeugt/gefüllt/editiert werden.
Zur Erzeugung habe ich kurzerhand folgende SQL-Statements in der Datenbank-Console meiner IDE genutzt:
Code:
drop table if exists antwort_a;
create table antwort_a (label text,value text);
insert into antwort_a (label, value) VALUES ('label-a-1', 'value-a-1'), ('label-a-2', 'value-a-2'), ('label-a-3','value-a-3');
drop table if exists antwort_b;
create table antwort_b (label text,value text);
insert into antwort_b (label, value) VALUES ('label-b-1', 'value-b-1'), ('label-b-2', 'value-b-2'), ('label-b-3','value-b-3');
Mein neues abhängiges Feld hat den Namen 'sql-9' und ist ebenfalls vom Typ 'Listbox Sql'.
Es hat das folgende SQL-Statement:
Code:
select label, value from antwort_a where 'group_a' in ${input:sql-6}
union select label, value from antwort_b where 'group_b' in ${input:sql-6};
Es geht bei meinen externen Hilfstabellen, die ja ausschließlich die Felder label und value enthalten, auch noch kürzer:
Code:
select * from antwort_a where 'group_a' in ${input:sql-6}
union select * from antwort_b where 'group_b' in ${input:sql-6};
Den where-Teil zur Auswahl der beiden 'Selects', habe ich unverändert von Feld 'sql-8' einfach übernommen.
Die Umbenennung der Feldnamen (as label, as value) entfällt in diesem Fall, da die Feld-Namen bereits passen.
Feld 'sql-8' und Feld 'sql-9' reagieren nun beide auf die Auswahl in Feld 'sql-6'.
Gruß, Ingmar