Smarty Variablen in der chekout_success.html

Thema wurde von Kai Schoelzke, 15. Februar 2016 erstellt.

  1. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.551
    Danke erhalten:
    472
    Danke vergeben:
    181
    Hallo an alle,
    ich musst mich heute mal mit der chekout_success.html befassen, da soll ein JS rein welches die Bestellsumme, die Kundennummer die Währung und die Bestellnummer an einen Anbieter übermittelt.

    Jetzt gibt es ja schon jede Menge was man in dieser Datei über Smarty Variablen auslesen kann, unter anderem auch die Kundenummer und die Währung.

    Die Bestellnummer und die Bestellsumme funktionieren leider nicht, was mir etwas unverständlich ist, da ja z.B der MwSt Satz und die enthaltene MwSt, Geschlecht, Name, Vorname komplette Anschrift, Sprache ja auch funktionieren.

    Sei wie es sei, weiß jemand wie ich die Bestellnummer und den Gesamt Bestellpreis da rein bekomme?
     
  2. Moritz (Gambio)

    Moritz (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    5.391
    Danke erhalten:
    2.429
    Danke vergeben:
    783
    Hallo Kai,

    dein Vorhaben solltest du mittels Extender lösen. In deinem Fall ein Overload der CheckoutSuccessExtenderComponent-Klasse. Bist du mit dem Extender-System vertraut? Eine Vorlage für dich wäre die Klasse system/overloads/CheckoutSuccessExtenderComponent/GoogleConversionTrackingCheckoutSuccessExtender.inc.php, die bereits sehr ähnliches tut.
     
  3. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.551
    Danke erhalten:
    472
    Danke vergeben:
    181
    Hallo Moritz,
    vertraut bin ich mit der Funktionsweise nur bei der Umsetzung hapert es, ich schau mir das mal an, mal sehen ob ich was zusammengebaut bekomme.
     
  4. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.551
    Danke erhalten:
    472
    Danke vergeben:
    181
    Hallo Moritz,
    ich habe jetzt mal eine Datei ZanoxCheckoutSuccessExtender.inc.php in user_classes\overloads\CheckoutSuccessExtenderComponent/ angelegt mit folgendem Inhalt
    Code:
    <?php
    
    class ZanoxCheckoutSuccessExtender extends ZanoxCheckoutSuccessExtender_parent {
    
        function proceed() {
            parent::proceed();
    
            $this->v_output_buffer['ZANOX_CONVERSION'] = ZANOX_CONVERSION;
    
            if (isset($this->v_data_array['orders_id']) && !empty($this->v_data_array['orders_id']) && isset($this->v_data_array['coo_order']) && is_object($this->v_data_array['coo_order'])) {
                $t_amount = round($this->v_data_array['coo_order']->info['pp_total'], 2);
    
                $t_conversion_id = ZANOX_CONVERSION_ID;
    
                $t_html = '
             <script type="text/javascript" src="https://ad.zanox.com/pps/?17625C1499035435&mode=[[1]]&CustomerID=[[XXX]]&OrderID=[[XXX]]&CurrencySymbol=[[XXX]]&TotalPrice=[[XXX]]&PartnerID=[[XXX]]">
             </script>
             <noscript>
             <img src="https://ad.zanox.com/pps/?17625C1499035435&mode=[[2]]&CustomerID=[[XXX]]&OrderID=[[XXX]]&CurrencySymbol=[[XXX]]&TotalPrice=[[XXX]]&PartnerID=[[XXX]]" width="1" height="1" />
             </noscript>
                ';
                $this->v_output_buffer['ZANOX_CONVERSION_BLOCK'] = !empty($t_conversion_id) ? $t_html : '';
            }
        }
    
    }
    
    Dann habe ich eine checkout_success-USERMOD.html dort habe ich folgendes drin
    Code:
    {if $ZANOX_CONVERSION}
    {$ZANOX_CONVERSION_BLOCK}
    {/if}
    
    Der Inhalt der ZanoxCheckoutSuccessExtender.inc.php erscheint jetzt auch im Checkout. jetzt müssten "nur noch" OrderID, CurrencySymbol, CustomerID und TotalPrice gefüllt werden.

    Und da klemmt es bei mir!

    Hier wäre Hilfe angebracht. Danke!
     
  5. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.415
    Danke erhalten:
    1.579
    Danke vergeben:
    116
    Hallo,

    der GoogleConversionCheckingCheckoutSuccessExtender war nur so ein halbgutes Beispiel, weil der noch das alte System mit dem explizit benannten Ausgabeblock verwendet. Das ist nicht mehr nötig, checkout_success-USERMOD.html braucht man in der Regel NICHT, das kannst du löschen. Befülle stattdessen im Extender $this->html_output_array (statt $this->v_output_buffer), die Inhalte von $this->html_output_array werden ohne weitere Maßnahmen ausgegeben.
     
  6. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.551
    Danke erhalten:
    472
    Danke vergeben:
    181
    Das funktioniert jetzt auch, danke für den Tipp, jetzt fehlen mir ur noch die entsprechenden Daten.
    Das ganze sieht jetzt so aus

    Code:
    <?php
    
    class ZanoxCheckoutSuccessExtender extends ZanoxCheckoutSuccessExtender_parent {
    
        function proceed() {
            parent::proceed();
    
            $this->v_output_buffer['ZANOX_CONVERSION'] = ZANOX_CONVERSION;
    
            if (isset($this->v_data_array['orders_id']) && !empty($this->v_data_array['orders_id']) && isset($this->v_data_array['coo_order']) && is_object($this->v_data_array['coo_order'])) {
                $t_amount = round($this->v_data_array['coo_order']->info['pp_total'], 2);
    
                $t_conversion_id = ZANOX_CONVERSION_ID;
    
                $t_html = '
             <script type="text/javascript" src="https://ad.zanox.com/pps/?17625C1499035435&mode=[[1]]&CustomerID=[[XXX]]&OrderID=[[XXX]]&CurrencySymbol=[[XXX]]&TotalPrice=[[XXX]]&PartnerID=[[XXX]]">
             </script>
             <noscript>
             <img src="https://ad.zanox.com/pps/?17625C1499035435&mode=[[2]]&CustomerID=[[XXX]]&OrderID=[[XXX]]&CurrencySymbol=[[XXX]]&TotalPrice=[[XXX]]&PartnerID=[[XXX]]" width="1" height="1" />
             </noscript>
                ';
                $this->html_output_array['ZANOX_CONVERSION_BLOCK'] = !empty($t_conversion_id) ? $t_html : '';
            }
        }
    
    }
    
    Da kann doch bestimmt das $this->v_output_buffer['ZANOX_CONVERSION'] = ZANOX_CONVERSION; jetzt komplett weg?
     
  7. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.415
    Danke erhalten:
    1.579
    Danke vergeben:
    116
    So ist es. :)

    Tipp am Rande (nur Beispielcode):

    PHP:
    $t_html '<script type="text/javascript" src="https://ad.zanox.com/pps/?17625C1499035435&mode=:mode&CustomerID=:customer_id&OrderID=:order_id&CurrencySymbol=:currency&TotalPrice=:totalprice&PartnerID=:partnerid">
    </script>
    <noscript>
    <img src="https://ad.zanox.com/pps/?17625C1499035435&mode=:mode&CustomerID=:customer_id&OrderID=:order_id&CurrencySymbol=:currency&TotalPrice=:totalprice&PartnerID=:partnerid" width="1" height="1" />
    </noscript>
    '
    ;

    $replacements = array(
        
    ':mode'        => 'live',
        
    ':customer_id' => $_SESSION['customer_id'],
        
    ':order_id'    => $this->v_data_array['coo_order']->info['order_id'],
        
    ':currency'    => $currency,
        
    ':totalprice'  => $t_amount,
        
    ':partnerid'   => 'neureinbeispiel',
    );
    $t_html strtr($t_html$replacements);
    Nach dem Schema baue ich solche Tracking-Schnippsel zusammen, das ist hypsch übersichtlich und wartbar.
     
  8. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.551
    Danke erhalten:
    472
    Danke vergeben:
    181
    Hallo Marko,
    das klappt ja super, ich habe das jetzt so
    PHP:
    <?php

    class ZanoxCheckoutSuccessExtender extends ZanoxCheckoutSuccessExtender_parent {

        function 
    proceed() {
            
    parent::proceed();
            if (isset(
    $this->v_data_array['orders_id']) && !empty($this->v_data_array['orders_id']) && isset($this->v_data_array['coo_order']) && is_object($this->v_data_array['coo_order'])) {
                
    $t_amount round($this->v_data_array['coo_order']->info['pp_total'], 2);

                
    $t_conversion_id ZANOX_CONVERSION_ID;

    $t_html '<script type="text/javascript" src="https://ad.zanox.com/pps/?17625C1499035435&mode=:mode&CustomerID=:customer_id&OrderID=:order_id&CurrencySymbol=:currency&TotalPrice=:totalprice&PartnerID=:partnerid">
    </script>
    <noscript>
    <img src="https://ad.zanox.com/pps/?17625C1499035435&mode=:mode&CustomerID=:customer_id&OrderID=:order_id&CurrencySymbol=:currency&TotalPrice=:totalprice&PartnerID=:partnerid" width="1" height="1" />
    </noscript>
    '
    ;

    $replacements = array(
        
    ':mode'        => 'live',
        
    ':customer_id' => $_SESSION['customer_id'],
        
    ':order_id'    => $this->v_data_array['coo_order']->info['orders_id'],
        
    ':currency'    => $_SESSION['currency'],
        
    ':totalprice'  => $t_amount,
        
    ':partnerid'   => 'neureinbeispiel',
    );
    $t_html strtr($t_html$replacements);
    $this->html_output_array['ZANOX_CONVERSION_BLOCK'] = !empty($t_conversion_id) ? $t_html '';
    }
        }
    }
    jetzt noch eine kleine Sache, ich habe gerade erfahren das der totalprice netto sein soll.

    Zitat:
    Bei der Übergabe des Warenkorbwertes sprechen wir üblicherweise vom Nettowert. Dieser Wert wird immer mit 2 Nachkommastellen und ohne 1000er Trennzeichen übergeben.

    Am schönsten wäre es ja, wenn man nur das pp_total austauschen müsste, ich fürchte leider so einfach ist das nicht.

    Hast du noch einen Tipp für mich?
     
  9. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.415
    Danke erhalten:
    1.579
    Danke vergeben:
    116
    Hallo,

    ich fürchte, den Netto-Betrag wirst du dir aus der orders_total-Tabelle raustüddeln müssen. Ich hab das gerade nicht hinreichend zuverlässig im Kopf, weil man da verschiedene Fälle (B2C, B2B, außergemeinschaftlicher Handel, …) berücksichtigen muss, die zu unterschiedlichen Daten in orders_total führen. Am besten probierst du das einfach mal aus.