Mit Smarty rechnen oder Zugriff auf Einkaufspreis

Hallo,

versuche schon seit Stunden etwas hinzubekommen, was mir einfach nicht gelingen will :confused:

Ich will in der Auflistung der Artikel 3 Beträge darstellen, also in product.tpl

UVP
Sie sparen (UVP-VK) €!
VK

UVP bekomme ich mit [{$product->getFTPrice()}]
VK bekomme ich mit [{ $product->getFPrice()}]

Wie kann ich jetzt mit Smarty die Differenz berechnen?
Habe schon [{$product->getFTPrice()-$product->getFPrice()}] versucht, was aber nicht klappt :frowning:

Dachte mir, dass ich alternativ den EK mit der Differenz belegen kann, aber wie greife ich auf den Einkaufspreis zu?

Würde mich echt freuen, wenn mir jemand helfen kann :slight_smile:

Schau mal hier: http://www.oxid-esales.com/forum/showthread.php?t=1299

Ich würde eher in PHP rechnen, etwa so:

<?php
/*
* Module to show differnce between UVP and price
* Filename: modules/oxarticle_savedprice.php
* Add this line to System/Modules: oxarticle => oxarticle_savedprice
*/

class oxarticle_savedprice extends oxarticle_savedprice_parent{
	public function getFSavedPrice(){
        if (($oPrice = $this->getPrice()) && ($oTPrice = $this->getTPrice())) {
			if (($fPrice = $oPrice->getBruttoPrice()) && ($fTPrice = $oTPrice->getBruttoPrice())){
		    	return $this->getPriceFromPrefix().oxLang::getInstance()->formatCurrency($fTPrice - $fPrice);
	        }
        }
		return false;
    }
}
?>

Hallo!!!

Du kannst natürlich in Smarty rechnen, allerdings musst Du schon den Syntax einhalten:

Kleiner Tip: [{ math assign=“dein_wert” …}] // GIDF :).

Grüße

Cutty

[QUOTE=rubbercut;28756]Hallo!!!

Du kannst natürlich in Smarty rechnen, allerdings musst Du schon den Syntax einhalten:

Kleiner Tip: [{ math assign=“dein_wert” …}] // GIDF :).

Grüße

Cutty[/QUOTE]
Und vor allem darfst Du nicht die [B]formatierten Preise [/B]verwenden, das geht garantiert schief…

Sondern Du musst direkt auf die unformatierten Preise zugreifen.

[{ $product->getFPrice()}] => [{ $product->oxarticles__oxprice->value}]

[{$product->getFTPrice()}] => [{ $product->oxarticles__oxtprice->value}]

EK: => [{ $product->oxarticles__oxbprice->value}]

Wobei man dann allerdings das Problem hat, den Preis zu formatieren…

Deshalb würde ich das, in Anlehnung an leofonic’s Modul, mit PHP [B]im Template [/B]lösen (ungetestet)…
(Mit all den Modulen verliert man leicht den Überblick…)


[{php}]    
$oxLang=oxLang::getInstance();
$product=$this->_tpl_vars['product'];
if (($oPrice = $product->getPrice()) && ($oTPrice = $product->getTPrice())) 
{
  if (($fPrice = $oPrice->getBruttoPrice()) && ($fTPrice = $oTPrice->getBruttoPrice()))
  {
      $savings=$fTPrice - $fPrice;
      if ($savings>0)
      {
        $this->_tpl_vars['SAVED_PRICE']=$oxLang->formatCurrency($savings);
        $this->_tpl_vars['SAVED_PERCENT']=(int)(($savings/fTPrice)*100).'%';
      }
  }
} 
$this->_tpl_vars['PURCHASE_PRICE']=$oxLang->formatCurrency($product->oxarticles__oxbprice->value);
[{/php}]

Mit [B][{$SAVED_PRICE}][/B] kannst Du dann im Template die [B]Preisersparnis[/B], mit [B][{$SAVED_PERCENT[/B][B]}][/B] die [B]prozentuale Ersparnis[/B], und mit [B][{$PURCHASE_PRICE}][/B] den [B]Einkaufspreis [/B]verwenden…

Vielen Dank für die ganzen Posts :wink:

ich habe es jetzt so gelöst und es klappt wunderbar:
[{$product->oxarticles__oxtprice->value-$product->oxarticles__oxprice->value|number_format:2:",":"."}]

Das Problem lag an den formatierten Preisen…

1 Like

Hallo!!!

Geht auch direkt in Smarty inkl. Formatierung:

Kleines Osterei:

[{math assign="ox_ek" equation="(x-y)" x=$product->oxarticles__oxtprice->value y=$product->oxarticles__oxprice->value }] [{ $ox_ek|number_format:"2"}]

Grüße

Cutty

[QUOTE=avenger;28771]
(Mit all den Modulen verliert man leicht den Überblick…)
[/QUOTE]
Vor allem muss man sich auch noch immer merken welche Module für welchen Templatesatz aktiviert werden müssen. Das ist bei deiner Lösung besser, weil man alles im Template hat.

WOW Danke!

so schnell so viel Hilfe!
Vielleicht nutzt das andere Projekt eine andere (alte) Version von Smarty, da funktionierte es so wie beschrieben. Oxid ist halt doch professioneller.

M.f.G.
Jan