Hallo liebe Gemeinde,
Die an mich gestellte Anforderung ist: eine Formel für die Versandkostenberechnung einzubinden, die auf dem Gesamtgewicht des Warenkorbs beruht und die Entfernung in KM vom Standort zur Lieferadresse berücksichtigt.
Ich habe eine
class mydelcost extends mydelcost_parent
public function getDeliveryPrice ...
...
case '%'
if ($this->oxdelivery__oxaddsum->value == 999) {
$this->oPrice->add($this->_dWeight * $this->oxuser__WEKM->value
...
erstellt, die oxdelivery erweitert (getDeliveryPrice hab ich aus oxdelivery kopiert).
In den Versandkostenregeln habe ich mir für die entsprechende Kategorie eine Regel angelegt, die auf dem Gewicht basieren soll und 999 % hinzurechnen soll.
Danach frage ich bei switch ($this->oxdelivery__oxaddsumtype->value) ab und kann dort die Versandkosten manipulieren. Das funktioniert soweit.
Nun kommen meine Problem:
- Ich komme hier mit meinen PHP-Kenntnissen nicht an das Gesamtgewicht des Warenkorbs ran, obwohl ja in oxdelivery in $this->_dWeight das Gewicht stehen sollte, oder?? Wie kann ich auf den Wert in meiner Extension zugreifen mit $this->_dWeight bekomme ich immer den Wert 0.
- Was muss ich tun, damit ich beim User des Warenkorbs in der Tabelle oxaddress oder oxuser ein hinzugefügtes Feld, das die Entfernung enthält auslesen kann. Das Feld kann ich wie geplant von der Admin-Seite füllen, so wie es geplant war, aber ich weiß nicht, was ich tun muss um es in der Extension abzufragen.
Ich wäre für eine Hilfestellung sehr dankbar.
- du solltest dir generell abgewöhnen direkt auf den underscore variablen zu arbeiten, nimm dafür einen geeigneten getter oder eine Funktion. Außerdem gibt es in der Klasse oxdelivery überhaupt keine Variable _dWeight. Das Gewicht des Warenkorbs bekommst du über
oxSession::getInstance()->getBasket()->getWeight();
- Das Feld fügst du einfach der Tabelle hinzu, erweiterst den Admin Screen und kannst dann über:
$oUser->oxuser__meindbfeld->value
damit arbeiten, analog natürlich mit oxaddress.
P.S. Entwickler Fragen stellst du auch als newbie doch lieber im Entwickler Forum.
Vielen Dank aggrosoft für die schnelle Antwort.
Leider kann ich auch damit keine Ergebnisse erzielen. Bei mir sieht es folgendermassen aus (das ist nicht die endgültige Formel sondern nur zum Testen):
$bWeight = oxSession::getInstance()->getBasket()->getWeight();
$km = $oUser->oxuser__wekm->value;
$this->_oPrice->add($km * $bWeight + 5 );
Der Zugriff auf das zusätzliche Feld wekm im Adminscreen funktioniert ja schon.
Aber in meiner mydelcost habe ich offensichtlich immer noch keinen Inhalt bei beiden Variablen. Ich bekomme leider nur 5€ angezeigt, obwohl bei dem User 45 km und mehrere Tausend kg-Gewicht im Basket liegen.
Macht es einen Unterschied, dass wir die CE 4.5.4 verwenden?
Ich kann auch im Debug-Mode die Werte finden, sogar mehrmals im Objekt Basket unter _dWeight und als oxuser__wekm, aber in der riesen Menge an Daten finde ich leider nicht raus, warum ich auf die Daten nicht wie oben beschrieben zugreifen kann, oder was ich ändern müßte.
Hast Du mir noch einen tollen Tipp woran das liegen kann?
Vielen Dank
Martin