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...

Erstellt: 07/2010| Geändert: 10/2015

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.

Erstellt: 07/2010| Geändert: 03/2023

Anlegen von einer Seite pro Kategorie die ein Plugin enthält welches zu den Unterordner der Artikel der Kategorie zeigt.

Erstellt: 03/2023| Geändert: 03/2023

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

Erstellt: 03/2023| Geändert: 03/2023

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&auml;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

Erstellt: 07/2010| Geändert: 10/2015

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.

Erstellt: 07/2010| Geändert: 10/2015

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...

Erstellt: 07/2010| Geändert: 10/2015

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!

Erstellt: 02/2013| Geändert: 10/2015

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.

Erstellt: 07/2010| Geändert: 10/2015