[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Addon: Datensatz speichern => Trigger?
Seite 1 von 1

Addon: Datensatz speichern => Trigger?

Verfasst: 22. Apr 2016, 13:00
von dpf_dd
Hallo Community,

kleines Problem, bei dem uich gerade keine Idee zur Umsetzung habe:

In einem AddOn wird der User beim Erstellen eines neuen Datensatzes per Input-Feld nach dem Namen einer zu erstellenden SQL-Tabelle gefragt:

Code: Alles auswählen

### SQL-Tabelle erstellen
$field = &$form->addTextField('SQL_TABELLE');
$field->setLabel('<strong>SQL-Tabelle</strong>'); 
Wie bekomme ich es jetzt hin, dass zusätzlich zur Eingabe der Variable beim Speichern des Datensatzes die SQL-Tabelle auch direkt mit angelegt wird? Ich weiß zwar, dass ich zusätzliche Variablen mit

Code: Alles auswählen

$form->addParam('CREATE_SQL', $create_sql); 
durchschleifen kann. Aber leider ist die Variable $create_sql ja leer, denn der Wert wird ja erst vom User eingegeben und ist im Vergleich zur ID des Datensatzes noch nicht beim Aufruf vorhanden.

Zusammengefasst:
Wie kann ich ein Skript triggern, was mir beim Abspeichern eines neu zu erstellenden Datensatzes eine SQL-Tabelle erstellt? Wie kann ich die Usereingabe abfangen und mein Skript triggern?

Vielen Dank und einen schicken Rest-Freitag :)
dpf_dd

Re: Addon: Datensatz speichern => Trigger?

Verfasst: 22. Apr 2016, 18:56
von Sysix
Hallo,

du kannst die rex_form klasse erben und dir dein eingenes Konstrukt bauen oder du benutzt die extension REX_FORM_SAVED:

https://github.com/redaxo/redaxo4/blob/ ... .php#L1078

Ich hoffe mal, dass du selbst in der Lage bist beide Varianten umzusetzen.

Gruß Sysix

Re: Addon: Datensatz speichern => Trigger?

Verfasst: 26. Apr 2016, 01:21
von dpf_dd
Oha, jo das klappt :) Danke Sysix für deinen Input!
Leider ist der EP -->HIER<--- gar nicht gelistet!? Egal, funktioniert jedenfalls...

Im Addon-Ordner einen functions-Ordner erstellen und darin eine functions.inc.php mit der gewünschten Funktion speichern, die nach dem Speichern des Formulars ausgeführt werden soll, also z.B:

Code: Alles auswählen

function your_function($subject)
{
    global $REX;
    $values = array();
    $form = $subject['form'];
    $elements = $form->getFieldsetElements();
    foreach($elements as $name => $element)
    {
        foreach($element as $field)
        {
            $values[$field->getFieldName()] = $field->getValue();
        }
    }
    ### jetzt sind die gespeicherten Werte des Formulars im Array $values enthalten und die Funktion kann weitergeführt werden, je nachdem was man halt machen will
 
In die config.php des Addons:

Code: Alles auswählen

require($REX['INCLUDE_PATH'] . '/addons/your_addon/functions/functions.inc.php');
rex_register_extension('REX_FORM_SAVED', 'your_function');
 

Re: Addon: Datensatz speichern => Trigger?

Verfasst: 26. Apr 2016, 09:22
von Ingo

Code: Alles auswählen

rex_register_extension('REX_FORM_SAVED', function($params) use ($REX) {
    // ...
    return $params['subject'];
}); 
Für überschaubare Funktionen.

Re: Addon: Datensatz speichern => Trigger?

Verfasst: 26. Apr 2016, 14:09
von dpf_dd
Danke Ingo, aber kannst du kurz erklären, was das "use ($REX)" bezweckt? Ist das quasi das Pendant zum "global $REX" meiner ausgelagerten Funktion, also nur eine andere Schreibweise?

Ich für meinen Teil versuche Funktionen und Klassen immer auszulagern, aber am Ende muss natürlich jeder selbst wissen, was einem besser gefällt 8)

Re: Addon: Datensatz speichern => Trigger?

Verfasst: 26. Apr 2016, 14:39
von Ingo
dpf_dd hat geschrieben:Danke Ingo, aber kannst du kurz erklären, was das "use ($REX)" bezweckt? Ist das quasi das Pendant zum "global $REX" meiner ausgelagerten Funktion, also nur eine andere Schreibweise?
Ja, allerdings mit einem Unterschied: die Funktion bekommt eine Kopie von $REX mit den Werten, die zum Zeitpunkt der Funktionsdefinition drin sind. Sprich bei Aufruf der Funktion können andere Werte in $REX drinstehen. http://php.net/manual/en/functions.anonymous.php
dpf_dd hat geschrieben:Ich für meinen Teil versuche Funktionen und Klassen immer auszulagern, aber am Ende muss natürlich jeder selbst wissen, was einem besser gefällt 8)
Deshalb schrieb ich ja "Für überschaubare Funktionen" ;)
Für sowas zb (wobei hier $REX als Referenz übergeben wird):

Code: Alles auswählen

rex_register_extension('ADDONS_INCLUDED', function () use (&$REX) {
    $REX['ADDON']['xform']['templatepaths'][] = $REX['INCLUDE_PATH'].'/addons/iw_xform/templates/';
    $REX['ADDON']['xform']['classpaths']['value'][] = $REX['INCLUDE_PATH'].'/addons/iw_xform/classes/value/';
    $REX['ADDON']['xform']['classpaths']['validate'][] = $REX['INCLUDE_PATH'].'/addons/iw_xform/classes/validate/';
    $REX['ADDON']['xform']['classpaths']['action'][] = $REX['INCLUDE_PATH'].'/addons/iw_xform/classes/action/';
});