rex_list Datensatz duplizieren
IngoWinter opened this issue · 3 comments
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;
}
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.
Das ist kreativ. Hat bei mir allerdings gerade nicht funktioniert, ich vermute dein Formular ist anders aufgebaut.
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.