FriendsOfREDAXO / tricks

Tipps und Tricks rund um REDAXO 5
https://friendsofredaxo.github.io/tricks/
MIT License
105 stars 33 forks source link

rex_list Datensatz duplizieren #267

Open IngoWinter opened 3 years ago

IngoWinter commented 3 years ago

rex_list holt die Daten aus der Tabelle rex_tabelle, deren erstes Feld id das autoincrement Feld ist. $func und $id werden vorab über rex_get geholt.

"duplizieren" Link einfügen:

$list->addColumn('duplicate', '<i class="rex-icon rex-icon-duplicate"></i> duplizieren', -1, ['', '<td class="rex-table-action">###VALUE###</td>']);
$list->setColumnParams('duplicate', ['func' => 'duplicate', 'id' => '###id###']);

Datensatz duplizieren:

if ($func == 'duplicate') {
    $db = rex_sql::factory();
    // https://stackoverflow.com/a/8077952
    $qry = '
    CREATE TEMPORARY TABLE tmp SELECT * FROM rex_tabelle WHERE id = ' . $id . ';
    ALTER TABLE tmp drop id; # autoincrement Feld löschen
    UPDATE tmp SET name = CONCAT("Kopie ",name); 
    # ggfs noch vorhanden unique Felder müssen über UPDATE angepasst werden
    INSERT INTO rex_tabelle SELECT 0,tmp.* FROM tmp;
    DROP TABLE tmp;
    ';
    $db->setQuery($qry);
    $db->closeConnection();
    $message .= rex_view::success('Datensatz dupliziert');
    $func = '';
    $id = 0;
}
christophboecker commented 3 years ago

Hallo Ingo

nur als Ergänzung / Alternative: ich verpasse der rex_list einen Button "Klonen", der im Prinzig eine Kopie des Edit-Buttons ist, aber mit func=add. Da die data_id unabhängig von add/edit wird aufgrund der data_id das Formular mit den Daten aus dem angegebenen Datensatz (vor)befülllt. Jippi. Und später erfolgt wegen func=add ein append statt update.

IngoWinter commented 3 years ago

Das ist kreativ. Hat bei mir allerdings gerade nicht funktioniert, ich vermute dein Formular ist anders aufgebaut.

christophboecker commented 3 years ago

Könnte sein, Ingo. rex_list kommt an x Ecken vor, die Datensatz-Nummer steht mal in oid, mal type_id, mal whatever. Ich hatte das mal im YForm-Umfeld mit einfachen Formularen (ohne-Subformular) so gebaut. Mit komplexen Formularen ist es etwas komplizerter.