Smarty-Variablen in Templates abfragen (grundsätzlich)

Ich würde gerne grundsätzlich wissen, wie ich ein Smarty-Variable in einem bestimmten Template abfrage. Ich bin zwar mit Smarty vertraut, verstehe es aber noch nicht ganz.

Beispiel payment.tpl:

Hier sehe ich in der Dokumentation des Templates (https://www.oxid-esales.com/files/documentation/template-documentation-20-english/contents/payment.tpl.html) die templatespezifischen Variablen:

Smarty variables

  • Variables accessible in every template.

  • Specific payment.tpl template variables:
    Name Type Description
    payerror integer Payment error number
    deladr oxaddress_object Customer delivery address object
    toparticle oxarticle Top selling article object
    payments oxpayments_list_object Customer payment list object
    defpaymentid string Default payment ID

Wie kann ich jetzt z.B. die Variable “deladr” abfragen?

Müßte eigentlich ganz simple sein …

Wenn ich das richtig lese ist deladr ein oxaddress object.
Mehr dazu in der Source-Code-Doku.

Vielen Dank, aber wie frage ich die nun in Smarty ab?

Ich werde da jetzt nicht so ganz schlau draus?

Sowas wie [{ if $deladr }] o.ä. fände ich logisch.

Einfach probieren.

Ggf:
$deladr->oxaddress__oxfname->value

:frowning:

Leider sind die Variablen leer:

Wenn ich dieses als Test einfüge

--[{ $deladr->oxaddress__oxfname->value }]##[{ $deladr->oxaddress__oxcountry->value }]--

kommt

--##--

heraus

Ich denke das hier ist genau das, was du suchst: http://www.oxid-esales.com/en/resources/help-faq/eshop-manual/alle-variablen-anzeigen-die-in-einem-template-zur-verfuegung-stehen

Da sieht man auch was für einen Typ die Variable hat, was das Abfragen enorm erleichtert :slight_smile:

btw.: In meiner payment.tpl (4.3.1) gibt es diese Variable nicht. Bitte prüfe mal, ob die Templateversion der Shop Version entspricht.

Vielen Dank!!!

Ich habe jetzt die Version 4.2.0_23610 laufen.

Das Popup sagt mir, dass die Lieferadresse nicht in der payment.tpl verfügbar ist. Selbst wenn sie es wäre und oxid nimmt sie irgendwann mal raus, ist das unbefriedigend.

Ich habe mich nach dieser Seite gerichtet:

https://www.oxid-esales.com/files/documentation/template-documentation-20-english/contents/payment.tpl.html

Jetzt frage ich mich, für welche Version diese Seite gilt. Die Zornesröte steigt mir weiter ins Gesicht, bei der Updatepolitik.

Gerne.
Die Dokumentation auf die du dich beziehst ist für die Version 2.0. Bissl alt :wink:
Aktuelle Dokus gibts auf der Webseite von OXID unter www.oxid-esales.com -> Community -> Information für Entwickler.
Hier der direkte Link: http://www.oxid-esales.com/de/resources/help-faq/manual-eshop-pe-ce-4-0-0-0/informationen-fuer-entwickler

Google ist nicht immer Dein Freund. Sonst hätte ich nicht eine alte Doku gefunden.

Was noch bleibt ist, wie ich grundsätzlich eine Anpassung in einem Template mache, wenn Variablen einfach wegfallen. Ich sehe für mein aktuelles Problem noch nicht mal eine Lösung.

Wenn ich das nun schon realisiert habe und nach einem Update (das der Kunde bezahlt) meine Erweiterung (für die der Kunde auch schon bezahlt hat) nicht mehr funktioniert, was mache ich dann? Den Kunden noch mal zahlen lassen? Oder Updates nicht machen.

Ist meine Rangehensweise vielleicht auch falsch, im Template selber mit Smarty zu manipulieren?

Gibt es dort kein order-object? Da sollte die Adresse drin stehen.

mit [{debug}] habe ich alle verfügbaren Variablen ausgelesen und nach “Packstation” geschaut. Packstation wird in diesem Falle im Feld “Strasse” bei der Lieferadresse eingetragen. Es kommt aber nicht vor.

Bei der Seite, wo die Zusammenfassung kommt, ist sie dann wieder drin.

Hmmm, so einfach ist das nicht.

Ich habe mal geschaut und in der order.php ist folgende Methode:


    public function getDelAddress()
    {
        if ( $this->_oDelAddress === null ) {
            $this->_oDelAddress = false;
            $oOrder = oxNew( 'oxorder' );
            $this->_oDelAddress = $oOrder->getDelAddressInfo();
        }
        return $this->_oDelAddress;
    }

Diese Methode brauchst Du dann auch in der payment.php, dann steht Dir


<pre>[{$oView->getDelAddress()|@print_r:1}]</pre>

zur Verfügung.
Leider ist das Ergebnis leer, wenn Versandadresse gleich der Kundenadresse ist.

Ich empfehle, diese Methode als Modul für die payment-Klasse umzusetzen… und testen, testen, testen.

o das hilft mir weiter.

Wie updatesicher ist es, wenn ich hierfür ein Modul schreibe?