Module-Erstellung - Wie funktioniert 'CUSTOM'

#1
Hallo zusammen,

Ich bräuchte bitte ein wenig Unterstützung bei der Erstellung eines Moduls:

Ich möchte gerne Externe-Daten im ISPconfig 3(.0.4) in einer Tabelle anzeigen lassen. Ich bin dabei über die einstellung "CUSTOM" (statt "SQL") gestoßen das mit einer Klasse oder Funktion gefüttert werden kann. Aber was / wie muss zurückgegeben werden damit es ISPconfig auswerten kann?

Ich wär um Unterstützer sehr Dankbar :)!
 

Till

Administrator
#2
Die Custom Datasource gibt ein ein assoziatives Array zurück.

Schau am besten mal in die Datei interface/lib/classes/custom_datasource.inc.php. Dort stehen alle custom datasoirces des Systems drin. Du legst am besten eine neue Datei im gleichen verzeichnis für Deine custom datasources an, die kann dann direkt aus der Form datei angesprichen werden, indem Du "custom_datasource" durch den Namen Deiner datei ersetzt.

Du kannst ja mal in die Form datei interface/web/sites/form/webdav_user.tform.php schauen, dort wird eine custom datasource eingesetzt.
 
#3
Hallo,

Vielen Dank! Das hat mir schon um etwas weiter geholfen. Wenn ich das nun aber richtig interpretiere kann ich damit keine komplette Tabelle abrufen, sondern nur einzelne Felder?

Gibt es gegebenenfalls einen anderen Weg eine komplette (Standard)Tabelle zu füttern, ohne diese in die ISPconfig Datenbank zu laden?
 

Till

Administrator
#4
Vielen Dank! Das hat mir schon um etwas weiter geholfen. Wenn ich das nun aber richtig interpretiere kann ich damit keine komplette Tabelle abrufen, sondern nur einzelne Felder?
Richtig, bei der custom_datasource geht es ja um Quellen für Select Felder.

Gibt es gegebenenfalls einen anderen Weg eine komplette (Standard)Tabelle zu füttern, ohne diese in die ISPconfig Datenbank zu laden?
Ja, und zwar indem Du die Klasse zum Anzeigen der Liste wie bei allen Listen von listform_actions ableitetst und dann z.B. die Funktion getQueryString mit einer eigenen Funktion überschreibst (wenn Deine Daten auch in einer MySQL DB liegen) oder aber Du gleich die Hauptfunktion onLoad() überschreibst. Schau Dir mal die Klasse in der Datei listform_actions.inc.php an, ist an sich recht übersichtlich mit nur 160 Zeilen.
 
#5
Hallo,

Das hat mir massiv weitergeholfen. Leider ist die API die ich einbinden wollte viel zu langsam und lagere nun doch alles auf die MySQL-Datenbank ein.

Gibt es beim Abruf der SQL Datenbank ein vordefiniertes verfahren für z.B. "left join" in eine Tabelle ein zu fügen?
 

Till

Administrator
#6
Der normale Fall in ISPConfig ist ja eine Abfrage ohne Join. Du kannst aber jede beliebige SQL Query verwenden, indem Du die default getQueryString Funktion in Deiner abgeleiteten listform Klasse überschreibst und dort die SQL Abfrage zusammenbaust und den SQL string als Rückgabewert lieferst.
 
#7
Der Tread ist zwar schon älter aber ich hätte ein Frage als Ergänzung:

Oben Schreibst Du dass custom für Select Felder ist. Kann ich auch ein normales Feld damit füllen?, wenn ja wie sollte der return von myfunction aussehen. Ich kann zwar das Feld innerhalb der Funktion über das wordbook füllen aber direkt wäre es eleganter.

Code:
'Feld1' => array ( 
                'datatype'    => 'VARCHAR',
                'formtype'    => 'TEXT',
                'datasource'    => array (
                                        'type'    => 'CUSTOM',
                                        'class'=> 'own_class',
                                        'function'=> 'myfunction'
                                    ),
)
 

Werbung