So, nun habe ich den ganzen Code bearbeitet und noch einiges hinzugefügt und so ziemlich alles was ich verstanden habe kommentiert.
Um nachzuvollziehen was ich gemacht habe, muss man mit dem Kickstarter zunächst das Grundgerüst erzeugen. Hier ein Step by Step [Dauer 5-10 Min]
1.Im Typo BE-einloggen
2. Tools-->Ext Manager
3. Neue Extension anlegen
4. Enter extension Key: CD3
5. General info +
---Category: Frontend Plugin
6.New Database Tables +
---Tablename: tx_cd3_artist
---Title of the table:Artist
---Allowed on pages: aktivieren
---Allowed in "Insert Records" field in content elements:aktivieren
---Add "Save and new" button in forms: aktivieren
---NEW FIELD:
-----Field name: first_name
-----Field title: First Name
-----Field type: String Input
7.Update
8.Auf der selben Seite der Tabelle:
---Label-field:first_name
---FIELD: first_name
----Required:aktivieren
9.Frontend Plugins +
---Enter a title for the plugin:CD3
10.View result
11. WRITE
12.Install Extension
13.Make Updates
###########
##Die Extension ist nun erstellt und installiert nun muss man noch diese als Plugin einfügen und im Template bekanntmachen
###########
14. Web-->Liste-->Rootpage-->DEIN_TEMPLATE : bearbeiten
----Include static (from extensions): von Objekte CD3 hinzufügen und speichern
15.Eine neue Seite erstellen und das FE-Plugin CD3 erzeugen
16.Meinen PHP-Code von unten so wie er ist komplett übernemen und in die Datei "typo3conf/ext/cd3/pi1/class.tx_cd3_pi1.php" übernehmen
17. Als letztes noch die PID des Plugins deiner Seite ermitteln und in den Zeilen 53 und 79 anpassen, also 454 ersetzen durch deine PID, wo deine Datensätze sind.
<?php
/***************************************************************
* Copyright notice
*
* (c) 2008 Sefer
***************************************************************/
require_once(PATH_tslib.'class.tslib_pibase.php');
/**
* Plugin 'CD3' for the 'cd3' extension.
*
* @author Sefer
* @package TYPO3
* @subpackage tx_cd3
*/
class tx_cd3_pi1 extends tslib_pibase {
var $prefixId = 'tx_cd3_pi1'; // Same as class name
var $scriptRelPath = 'pi1/class.tx_cd3_pi1.php'; // Path to this script relative to the extension dir.
var $extKey = 'cd3'; // The extension key.
var $pi_checkCHash = true;
/**
* The main method of the PlugIn
*
* @param string $content: The PlugIn content
* @param array $conf: The PlugIn configuration
* @return The content that is displayed on the website
*/
function main($content, $conf) {
$this->conf = $conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();
$this->pi_USER_INT_obj=1;
//Diese Zeile musste ich aukommentieren, weil ich eine Fehlerausgabe hatte
//$this->init($conf);
//Hier wird die postArray Variable erzeugt, diese bekommt ihren Inhalt von t3lib_div::_POST(); bzw. vom Formular
$postArray = t3lib_div::_POST();
//Wenn im Formular "Save" gedrückt wird, dann wird 'saveNewData gleich 1 gesetzt' und die Daten werden in die DB übertragen.
//Das Formular unter else wird nicht angezeigt
if($postArray['saveNewData'] == 1){
//Ein Array wird erzeugt, welches die Werte enthält die über das Formular mit Hilfe von Post gesendet werden
//Wichtig hierbei ist, dass man manuell die pid des Sysordners angeben muss, wo die Daten im BE angelegt werden sollen
//Vielleicht sollte man für pid den Wert automatisch ermitteln lassen z.B. die pid von der aktuellen Seite
$insertValuesArray = array(
'pid' => 454,
'first_name' => $postArray['field1'],
);
//Es wird zwar ein Array erzeugt, dieses wird aber nur dazu genutzt, um eine Insertabfrage zu starten
//Das eigentliche passiert mit Hilfe von 'exec_INSERTquery(Tabelle,newValues)
//Die in insertValuesArray vorhandenen Daten werden in der Tabelle 'tx_cd3_artist' hinzugefügt
$newDataQuery = $GLOBALS['TYPO3_DB']->exec_INSERTquery(
'tx_cd3_artist',
$insertValuesArray
);
//Die content-Variable enthält alle Elemente die ausgegeben werden
$content = "Super, alles gespeichert";
//So erzeugt man automatisch einen Link auf die Seite aktuelle Seite
//Würde man einfach die Seite Aktualisieren, dann wird die PostVariable erneut gesendet
$content.= '<p>'.$this->pi_linkToPage('Hier klicken, um zum Formular zurück zu gelangen!',$GLOBALS['TSFE']->id).'</p>';
//Der Inhalt aus der $content-Variablen von der Funktion getList() wird ebf. ausgegeben.
$content.=$this->getList();
//Falls noch nicht auf 'save' geklickt wurde dann wird das Formular ausgegeben
}else{
$content = '
<form name="new_data_form" action="index.php?id=454" method="post" enctype="multipart/form-data">
<input type="text" name="field1" id="field1" value="" />
<input type="hidden" name="saveNewData" id="saveNewData" value="1" />
<input type="submit" value="Save" />
</form>
';
//Der Inhalt aus der $content-Variablen von der Funktion getList() wird ebf. ausgegeben.
$content.=$this->getList();
}
return $this->pi_wrapInBaseClass($content);
}
/**
* Die Funktion getList liest alle Items mit Hilfe der Funbktion getItems aus und gibt diese als Tabelle aus.
* Um die Tabelle anzuzeigen genügt es folgendes in der main-Funktion hinzuzufügen:
* $content.=$this->getList();
*/
function getList() {
//$rows enthält alle Datensätze die von getItems ermittelt wurde
$rows=$this->getItems();
$content='<br />Dies ist der Inhalt von der Tabelle: tx_cd3_artist';
$content.='<br />FELDNAME: first_name';
//Die Schleife wird solange wiederholt, bis alle Datensätze gelesen worden sind.
//Jeder einzelne Datensatz kann nun über die Variable $row ["FELDNAME"]angesprochen werden
while(list($c,$row)=each($rows)) {
// Die
//$content.="<table border="4"><tr><td>".($row["first_name"])."</td></tr></table>";
$content.="<br />".($row["first_name"]);
// Es gibt zwar kein Feld Namens 'last_name', aber wenn, dann würde man es einfach so ansprechen
//$content.="<tr><td>".($row["last_name"])."</td></tr></table>";
}
return $content;
}
/**
* Die Funktion getItems führt ein einfaches SQL-Statement durch und speichert diesen in der Variablen $query
* Das Ergebnis wird als array in der Variablen $out gespeichert und als return an die aufrufende Stelle zurückgegeben
*/
function getItems() {
//ICH HABE KEINE AHNUNG WAS GENAU DIESER TEIL MACHT
/* Auf jeden Fall muss ich ihn auskommentieren ,weil es sonst einen Fehler gibt
// pid_list is the pid/list of pids from where to fetch the guest items.
$config["pid_list"] = trim($this->cObj->stdWrap($this->conf["pid_list"],$this->conf["pid_list."]));
$config["pid_list"] = $config["pid_list"] ? implode(t3lib_div::intExplode(",",$config["pid_list"]),",") : $GLOBALS["TSFE"]->id;
list($pid) = explode(",",$config["pid_list"]);
*/
$query = "SELECT * FROM tx_cd3_artist ORDER BY first_name"; // WHERE pid IN (".$pid.") ORDER BY sorting";
$res = mysql(TYPO3_db,$query);
$out=array();
while($row = mysql_fetch_assoc($res)) {
$out[]=$row;
}
return $out;
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/cd3/pi1/class.tx_cd3_pi1.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/cd3/pi1/class.tx_cd3_pi1.php']);
}
?>
Nun habe ich aber noch folgende Fragen:
zu Zeile 40:
$this->init($conf);
Ich musste diesen auskommentieren, weil ich folgende Fehlermeldung erhalte:
Fatal error: Call to undefined method tx_cd3_pi1::init() in /var/www/alfa2_1/typo3conf/ext/cd3/pi1/class.tx_cd3_pi1.php on line 55
Wozu ist der Code gut?
zu Zeile 127-129:
// pid_list is the pid/list of pids from where to fetch the guest items.
$config["pid_list"] = trim($this->cObj->stdWrap($this->conf["pid_list"],$this->conf["pid_list."]));
$config["pid_list"] = $config["pid_list"] ? implode(t3lib_div::intExplode(",",$config["pid_list"]),",") : $GLOBALS["TSFE"]->id;
list($pid) = explode(",",$config["pid_list"]);
Was macht dieser genau?
Danke,
Sefer