$this->get_template_vars()

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

  1. ff-webdesigner
    ff-webdesigner Erfahrener Benutzer
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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
    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.178
    Danke vergeben:
    399
    Hi,

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

    LG Torben
     
  3. ff-webdesigner
    ff-webdesigner Erfahrener Benutzer
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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
    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.178
    Danke vergeben:
    399
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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
    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.694
    Danke vergeben:
    903
    $smarty->getTemplateVars() ist es es Smarty 3.
     
  8. ff-webdesigner
    ff-webdesigner Erfahrener Benutzer
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
  9. Moritz (Gambio)
    Moritz (Gambio) Administrator
    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.694
    Danke vergeben:
    903
    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_currency0,
                                               
    $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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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_currency0,
                                               
    $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
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    $template->getTemplateVars() sollte funkltionieren...
     
  13. stefanutschig
    stefanutschig Neues Mitglied
    Registriert seit:
    9. Dezember 2015
    Beiträge:
    2
    Danke erhalten:
    0
    mehrfach getestet. leider nicht.