Guten Morgen,
nachdem ich mir die Umsetzung in anderen Komponenten dazu angesehen habe, habe ich nun versucht das Problem zu lösen.
Mein Controller sieht folgendermaßen aus:
PHP-Code:
class CommunityController extends JController {
function __construct() {
parent::__construct() ;
$this->registerTask('formsent' , 'sentform');
}
public function sentform() {
JRequest::checkToken() or jexit( 'Invalid Token' );
$user = JFactory::getUser();
$userid = JRequest::getVar( 'id', 0, 'post', 'int' );
if ($user->get('id') == 0 || $userid == 0 || $userid <> $user->get('id')) {
JError::raiseError( 403, JText::_('Access Forbidden') );
return;
}
$return = JURI::toString();
//holt das komplette Request-Array
$post = JRequest::get( 'post' );
$post["name"] = JRequest::getVar('addname', '', 'post', 'string') ;
$post["interest"] = JRequest::getVar('addinterest', '', 'post', 'string') ;
$model->getModel('edit') ;
if ($model->store($post)) {
$msg = JText::_( 'Your settings have been saved.' );
return true ;
} else {
//$msg = JText::_( 'Error saving your settings.' );
$msg = $model->getError();
}
$this->setRedirect( $return, $msg );
}
Mithilfe von JController::registerTask() habe ich einen neuen Task names "formsent" registriert und die entsprechende Funktion(sentform) eingetragen, die bei auftreten des Task "formsent" aufgerufen werden soll.
Mein Model (edit.php) :
PHP-Code:
class CommunityModelEdit extends JModel {
public function store($data) {
$table = $this->getTable('edit');
if (!$table->bind($data)) {
$this->setError($this->_db->getErrorMsg());
return false;
}
if (!$table->check()) {
$this->setError($table->getError());
return false;
}
if (!$table->save()) {
$this->setError($table->getError());
return false;
}
return true ;
}
//Für das simple Laden der Einträge aus der Datenbank:
function loadData($ident) {
$table = $this->getTable('edit') ;
$table->load($ident);
return $table ;
}
}
Die View-Datei:
PHP-Code:
class CommunityViewEdit extends JView {
function display($tpl = null) {
$user = JFactory::getUser();
$model = $this->getModel();
$formdetails = $model->loadData($user->id) ;
$this->assignRef('formdetails', $formdetails);
parent::display($tpl);
}
}
Ich habe mir gedacht, dass ich hier nichts mehr ändern muss, weil die Seite ja nochmal neu geladen werden soll nach dem Absenden des Formulars einfach nur die (neuen) Daten aus der Datenbank laden soll.
Und zu guter Letzt noch das Formular:
PHP-Code:
<?php
// JURI-Objekt laden
$uri = JFactory::getURI();
?>
<form action="<?php echo $uri->toString() ;?>" method="post" name="showUserfields" class="form-validate">
<table cellpadding="4" cellspacing="1" border="0" width="100%">
<tr>
<td width="10%"><?php echo JText::_( 'Name:' ); ?>:</td>
<td><input class="inputbox" type="text" size="50" value="<?php echo $this->formdetails->name ; ?>" name="addname" /></td>
</tr>
<tr>
<td width="10%"><?php echo JText::_( 'Interessen: '); ?></td>
<td><input class="inputbox" type="text" size="50" maxlenght="250" value="<?php echo $this->formdetails->interest ; ?>" name="addinterest" /></td>
</tr>
<tr>
<td width=10%"><?php echo JText::_( 'Ausgabe der Variablen' ); ?></td>
<td><textarea rows="20" cols="60" value="<?php echo var_dump($this->formdetails) ;?>" />
</textarea></td>
</tr>
<tr><td><input type="submit" value="Speichern" name="absenden" /></td><tr>
<tr><td><input type="reset" value="Felder resetten" /></td></tr>
<tr><td><input type="hidden" name="active" /></td></tr>
<tr><td><input type="hidden" name="option" value="com_community" /></td></tr>
<tr><td><input type="hidden" task="formsent" /></td></tr>
</table>
</form>
Es funktioniert nur leider nicht, allerdings auch kein Fehler angezeigt.
(Fehler berichten: Maximum im Backend)
Ich könnte mir vorstellen, dass das JTable-Objekt nicht weis, in welche Reihe innerhalb der Tabelle die neuen Daten eingetragen werden müssen. Irgendwie müsste ja die Id des Benutzer berücksichtigt werden, wie bei JTable::load() im Model.
Vielen Dank im Voraus
Gruß Thylo
Lesezeichen