Zum Inhalt springen

Versandkostenberechnung mittels Skript: class.tx_ttproducts.php fehlerhaft?

Erstellt am 28. August 2005 · 6 Antworten · letzte Antwort am 31. August 2005

Tags: PHP, Frage

McPringle ·

Hallo!

Wenn ich ein Skript zur Berechnung der Versandkosten schreibe und einbinde, erhalte ich anstelle des Warenkorbs nur eine weisse Seite. Das trieb mich ins Logfile, wo ich folgendes fand:

[Sun Aug 28 18:53:19 2005] [error] [client 217.186.152.117] PHP Fatal error:  Call to a member function on a non-object in /home/f/fihlon.de/public_html/cms/typo3/ext/tt_products/pi/class.tx_ttproducts.php on line 2415, referer: https://cms.fihlon.de/index.php?id=44&type=1&no_cache=1

Anscheinend ist das dort benutzte Object $TSFE nicht vorhanden und der Zugriff auf dessen Eigenschaften produziert dann augenscheinlich diesen Fehler.

Kann das vielleicht jemand nachvollziehen?

Gruß
McPringle

McPringle ·
anj schrieb

kannst du mal die Zeile posten, die den Fehler verursacht?

Aber sicher doch:

$calcScript = $TSFE->tmpl->getFileName($this->basketExtra['shipping.']['calculationScript']);

Gruß
McPringle

anj ·

ist jetzt nur eine Vermutung ...

in der extension zk_products wird das TSFE über

$GLOBALS["TSFE"]

angesprochen.

wird denn die Variable bei dir irgendwo mit

$TSFE  = $GLOBALS["TSFE"];

gesetzt ?

bzw. versuche doch mal mit

t3lib_div::debug($GLOBALS);

auszugeben ..was drin steht ?

vielleicht kommst du dann dahinter...

McPringle ·

Da hätte ich eigentlich selbst drauf kommen müssen -- sind meine PHP-Kenntnisse wirklich schon so eingerostet?

Ich habe in der Funktion global $TSFE hinzugefügt und schon gibt es keine Fehlermeldung mehr. Allerdings funktioniert die Berechnung nicht, ich erhalte immer nur 0,00 Euro Versandkosten als Ausgabe.

Meine Konfiguration:

plugin.tt_products {
    20.priceTax.type = count
    20.calculationScript = fileadmin/tmpl_files/calculate_weight_hermes.inc
    20.priceTax =
    20.priceNoTax =
}

Das Berechnungsskript habe ich hier aus diesem Forum kopiert und nur geringfügig angepasst:

<?php
$baseAmount = $this->calculatedWeight;
$shippingPrice = 1.00;

if ($baseAmount > 0) { $shippingPrice = 1.00; }
if ($baseAmount > 50) { $shippingPrice = 1.50; }
if ($baseAmount > 100) { $shippingPrice = 2.50; }
if ($baseAmount > 500) { $shippingPrice = 5.00; }
if ($baseAmount > 1000) { $shippingPrice = 10.00; }
if ($baseAmount > 5000) { $shippingPrice = 15.00; }
if ($baseAmount > 10000) { $shippingPrice = 20.00; }
if ($baseAmount > 20000) { $shippingPrice = 30.00; }
if ($baseAmount > 30000) { $shippingPrice = 40.00; }
if ($baseAmount > 40000) { $shippingPrice = 50.00; }

$this->calculatedSums_no_tax["shipping"] = ($shippingPrice / 1.16);
$this->calculatedSums_tax["shipping"] = $shippingPrice;
?>

Ich wäre Dir dankbar, wenn Du noch einen Tip hättest, was bei diesem Zusammenspiel schief gehen könnte.

Danke
McPringle

Flink ·

Dazu ist kein eigenes Skript mehr nötig.

Passe das Beispiel aus dem Manual entsprechend an:

plugin.tt_products.shipping { 
 10.title = Parcel 
 10.priceTax.type = weight 
 10.priceTax.WherePIDMinPrice.155 = 7.5 
 10.priceTax.1 = 1.5 
 10.priceTax.500 = 2.5 
 10.priceTax.1000 =3.5 
}

Außerdem müssen alle Skripts an die neuen globalen Variablen $this->calculatedArray und $this->itemArray angepaßt werden.

McPringle ·
Flink schrieb

Passe das Beispiel aus dem Manual entsprechend an:

Hmmm - anscheinend sind alle meine Daten veraltet (in meinem Manual stand davon nix). Ich werde wohl mal aktualisieren müssen - kann ja nicht schaden.

Vielen Dank für den Tip, es funktioniert super!

Gruß
McPringle