Hallo zusammen,
zunächst Danke für die vielen nützlichen Tipps...
Inzwischen habe ich mein Problem selbst gelöst und zwar mit jQuery. Allerdings musste ich dabei auf die Nutzung der Joomla API weitgehend verzichten. Deshalb weiß ich nicht, ob das besonders eleganter Stil ist, aber es funktioniert.
Das Modul sieht jetzt ungefähr so aus:
mod_mymodule.php ist die Grunddatei und sammelt die Daten ein:
PHP-Code:
defined('_JEXEC') or die("Restricted Area");
$index=JRequest::getVar('index'); //dieser Parameter hängt an dem aufrufenden Link
require_once(dirname(__FILE__).DS.'helper.php');
$datensatz=ModHelper::GetDataset($index);
...
Die helper.php:
PHP-Code:
defined('_JEXEC') or die("Restricted Area");
class ModHelper{
public function GetDataSet($idx){
$db= & JFactory::getDBO();
$query="SELECT testtext1,testtext2 FROM testtabelle WHERE testindex=".$idx;
$db->setQuery($query);
if(!$db->query()){
$error=$db->getErrorMsg();
}
else{
$result=$db->loadObjectList();
}
}
...
}
Die default.php im Verzeichnis /tmpl/
(Die jQuery-Bibliothek ist bereits geladen)
Code:
<script type="text/javascript">
<!--
function save_data(){
var xhrData=$("#testform").serialize();
var ErrorHandler= function(xhr,errmsg,err){
$("#result").text("Es ist ein Fehler aufgetreten! "+errmsg).css('display','block');
}
$.ajaxSetup({
cache:false,
error:ErrorHandler,
beforeSend: function(){
$("#result").html('<p>Speichern beginnt...</p>').slideDown();
};
$.get('/modules/mod_mymodule/tmpl/savedata.php',xhrData,function(res,stat){
$("#result").empty().html(res).slideDown('slow');
},'html');
}
-->
</script>
HTML-Code:
<div id="content">
<form name="testform" id="testform" method="post">
<input type="hidden" name="index" value="<?php echo($datensatz[0]->index);?>" />
<input type="text" name="testext1" id="tt1" size=30 value="<?php echo $datensatz->testtext1;?>" /><br />
<input type="text" name="testext2" id="tt2" size=30 value="<?php echo $datensatz->testtext2;?>" /><br />
<input type="button" value="OK" onclick="javascript:save_data()">
</div>
<div id="result" style="display:none"><!--hier kommt das Ergebnis rein--></div>
Zu guter Letzt die savedata.php
PHP-Code:
$index=$_GET['index'];
$testext1=$_GET['testtext1'];
$testtext2=$_GET['testtext2'];
$host="localhost"; //man kann hier leider nicht auf JFactory::getDBO() zurückgreifen
$user="dbuser";
$pwd="mypassword";
$database="mydatabase";
$dbconnect=mysql_connect($host,$user,$pwd);
$dbselect=mysql_select_db($database);
$query="UPDATE testtabelle SET testtext1='$testtext1', testtext2='$testtext2' WHERE testindex=$index";
$updatesql=mysql_query($query);
if($updatesql){
$ret="Datensatz wurde gespeichert."
}
else{
$ret="Datensatz wurde nicht gespeichert.<br />".mysql_error();
}
mysql_close();
echo $ret;
Bitte beachtet, dass dieses Script nur das Prinzip beschreibt, wie ich das Problem für mich gelöst habe. Sicherheitsaspekte habe ich vernachlässigt.
Vielleicht hilft das ja jemandem weiter. Wenn jemand findet, dass das völliger Schwachsinn ist und eine bessere Idee hat, dann wäre ich sehr gespannt, die zu erfahren.
Gruß
Jury
Lesezeichen