leider geht mit der letzten version 2.5.3.1. auf zahlreichen seiten im shop $this->get_template_vars() nicht mehr. das komplette $this ist ein objekt mehr. was kann ich stattdessen nutzen? via {debug} komme ich zwar noch an einige smarty variabeln, das scheinen aber auch einige weniger zu sein...und ich hatte im alten shop eine php funktion zum umschreiben von preisen verwendet.
Hi, ohne konkretes Codebeispiel wird es da denke ich schwer etwas sinnvolles dazu zu sagen. LG Torben
datei: /templates/EyeCandy/objects/product_boxes_list.html und zahlreiche weitere. bis version 2.3. bekam man dort mittels PHP: $this->get_template_vars(); alle smarty variablen. jetzt bekomme ich mit PHP: {* mod ff brutto netto *}{php} nettobrutto($this->get_Template_vars(),$z);$z++; {/php} nur noch fehlermeldung "using $this in a non-object context"
Ein $smarty->get_template_vars() oder $template->get_template_vars(), könnte funktionieren. Allgemein würde ich aber von der Verwendung {php}-Tags abraten, da diese von Smarty 3 nur noch bedingt unterstützt werden, wie du bemerkt hast. Besser wäre es das Ganze entweder als Smarty-Plugin/Modifier oder als Overload zu machen, da php auf Template-Ebene nichts zu suchen haben sollte. LG Torben
hatte ich beides schon probiert. $smarty = non-object, $template ist leer. komme ich wirklich auf keine weise direkt in den template dateien an die alten objekte an? ich weiss, ist nicht beste programmierung, aber eben schnellste - und der kunde zahl leider wenig. wie kommen ich mit class overloading auf allen seiten an $this->content_data (preis) ran? danke schon mal für die hilfe, ist leider wirklich nirgends im web was zu finden, aber schon andere haben das problem nach update. derzeit schrottets mir den kompletten shop deswegen...
leider nich immer keine lösung. ich versuche gerade die klasse xtc_price zu überladen...aber jegliche manipulationsversuche enden darin, dass auf einmal ein array denn ein formatierter preis rauskommt... PHP: class test1_xtcPrice extends test1_xtcPrice_parent { function xtcFormat($price, $format, $tax_class = 0, $curr = false, $vpeStatus = 0, $pID = 0) { # modify input parameter $nettopreis=round(($price/119*100),2); $t_output_netto = parent::xtcFormat($nettopreis, $format, $tax_class, $curr, $vpeStatus, $pID); $t_output_brutto = parent::xtcFormat($price, $format, $tax_class, $curr, $vpeStatus, $pID); $t_output=$t_output_netto." ".$t_output_brutto; return $t_output; }}
ich vermute gambio 2.6 is smarty 3. obige variante hatte ich auch schon probiert. resultat: FATAL ERROR(1): "Call to a member function getTemplateVars() on a non-object"
Ok, du hast Recht. Im Template gibt es die Methode nicht. Aber in einem Smarty-Plugin ist sie da. Dein xtcPrice-Overload müsste so aussehen: PHP: class test1_xtcPrice extends test1_xtcPrice_parent{ function xtcFormat($p_price, $p_format, $p_tax_class = 0, $p_calculate_currency = false, $p_return_array = 0, $p_products_id = 0) { # modify input parameter $nettopreis = round(($p_price / 119 * 100), 2); $output_netto = parent::xtcFormat($nettopreis, $p_format, $p_tax_class, $p_calculate_currency, 0, $p_products_id); $output_brutto = parent::xtcFormat($p_price, $p_format, $p_tax_class, $p_calculate_currency, $p_return_array, $p_products_id); if(is_array($output_brutto)) { $output_brutto['formated'] = $output_netto . ' ' . $output_brutto['formated']; } elseif($p_format) { $output_brutto = $output_netto . ' ' . $output_brutto; } $output = $output_brutto; return $output; }} Abgesehen davon, glaube ich aber nicht, dass du damit weit kommst, da es sicherliche viele Stellen im Shop gibt, wo du den Nettopreis nicht zusätzlich angezeigt bekommen möchtest.
ganze herzlichen dank moritz, hab mit solchen arrays gearbeitet aber das if else ausgelassen, und das machte dann probleme. läuft top, herzlichen dank!
hallo moritz, leider zu früh gefreut. die abfrage auf welcher seite der preis modifiziert werden soll, wo nicht hab ich binnen ein paar stunden passend hinbekommen. den code habe ich wie folgt modifiziert, da sonst vom p_price (is ja schon netto!) nochmal 19% abgezogen werden würden. PHP: $bruttopreis = round(($p_price *1.19), 2); $output_netto = parent::xtcFormat($p_price, $p_format, $p_tax_class, $p_calculate_currency, 0, $p_products_id); $output_brutto = parent::xtcFormat($bruttopreis, $p_format, $p_tax_class, $p_calculate_currency, $p_return_array, $p_products_id); hiermit kommen eigentlich auf allen seiten die richtigen preise ruas, checkout und request ports muss man noch etwas filtern...aber alles machbar. was ich seit etlichen stunden nicht hinbekomme: sobald ich den bruttopreis *1.19 nehme stimmen die preise im dropdown warenkorb nicht mehr. einzig hier kommt p_price anscheinend schon brutto an. der extender haut also auf den bruttopreis nochmal 19% drauf...und ich bekommen das einfach nicht weg oder eine fallunterscheidung rein. hast noch einen tipp? ist glaube ich eine sache die durchaus einige shopbetreiber brauchen könnten...