Hallo zusammen,
ich scheitere an einem Parse Error bei der Nutzung von ReloadForm im Konfigurator und hoffe, ihr könnt mir einen Schubs in die richtige Richtung geben.
Ziel: Ein Select-Feld soll sich dynamisch füllen, sobald in einem SelectVariable-Feld eine Variable ausgewählt wird.
Problem: Sobald ich eine Variable auswähle, löst onChange: „ReloadForm“ aus und das Formular bricht mit Parse error: syntax error, unexpected end of file in /- on line 5 zusammen. Das deutet darauf hin, dass GetConfigurationForm() ein fehlerhaftes JSON zurückgibt, aber ich sehe den Fehler im Code einfach nicht.
Hier ist mein minimales Test-Setup, das den Fehler reproduziert:
form.json
{
"elements": [
{
"type": "SelectVariable",
"name": "SourceVariableID",
"caption": "Quell-Variable",
"onChange": "ReloadForm"
},
{
"type": "Select",
"name": "TriggerType",
"caption": "Auslöser-Art",
"options": []
}
]
}
module.php
<?php
declare(strict_types=1);
class DelayedEvent extends IPSModule
{
public function Create()
{
parent::Create();
$this->RegisterPropertyInteger('SourceVariableID', 0);
$this->RegisterPropertyInteger('TriggerType', 0);
}
public function ApplyChanges()
{
parent::ApplyChanges();
}
public function GetConfigurationForm()
{
$form = json_decode(file_get_contents(__DIR__ . '/form.json'), true);
$sourceID = $this->ReadPropertyInteger('SourceVariableID');
$options = [];
if ($sourceID > 0 && @IPS_ObjectExists($sourceID)) {
$options[] = ['label' => 'Variable ausgewählt!', 'value' => 1];
} else {
$options[] = ['label' => 'Bitte zuerst eine Variable wählen', 'value' => 0];
}
foreach ($form['elements'] as &$element) {
if (isset($element['name']) && $element['name'] === 'TriggerType') {
$element['options'] = $options;
break;
}
}
unset($element);
return json_encode($form);
}
}
Ich habe dazu einiges im Forum gelesen und auch in der Doku und komme leider selbst nicht auf den Trichter.
Was übersehe ich bei der korrekten Verwendung von ReloadForm in Kombination mit GetConfigurationForm?
Danke für eure Hilfe!