$this->get_template_vars()

Thema wurde von ff-webdesigner, 15. Dezember 2015 erstellt.

  1. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    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.
     
  2. Torben Wark

    Torben Wark Gambio GmbH

    Hi,

    ohne konkretes Codebeispiel wird es da denke ich schwer etwas sinnvolles dazu zu sagen.

    LG Torben
     
  3. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    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"
     
  4. Torben Wark

    Torben Wark Gambio GmbH

    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
     
  5. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    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...
     
  6. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    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;
        }

    }
     
  7. Moritz (Gambio)

    Moritz (Gambio) Administrator

    $smarty->getTemplateVars() ist es es Smarty 3.
     
  8. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

  9. Moritz (Gambio)

    Moritz (Gambio) Administrator

    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.
     
  10. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    ganze herzlichen dank moritz, hab mit solchen arrays gearbeitet aber das if else ausgelassen, und das machte dann probleme. läuft top, herzlichen dank!
     
  11. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

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

    Avenger G-WARD 2012/13/14/15

    $template->getTemplateVars() sollte funkltionieren...
     
  13. stefanutschig

    stefanutschig Neues Mitglied

    mehrfach getestet. leider nicht.