ich versuche gerade eine kleine Extension zu erstellen mit Kickstarter . Habe schon alles angelegt (Tabellen usw. )und auch schon einige Daten in die Tabelle eingetragen. Jetzt gehe ich ja in den PHP Code der Extension und mache dort meine Datenbankabfrage z.B.:
public function main($content, array $conf) {
$this->conf = $conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();
$query = „SELECT * FROM tx_zitate ORDER BY rand() LIMIT 1“;
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$content = $row[„text“],
return $this->pi_wrapInBaseClass($content);
}
Dieser Code funktioniert und gibt einen zufälligen Eintrag aus der Datenbank aus.
Was mache ich aber , wenn ich mehrere Datensätze untereinander ausgeben möchte. Im Normalfall wäre das kein Problem aber da man es durch "return " ausgeben muss bekomm ich es einfach nicht hin.
$content ="";
$query = "SELECT * FROM tx_zitate ";
$result = mysql_query($query); … mehr auf while ($row = mysql_fetch_array($result))
{
$content .= $row[„text“];
}
return $this->pi_wrapInBaseClass($content);
Ob das mit dem pi_wrapInBaseClass so hinhaut weiß ich nicht.
Hab schon zu lange keine TYPO3-Extensions mehr programmiert.
Wie Du die Zeilen innerhalb der Schleife formatieren willst, mußt Du halt auch noch überlegen, damit nicht nur alles aneinander geklatscht wird.
Also zumindest ein
wird noch nötig sein.
Es gibt zwei Wege:
a) Erhöhe das Limit und ließ mehrere Zeilen aus der DB.
$query = „SELECT * FROM tx_zitate ORDER BY RAND() LIMIT 3“;
$content = ‚‘;
while ($row = mysql_fetch_array($result) {
$content .= $row[„text“].’
';
}
b) Du ließt mehrfach einen Datensatz.
$content = ‚‘;
for ($i=0; $i
mir steht derzeit leider keine Typo3 Installation zur Verfügung.
Ich vermute, dass $row nur einen Datensatz zurück liefert.
Mit TScript kenne ich mich auch nach längerer Zeit immer noch nicht ausreichend aus, um ohne viel Testläufe ein Ziel erreichen zu können. Viele Code-Teile habe ich von sogenannten Rezept-Büchern entnommen.
Ich hab Deinen Code mal ein bisschen unter Verwendung der TYPO3-Api umgebaut und um ein Template erweitert, so dass Du Deine Zitate in HTML formatieren kannst.
public $templateCode = ‚‘;
public function main($content, array $conf) {
$this->template = $this->cObj->fileResource (‚EXT:‘.$this->extKey.’/res/template.html’);
$content = ‚‘;
$res = $GLOBALS[‚TYPO3_DB‘]->exec_SELECTquery(
‚*‘, //SELECTFIELDS
‚tx_zitate‘, //FROM
‚pid IN (‘.$this->clubsPid.’) AND deleted=0’, //WHERE
‚‘, //GROUP BY
‚‘, //ORDER BY
‚‘ //LIMIT);
while($row = $GLOBALS[‚TYPO3_DB‘]->sql_fetch_assoc($res)){
$markArray[’###SPRUCH###’] = $row[‚text‘];
$tmpl = $this->cObj->getSubpart($this->templateCodeSearch,’###TEMPLATE_SPRUCH###’);
$content .= $this->cObj->substituteMarkerArrayCached($tmpl_search, $markArray);
}
return $content;
Der HTML-Code sieht ungefähr so aus (Datei tx_zitate/res/template.html):
###TEMPLATE_SPRUCH###
###SPRUCH###
###TEMPLATE_SPRUCH###
Nix getestet, musste selber ausprobieren und googlen
Hi Jimmy,
in der regel fügst du die daten deine extension in einem string zu saummen.
$content = ‚result1‘;
$content.= ‚result2‘;
// beachten den punkt! der sorgt dafür das result 2 an den den $content string angehängt wird.
hier noch ein paar generelle hinweise: du solltest in deiner typo3 extension zum Queryin der datenbank nicht direkt die PHP funktionen nutzen sonderen die funktionen der classe t3lib_DB; so bleibt deine extension komplatiblier auch wenn typo3 z.b nicht auf einer mysql datenbank läuft.
normalerweise funktionier das dann ungefähr so:
$GLOBALS[‚TYPO3_DB‘]->exec_SELECTquery ( $select_fields,
$from_table,
$where_clause,
$groupBy = ‚‘,
$orderBy = ‚‘,
$limit = ‚‘
);
Hallo!
Wenn Du im Kickstarter ein FE-Modul mit erstellst, hast Du da eigentlich alles drinnen.
In Deinem Code müsstest Du eine while-Schleife bauen.
Schau Dir am Besten mal eine exitierende Extension an, da kannst Du Dir viel rausziehen.
VG
Christoph
wenn Du mehrere Datensätze ausgeben möchtest, musst Du das LIMIT in deinem Query erhöhen. Danach kannst Du mit Hilfe einer Schleife alle Datensätze durchlaufen und an $content anhängen.
public function main($content, array $conf) {
$this->conf = $conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();
$query = „SELECT * FROM tx_zitate ORDER BY rand() LIMIT 10“;
$result = mysql_query($query);