"onChange" im Konfigurationsformular

Hallo Leute,

stehe etwas auf dem Schlauch…

In dem Teil GetConfigurationForm() des Moduls soll ein Teil des Formulars dynamisch aufgebaut sein. Lediglich eine Herausforderung habe ich da noch zu bewältigen. Weil es in diesem Tel eigentlich ganz gut passt, habe ich hier eine Schleife, der vier Mal identische Abschnitte erzeugen soll:
$arrayElements = array(„type“ => „Select“, „name“ => „Function_“.$i, „caption“ => „Funktionsauswahl“, „options“ => $arrayOptions, „onChange“ => ‚IPS_RequestAction($id,„ChangeFunction“,$Function_0);‘ );

Wie man bei „name“ sieht setzt sich der Name der Variablen aus „Function_“ und dem aktuellen Wert des Zählers $i zusammen. Das funktioniert hier wie an anderer Stelle sehr gut. Lediglich im „onChange“ müsste diese „dynamische Benennung“ ja auch im letzten Teil rein (im Skriptausschnitt steht da $Function_0), hier scheitere ich aber an der richtigen „Formatierung“.
Weiß jemand Rat?

Joachim

Warum nutzt Du da IPS_RequestAction und nicht
https://www.symcon.de/service/dokumentation/befehlsreferenz/variablenzugriff/requestaction/

Probier es mal so:

$arrayElements = ['type' => 'Select', 'name' => 'Function_' . $i, 'caption' => 'Funktionsauswahl', 'options' => $arrayOptions, 'onChange' => 'IPS_RequestAction($id, "ChangeFunction", "Function_"' . $i .');')];

Weil RequestAction eine Variable benötigt, IPS_RequestAction nicht.
Michael

Hallo Leute,

vielen Dank für die Tipps, die zwar nicht direkt zum Ergebnis geführt hatten, aber den richtigen Impuls setzen.

Was ich zunächst übersehen hatte: Eigentlich brauchte ich nur zwei Information ($Ident, $Value) für RequestAction, sondern drei:
Welche Funktion innerhalb des RequestAction ($Ident) soll angesprochen werden?
Welche der vier Variablen im Konfigurationsformular wird geändert?
Welche neuen Wert hat diese ($Value)?

Ich habe das jetzt so gemacht (die wichtigsten Teile):
„onChange“ => ‚IPS_RequestAction($id,"ChangeFunction_‘.$i.’", $Function_’.$i.’);’

und im RequestAction dann:
case preg_match(’/ChangeFunction.*/’, $Ident) ? $Ident : !$Ident:

Danach zeihe ich mir die benötigten Information um entsprechend zu handeln.

Joachim

Dann kannst du auch in $Value ein Array übergeben. Da sparst du das preg_match.
Michael

Hallo Michael,

das hatte ich versucht, war aber nicht erfolgreich. Hast Du ein Beispiel dafür?

Joachim

ungetestet:

'onChange' => 'IPS_RequestAction($id,"ChangeFunction",["ObjectName"=>"Function_'.$i.'","NewValue"=>$Function_'.$i.']);'`

Ergibt bei Element 5:

  ["onChange"]=>
  string(93) "IPS_RequestAction($id,"ChangeFunction",["ObjectName"=>"Function_5","NewValue"=>$Function_5]);"

Objectname sollte dann der Name des Elements sein (Function_5) und NewValue sollte den neuen Wert enthalten.

Michael