[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • xForm - Table Manager - Datensatz dublizieren / kopieren
Seite 1 von 1

xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 10. Jun 2013, 15:41
von brandes-webdesign
Hallo Zusammen,
weiß jemand, ob und wie man in einer mit den xForm und dem Table Manager erstellten Tabelle einen Datensatz dublizieren / kopieren kann.

Folgendes Problem:
Ich bin am Erstellen einer Wein-Webseite, wo die Weine mit Hilfe des "Table Manager" erfasst und gepflegt werden. Es sind insg. einige dutzend Werte, die erfasst werden. Da einige Weine sehr änhlich sind, wäre einen Kopierfunktion sehr hilfreich. Ich bräuchte dann nur noch die paar unterschiedlichen Werte ändern und würde mir somit unzähliche Klicks sparen.

Weiß jemand ob es so einen Kopier-/Dublizier-Funktion gibt ?

Vielen Dank für Eure Hilfe
Mirco

Re: xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 10. Jun 2013, 17:46
von Xong
Hi Mirco,

die Funktion gibt es nicht. Kann man aber leicht nachbauen. Ich würde die Tabelle erweitern, so dass du neben jedem Datensatz einen Duplizieren-Link hast.

Das Prinzip, wie du den Link einfügst, hab ich hier beschrieben: http://www.redaxo.org/de/forum/post105995.html#p105995

Re: xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 10. Jun 2013, 18:53
von brandes-webdesign
Hallo xong,
vielen Dank für Deine schnelle Antwort.
Mit dem Link von Dir werde ich dann denke ich weiter kommen.
Mirco

Re: xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 13. Nov 2013, 12:36
von darwin
Hi,
ich habe das soeben gut gebrauchen können.
Danke XONG für den Ansatz. Hier mein EP zum kopieren von Datensätzen
in einer xForm Tabelle:

Code: Alles auswählen

function rr_extended_list($_params)
{
  global $REX, $I18N;
  
  if(rex_get('func') == 'duplicate' AND ($id = rex_get('data_id', 'int')))
  {
    
    $sql = rex_sql::factory();
    # $sql->debugsql = TRUE;
    $sql->setTable($_params['subject']->params['table_name']);
    $sql->setWhere('id='.$id);
    $sql->select('*');
    
    if($sql->getRows())
    {
         $fields = $sql->getFieldNames();
         $iSql = new rex_sql;
         # $iSql->debugsql = TRUE;
         $iSql->setTable($_params['subject']->params['table_name']);
         
         foreach ($fields as $field) {
             if ($field != 'id') {
                 $iSql->setValue($field, mysql_real_escape_string($sql->getValue($field)));
             }
         }
         
         $iSql->insert();
    }
      
    header('Location: '.str_replace('&', '&', $_params['subject']->getUrl()));
    exit;
  }
  
  $_params['subject']->removeColumn('duplicate');
  $_params['subject']->addColumn('duplicate', '', 50, array('<th class="duplicate">###VALUE###</th>','<td>###VALUE###</td>'));
  $_params['subject']->setColumnFormat('duplicate' ,'custom', create_function(
    '$params',
    '$list = $params["list"];
     return \'<a href="\'.$list->getUrl(array("func" => "duplicate")).\'&data_id=###id###">kopieren</a>\';'
  ));
}
rex_register_extension('XFORM_DATA_LIST', 'rr_extended_list');
Der größte Haken dabei war das hier:

Code: Alles auswählen

 return \'<a href="\'.$list->getUrl(array("func" => "duplicate")).\'&data_id=###id###">kopieren</a>\';'
da es den ###id### im getUrl "wahrscheinlich" via Outputfilter zerlegt,
habe ich die ###id### hinten einfach rangehängt.

Code: Alles auswählen

\'&data_id=###id###">
grz. Chris

Re: xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 13. Nov 2013, 13:02
von Oliver.Kreischer
Hey Chris,

guck mal. Vielleicht kannst Du das mal da hin schreiben:

https://github.com/dergel/redaxo4_xform/issues/170

LG
Oliver

Re: xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 3. Feb 2014, 15:47
von darwin
Hi,
für alle die noch eine Status-Funktion (on-/offline) in der
xForm Liste / Tabelle benötigen:

Voraussetzung:
Ihr habt im Tabellen-Manager ein Feld "active" mit drin
>> emptyname >> Name: active

Kopiert Euch den Code z.B. in die config.inc.php des xForm AddOns

Code: Alles auswählen

#
# Extension zum setzen des status on-/offline
# !!! via xForm table-manager erst ein Feld "emptyname" mit dem Namen "active" setzen !!!
#
function rr_extended_list_STATUS($_params)
{
    global $REX, $I18N;
    
    $sql = rex_sql::factory();
    $sql->setTable($_params['subject']->params['table_name']);
    $sql->select('*');
    
    $fields = $sql->getFieldNames();
    $field_active = false;
    
    foreach($fields as $id => $fieldname)
    {
        if($fieldname == 'active')
        {
            $field_active = true;
        } else {
            $field_active = false;
        }
    }

    if($field_active)
    {
        if(rex_get('func') == 'status' AND ($id = rex_get('data_id', 'int')))
        {
            $sql = null;
            $sql = rex_sql::factory();
            $sql->setTable($_params['subject']->params['table_name']);
            $sql->setWhere('id='.$id);
            $sql->select('*');

            if($sql->getRows())
            {
                $old_status = rex_get('old_status','int','0');

                if ($id > 0)
                {
                    $new_status = $old_status == '1' ? '0' : '1';
                
                    $uSql = rex_sql::factory();
                    $uSql->setTable($_params['subject']->params['table_name']);
                    $uSql->setValue('active', (int) $new_status);
                    $uSql->setWhere('id='.$id);
                    $uSql->update();
                }
                $func = '';
                unset($old_status);
            }
            
            header('Location: '.str_replace('&', '&', $_params['subject']->getUrl()));
            exit;
        
        }
        
        $_params['subject']->removeColumn('status');
        $_params['subject']->addColumn('status', '', 50, array('<th class="status">On-/Offline</th>','<td>###VALUE###</td>'));
        $_params['subject']->setColumnParams('active', array ('func' => 'status', 'old_status' => '###active###', 'data_id' => '###id###'));
        $_params['subject']->setColumnFormat('status' ,'custom',
        create_function( '$params',
                        '$list = $params["list"];
                        
                        if ($list->getValue("active") == "1") {
                            $params = array("toggle" => "0"); 
                        } else {
                            $params = array("toggle" => "1"); 
                        }
                        
                        
                        # $return \'<a href="\'.$list->getUrl(array("func" => "status")).\'&data_id=###id###">kopieren</a>\';
                        $return = $list->getColumnLink("active", $list->getValue("active") != "1" ? "<span style=\'color: #b30000;\'><strong>Offline</strong></span>" : "<span style=\'color: green;\'><strong>Online</strong></span>", $params);
                        return $return;'));
    }
    
}

rex_register_extension('XFORM_DATA_LIST', 'rr_extended_list_STATUS');
grz. Chris

Re: xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 4. Feb 2014, 19:02
von NGW
Vielen Dank Chris,

genau sowas kann ich gerade gebrauchen :)

Gruß
Nico

Re: xForm - Table Manager - Datensatz dublizieren / kopieren

Verfasst: 25. Nov 2016, 19:38
von darwin
Hi,
falls jemand noch an R4 schraubt und ggf mal eine xForm tabelle / Listen Ausgabe anders sortieren haben möchte, hier ein Ansatz:

Code: Alles auswählen

 function rr_sort_list($_params)
    {
        if($_params['subject']->params['table_name'] == "rex_releases") {
            $_params['subject']->sql->setQuery("SELECT * FROM rex_releases ORDER BY release_date DESC");
        }
    }
    rex_register_extension('XFORM_DATA_LIST', 'rr_sort_list');
grz. Chris