Form.json Button onclick: Funktion in module.php aufrufen

Ich bin gerade wieder an der Modulentwicklung und hänge schon wieder längere Zeit an einer Stelle.

Was ich machen möchte:
In der form.json einen Button definieren, sobald dieser gedrückt wird soll eine Funktion in der module.php ausgeführt werden.

Hierzu habe ich mir das DynamicLinkLabelTest-Modul angesehen und versucht die Lösung von dort in meinen Quelltext zu implementieren.

DynamicLinkLabelTest-Modul :

Aktuell klappt es bei mir noch nicht und ich erhalte auch folgenden Fehler, sobald ich den Button drücke: Parse error: syntax error, unexpected token „=“ in C:\Windows\System32- on line 3

form.json: (Auschnitt)

        {
            "type": "Button",
            "name": "DeleteWeeklySchedule",
            "caption": "Wochenplan löschen",
            "onClick": "RR_DeleteWeeklySchedule();"
        }

module.php: (Ausschnitt (Aktuell ist die Funktion zu testzwecken noch leer um es einfach zu halten))

public function DeleteWeeklySchedule()
{

}

module.json:
Hier ist das prefix RR gesetzt: „prefix“: „RR“,

Wo liegt der Fehler?

Da fehlt noch die Instanz-ID:

"onClick": "RR_DeleteWeeklySchedule($id);"

Tatsächlich, habe ich gerade hinzugefügt, die Fehlermeldung kommt aktuell immer noch.

Sobald ich die „onClick“-Zeile entferne, ist die Meldung weg.
Aktuell sehe ich aber keinen Fehler mehr in der Syntax.

form.json: (mit Instanz-ID)

        {
            "type": "Button",
            "caption": "Wochenplan löschen",
            "onClick": "RR_DeleteWeeklySchedule($id);"
        }

Hast du auch ein MC_ReloadModule() gemacht?

Probier mal

"onClick": "echo $id;",

und in einem Testskript

RR_DeleteWeeklySchedule(47111);

MC_ReloadModule() wurde durchgeführt.

Habs geändert von "onClick": "RR_DeleteWeeklySchedule($d);" auf "onClick": "echo $id;",
dasselbe verhalten.

Testskript:
RR_DeleteWeeklySchedule(15022);

Die ID ist von einer Instanz des Moduls. Meintest du so, oder?
Wenn ich das Skript ausführe, erhalte ich keine Fehlermeldung.

Es wirkt so, als wenn beim Aufbauen des Skripts ein Fehler kommt und der nicht in der onClick Funktion liegt. Kann es sein, dass du irgenwelche Elemente mit einem leeren Namen hast oder irgendwelche anderen merkwürdigen Namen, Sonderzeichen oder dergleichen?

Denn beim Klick auf den Button wird intern ein Skript generiert, welches zuerst alle Werte aus dem Formular in Variablen packt, also sowas wie:

$id = 12345;
$Name1 = 'TestWert';
...

Das unexpected token „=“ wirkt jetzt als wenn da beim Namen halt etwas nicht passt und er beispielsweise bei einem leeren String als Namen sowas generiert wie

$ = 42;

Und das ist natürlich kein gültiges PHP und führt somit zum Fehler.

An sowas in die Richtung hatte ich auch gedacht und habe schon verschiedene Bereiche aus der form.json entfernt und danach erneut mit MC_ReloadModule() geladen, aber es tritt immer wieder auf.

Ich habe jetzt mal alles aus dem „element-Bereich“ gelöscht bis auf den Button, dann tritt der Fehler nicht auf:

{
    "elements": [
        {
            "type": "Button",
            "name": "DeleteWeeklySchedule",
            "caption": "Wochenplan löschen",
            "onClick": "RR_DeleteWeeklySchedule($id);"
        }
    ],
    "actions": [
        {
            "type": "Label",
            "caption": "Dieses Modul wurde erstellt von:"
        }
    ],
    "status": []
}

Hier einmal das ganze form.json file:

{
    "elements": [
        {
            "type": "SelectVariable",
            "name": "ID-Aktor",
            "caption": "Aktor-ID (Auswahl der Soll-Temperatur Variable)"
        },
        {
            "type": "SelectVariable",
            "name": "Is-Temperature",
            "caption": "Sensor-ID (Ist-Temperatur)"
        },
        {
            "type": "Select",
            "name": "Weekly-Schedule-Selection", 
            "caption": "Wochenplanerstellung",
            "width": "600px",
            "options": [
                { "caption": "Kein Wochenplan / vorhandenen Wochenplan entfernen", "value": 0 },
                { "caption": "Wochenplan: Eine Gruppe: Gesamte Woche (Mo - So)", "value": 1 },
                { "caption": "Wochenplan: Zwei Gruppen: Arbeitstage (Mo - Fr) und Wochenende (Sa + So)", "value": 2 },
                { "caption": "Wochenplan: Sieben Gruppen: Eine Gruppe pro Tag", "value": 3 }
            ]
        },
        {
            "type": "Button",
            "name": "DeleteWeeklySchedule",
            "caption": "Wochenplan löschen",
            "onClick": "RR_DeleteWeeklySchedule($id);"
        }
    ],
    "actions": [
        {
            "type": "Label",
            "caption": "Dieses Modul wurde erstellt von:"
        }
    ],
    "status": []
}

Entferne die Bindestriche aus dem Namen oder nutze Unterstriche.
Michael

1 „Gefällt mir“

Das wars!

Die Bindestriche wurden aus allen Namen in der form.json entfernt,
jetzt tritt der Fehler nicht mehr auf.