Daten in einem AddOn verarbeiten

Problemstellung

Wie kann ich Daten in einem Addon als Tabelle ausgeben und die einzelen Datensätze bearbeiten?

Lösung

Über rex_list und rex_form können Inhalte aus Datenbank-Tabellen ausgegeben und über ein Formular verarbeitet werden. Im folgenden Beispiel soll die Verwendung dieser beiden Klassen einen Einstieg zeigen.

Folgende Zeilen werden in der Datei pages/index.inc.php erstellt.

<?php

$debug = false;
$list = new rex_list('SELECT id, vorname, nachname, firma, status FROM rex_addon_testaddon',10000, '', $debug);
$list->show();

?>

Hier wird eine Tabelle ausgegeben, die über mittels eines mySQL-Selects alle enthaltenen Datensätze ausgibt.
Die Tabellenüberschriften entsprechen dabei den Spaltennamen aus dem SELECT.

Über die Funktion setColumnLabel können Tabellenüberschriften konvertiert werden:

REX_LIST

//setColumnLabel('spalte', "Bezeichnung für Spalte");
$list->setColumnLabel('vorname', "Vorname");

Für die Bearbeitung eines Datensatzes kann ein Spaltenwert (Spalte vorname) als Link ausgeben werden. Dabei werden zwei Parameter übergeben (func=edit und id=Wert Spalte id):

$list->setColumnParams('vorname', array('func' => 'edit', 'id' => '###id###'));

Über addColumn() können weitere Spalten an die Ausgaben der Tabelle gefügt werden. Hier wird in die neue Spalte ein Bild eingefügt und verlinkt.

<?php


$debug = false;
$list = new rex_list('SELECT id, vorname, nachname, firma, status FROM rex_addon_testaddon',10000, '', $debug);

//Spaltenüberschriften konvertieren
$list->setColumnLabel('id', "ID");
$list->setColumnLabel('vorname', "Vorname");
$list->setColumnLabel('nachname', "Name");
$list->setColumnLabel('firma', "Firma");
$list->setColumnLabel('status', "Status");

//Spalte mit Icon und Link hinzufügen
$imgHeader = '<a href="'. $list->getUrl(array('func' => 'add')) .'"><img src="media/document_plus.gif" alt="add" title="add" /></a>';

$list->addColumn($imgHeader,'<img src="media/document.gif" alt="Details" title="Details" />', 0, array('<th class="rex-icon">###VALUE###</th>','<td class="rex-icon">###VALUE###</td>'));

$list->setColumnParams ( $imgHeader, array('func' => 'edit', 'id' => '###id###') );

//Link auf Spalte, Übergabe Parameter func und id = Wert Spalte id
$list->setColumnParams('vorname', array('func' => 'edit', 'id' => '###id###'));


//Ausgabe
$list->show();

?>

REX_FORM

Mit rex_form kann ein Formular erzeugt werden, dessen Elemente mit den Werten eines Datensatzes gefüllt werden können.

rex_form($tableName, $fieldset, $whereCondition, $method = 'post', $debug = false)

Die Formularelemente können über Funktionen wie

  • addTextField
  • addReadOnlyTextField
  • addTextAreaField
  • addSelectField
  • addMediaField
  • addMedialistField
  • addHiddenField

ausgegeben/definiert werden.

Über $whereCondition kann auf spezielle Datenstätze zugegriffen werden

/*
Formular mit SELECT auf Tabelle rex_addon_testaddon erzeugen
Datensatz lesen, dessen Spalten-Wert $id ist
Formular wird per POST versand
*/

$form = rex_form::factory("rex_addon_testaddon", "Details", "id=".$id, 'post', $debug);

//Textfeld mit Spalten-Wert vorname und Label erstellen
$field = &$form->addTextField('vorname');
$field->setLabel("Vorname");

//Textfeld mit Spalten-Wert nachname und Label erstellen
$field = &$form->addTextField('nachname');
$field->setLabel("Nachname");

//Textfeld mit Spalten-Wert firma und Label erstellen
$field = &$form->addTextField('firma');
$field->setLabel("Firma");

//Auswahlliste mit 2 Einträgen für die Spalte status
$field =& $form->addSelectField('status');
$field->setLabel("Status");
$select =& $field->getSelect();
$select->setSize(1);
$select->addOption("Online",1 );
$select->addOption("Offline", 0 );
$select->setAttribute('style','width:50%');

if($func == 'edit') $form->addParam('id', $id);

//rex_form ausgeben
$form->show();

Am Ende des Formulars werden drei Schalftlächen ausgeben: Speichern, Übernehmen, Löschen.

<?php

$func = rex_request('func', 'string');
$id = rex_request('id', 'int');

$debug = true;

if ($func == ''){

$list = new rex_list('SELECT id, vorname, nachname, firma, status FROM rex_addon_testaddon',10000, '', $debug);

//Spaltenüberschriften konvertieren
$list->setColumnLabel('id', "ID");
$list->setColumnLabel('vorname', "Vorname");
$list->setColumnLabel('nachname', "Name");
$list->setColumnLabel('firma', "Firma");
$list->setColumnLabel('status', "Status");

//Spalte mit Icon und Link hinzufügen
$imgHeader = '<a href="'. $list->getUrl(array('func' => 'add')) .'"><img src="media/document_plus.gif" alt="add" title="add" /></a>';

$list->addColumn($imgHeader,'<img src="media/document.gif" alt="Details" title="Details" />', 0, array('<th class="rex-icon">###VALUE###</th>','<td class="rex-icon">###VALUE###</td>'));

$list->setColumnParams ( $imgHeader, array('func' => 'edit', 'id' => '###id###') );

//Link auf Spalte, Übergabe Parameter func und id = Wert Spalte id
$list->setColumnParams('vorname', array('func' => 'edit', 'id' => '###id###'));


//Ausgabe
$list->show();



}elseif($func == 'edit'){



$form = rex_form::factory("rex_addon_testaddon", "Details", "id=".$id, 'post', $debug);

$field = &$form->addTextField('vorname');
$field->setLabel("Vorname");

$field = &$form->addTextField('nachname');
$field->setLabel("Nachname");

$field = &$form->addTextField('firma');
$field->setLabel("Firma");

$field =& $form->addSelectField('status');
$field->setLabel("Status");
$select =& $field->getSelect();
$select->setSize(1);
$select->addOption("Online",1 );
$select->addOption("Offline", 0 );
$select->setAttribute('style','width:50%');

if($func == 'edit') $form->addParam('id', $id);

$form->show();


}

?>