tt_products
Installation
Ein Template rsys - Shop mit folgendem Code:
plugin.tt_products.file.templateFile = fileadmin/templates/products_template.tmpl
Anlegen eines System Ordners für die Artikel
Content des Typs Plugin anlegen mit den Einstellungen für listing, cart etc.
Probleme
Caching
Ich hatte ein Caching problem, siehe Umlaut Problem 2
Plugin
tt_products 2.5.7: Im Backend bei Plugin wurde nur CODE angezeigt, keine Liste zur Auswahl Liste, Warenkorb, Suche etc.
Lösung: Bei Extension use flexforms abwählen und dann wieder anwählen, dann ging's...

Konfiguration
Kategorien
Um Seiten als Kategorien zu verwenden im Extension Manager folgendes setzen:
pageAsCategory=2
Einfügen in das rsys - shop Template:
# articles
plugin.tt_products.useArticles = 1
plugin.tt_products.selectSize = 1
plugin.tt_products.conf.tt_products.LIST.displayColumns = 1
Anlegen eines Artikel Ordners auf den alle Haupt Plugins zeigen (ausser die auf Seiten welche nur eine Kategorie anzeigen)
Anlegen eines Unterordners vom Typ System Ordnerpro Kategorie, der Produkte und Artikel enthält.
Um später sortieren zu können sollten die Ordner in der Reihenfolge angelegt werden wie sie später angezeigt werden sollen.

Anlegen von einer Seite pro Kategorie die ein Plugin enthält welches zu den Unterordner der Artikel der Kategorie zeigt.
Sortieren
Folgendes in das Setup des Templates aufnehmen:
plugin.tt_products.orderBy=pid,title
Die pid ist die Reihenfolge der Artikel Unterordner.
Klick vergrössern
Folgendes in das Setup des Templates aufnehmen:
# click enlarge
plugin.tt_products.listImage.imageLinkWrap.enable = 0
Erweitern
Gewicht in Gramm statt Kilogramm
Um das Gewicht in Gramm anzuzeigen habe ich einen neuen Marker benötigt. Hierfür musste ich die Prozedur getItemMarkerArray() in class.tx_ttproducts_article_base.php modifizieren, welche in typo3conf/ext/tt_products/model liegt.
Vor der Zeile
$instockField = $this->cnf->getTableDesc['inStock'];
habe ich folgendes eingefügt:
// modified-start:EKNOLL
if ($row['weight'] > 0) {
$weightInGramm = $row['weight'];
$weightInGramm =
"mit " . sprintf("%.0f",round(1000*$weightInGramm,0))." g";
}
$markerArray['###WEIGHT_GRAMM###'] = $weightInGramm;
// modified-end: EKNOLL
Damit es funktioniert muss ein Marker <!-- ###PRODUCT_WEIGHT### --> im HTML Template stehen (damit der Wert row['weight'] existiert).
Dann kann ich den Preis folgendermassen anzeigen:
###PRICE_TAX### <!-- ###PRODUCT_WEIGHT### -->
###CUR_SYM### pro ###PRODUCT_UNIT### ###WEIGHT_GRAMM###
Dies zeigt folgendes an z.B.: 4,00 € pro Packung mit 50g
or: 4,00 € pro Stück .
www Link
Um den Link für das Produkt Feld www anzuzeigen kann folgender Marker verwendet werden:
<!-- ###PRODUCT_WWW### -->
<p>###PRODUCT_WWW_LINK###</p>
Um diesen Marker zu erstellen modifizierte ich die Klasse class.tx_ttproducts_article_base.php in typo3conf/ext/tt_products/model an derselben Stelle wie oben.
if ($row['www'] <> "") {
$fieldWWW = $row['www'];
$fieldWWW = "<a href=" . $fieldWWW . " target=_top>zusätzliche infos</a>";
}
$markerArray['###PRODUCT_WWW_LINK###'] = $fieldWWW;
Not in Stock
Um eine Nachricht anzuzeigen, wenn kein Produkt vorrätig ist kann folgender Marker verwendet werden:
###PRODUCT_NOTINSTOCK_MESSAGE###<
Dasselbe wie oben - nur an anderer Stelle, nämlich hinter
if (isset($row[$instockField])){
....
}
folgendes einfügen
// modified-start:EKNOLL
if (isset($row[$instockField])) {
if ($row[$instockField] <> 0) {
$markerArray['###'.$this->marker.'_NOTINSTOCK_MESSAGE###'] = "";
} else {
$markerArray['###'.$this->marker.'_NOTINSTOCK_MESSAGE###'] = "<div class='notinstock-warning'>" . $this->conf['notInStockMessage'] . "</div>";
}
}
// modified-end: EKNOLL
Sprache
Um den Shop mehrsprachig zu machen folgendes ins Setup:
plugin.tt_products.conf.tt_products.ALL {
orderBy = title
requiredFields = uid,pid,category,price,price2,tax,inStock
language.type = table
language.table = tt_products_language
functions {
htmlentities = title, subtitle, itemnumber
}
}
Dann bei Produkten: Neuer Datensatz, Typ: Alternative Produktsprache und dem Produkt zuordnen.
Bugs
Warenkorb (basket) löschen nach Bestellung
Der Warenkorb wird nicht geleert nach der Bestellung. Der Grund ist schlampige Programmierung der Extension:
if(!$this->conf['debug']) ...
Und was steht da drin standardmässig?
[debug] => {$plugin.tt_products.debug}
Na toll. Also schreibt man in deine Constants
plugin.tt_products.debug=0
und schon geht's. Das hat mich einige (unbezahlte) Stunden gekostet...
Bugs 2.7.4
Nach dem Update auf die Version 2.7.4 geht die Anzeige der Texte bei fehlenden Eingaben im Formular nicht mehr (Name, Adresse etc).Grund, das language Objekt wird nie erzeugt. Ich habe die fehlende Zeile eingefügt in Zeile 299 in der Datei control/class.tx_ttproducts_control.php
function &doProcessing (&$codes, &$error_message) {
global $TSFE;
global $TYPO3_DB;
$langObj = &t3lib_div::getUserObj('&tx_ttproducts_language'); // rsys: tt_products sucks!
Erweiterungen
Erkennung unzustellbarer Emails
Wenn der Kunde eine falsche Emailadresse eingegeben hat, merkt man das nicht - man schickt ihm die Ware, aber er hat nie die Bestätigungsmail des Shops oder die Rechnung erhalten. Das ist nicht gut für's Geschäft.
Um das zu ändern habe ich folgendes unternommen:
localconf.php
$TYPO3_CONF_VARS["SYS"]["forceReturnPath"] = '1';
Und dann muss man den Aufruf in der Klasse class.tx_ttproducts_email_div.php noch ändern. Dazu bei Gelegenheit noch eine Extension, für's erste mal die Modifikation des tt_products Sourcecodes:
public function sendTheMail() {
.....
$TYPO3_htmlmail = t3lib_div::makeInstance('t3lib_htmlmail');
// rsys: Mail could not be send
$TYPO3_htmlmail->returnPath = 'whatever@example.com';
Dann bekommt man eine Nachricht, wenn eine Mail nicht zugestellt werden konnte.