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

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
dpf_dd
Beiträge: 151
Registriert: 20. Dez 2007, 14:07

Addon: Datensatz speichern => Trigger?

22. Apr 2016, 13:00

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

Sysix
Beiträge: 101
Registriert: 23. Sep 2014, 15:08

Re: Addon: Datensatz speichern => Trigger?

22. Apr 2016, 18:56

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

dpf_dd
Beiträge: 151
Registriert: 20. Dez 2007, 14:07

Re: Addon: Datensatz speichern => Trigger?

26. Apr 2016, 01:21

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');
 

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: Addon: Datensatz speichern => Trigger?

26. Apr 2016, 09:22

Code: Alles auswählen

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

dpf_dd
Beiträge: 151
Registriert: 20. Dez 2007, 14:07

Re: Addon: Datensatz speichern => Trigger?

26. Apr 2016, 14:09

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)

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: Addon: Datensatz speichern => Trigger?

26. Apr 2016, 14:39

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/';
}); 

Zurück zu „Allgemeines [R4]“