Bestellungen von OXID eShop zu Afterbuy übertragen

Wir werden die Klasse oxorder erweitern.
Also in modules ein Hauptverzeichnis anlegen z.B. : /modules/htr_afterbuy dort die Klasse welche oxOrder erweitern wird später : afterbuyorder.php und in classes: htr_afterbuy_orderurl.php

Ok, afterbuyorder.php:

<?php
class afterbuyorder extends oxOrder{
var $htr_emailsent=0;
var $oxidsendmail;

    function kbenutzername($kident){
        #return urlencode($this->oxorder__oxuserid.'_'.$kident.'_'.$this->oxorder__oxordernr);
        return urlencode($kident.'_'.$this->oxorder__oxordernr);
    }

    function htrp($name){
        $prop='oxorder__ox'.$name;
        $result=(string) $this->$prop;
        $result=rawurlencode(utf8_decode($result));
        return $result;
    }

    function htrcountry($kind){#bill/del
        $prop='oxorder__ox'.$kind.'countryid';
        $htrCountry=new htrCountry();
        $htrCountry->load($this->$prop);
        $result=(string) $htrCountry->oxcountry__oxisoalpha2;
        #$result=$this->_getCountryTitle($result);
        return $result;
}

function order2afterbuy($orderoxid,$send=true){
     #require_once(getShopBasePath(). "/core/oxfunctions.php");
     #require_once(getShopBasePath(). "/core/adodblite/adodb.inc.php");
     require_once(dirname(__FILE__).'/classes/htr_afterbuy_orderurl.php');
     #require_once(dirname(__FILE__). "/htr_oxid.php");

     #$afterbuy=oxnew('htr_afterbuy');
     $afterbuy= new htr_afterbuy_orderurl();
     $this->oxidsendmail=$afterbuy->oxidsendmail;
     $urlen=$afterbuy->order2url($this);
if($send){
return $afterbuy->submiturl($urlen);
}else{
return $urlen;
}
    }
    protected function _sendOrderByEmail( $oUser = null, $oBasket = null, $oPayment = null )
    {
        $orderoxid=$this->_sOXID;
        $ret=$this->order2afterbuy($orderoxid);
file_put_contents(dirname(__FILE__).'logs/afterbuy_order.txt',$ret,FILE_APPEND);
        // add user, basket and payment to order
        $this->_oUser    = $oUser;
        $this->_oBasket  = $oBasket;
        $this->_oPayment = $oPayment;
$this->htr_emailsent=1;
        $iRet = 1;
        if($this->oxidsendmail==1){
         $iRet=0;
         $oxEmail = oxNew( 'oxemail' );

         // send order email to user
         if ( $oxEmail->sendOrderEMailToUser( $this ) ) {
            // mail to user was successfully sent
            $iRet = 1;
         }
// send order email to shop owner
         $oxEmail->sendOrderEMailToOwner( $this );
}
        return $iRet;
    }    
}
?>

Hierzu ein paar Details:

class afterbuyorder extends oxOrder{

heisst wir erweitern/bzw. übergehen die OXID Klasse oxOrder
Hier interessant ist die überschriebene Funktion: function _sendOrderByEmail

Hier ist die Stelle wo OXID die Email an den Kunden verschickt, hier wollen wir eingreifen, und stattdessen
die Bestellung an Afterbuy übergeben, die dann die ihrerseits eine E-Mail an den Kunden verschickt.

require_once(dirname(__FILE__).'/classes/htr_afterbuy_orderurl.php');
$afterbuy= new htr_afterbuy_orderurl();
$this->oxidsendmail=$afterbuy->oxidsendmail;
$urlen=$afterbuy->order2url($this);

Logik in Kurzform:

afterbuyorder.php: Erweitert die oxOrder Klasse um den Transfer der Order zu Afterbuy

  1. htr_afterbuy_orderurl: letzlich enthält die Funktion zum Übermitteln der Daten an Afterbuy und auslesen der ini Datei

Hier das Modul zum runterladen:

htr_afterbuy

Ausblick:

Man sieht, wie einfach es ist für OXID ein Modul zu schreiben, Afterbuy ist hierfür nur ein gutes Beispiel.
Der Code und die Dokumentation von OXID ist sehr gut, auch wenn Beispiele fehlen, andererseits sehe ich es so, dass die Community dafür sorgen sollte, dies hier als erster Schritt.



0 Kommentare

Dein Kommentar

An Diskussion beteiligen?
Hinterlasse uns Deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.