Sendungsverfolgung bei mehreren Dienstleistern

Für den Fall, dass jemand ebenfalls mehrere Dienstleister zum Versenden nutzt, hier meine Lösung ohne eine Veränderung der Datenstrukturen:

[B]Allgemeines[/B]
OXID bietet bereits im Standard die Möglichkeit einen “Lieferung Trackcode” im Backend / Administrationsbereich für jede Bestellung auf dem zweiten Tabreiter zu speichern.

Jedes Versandunternehmen hat logischerweise eine eigene URL unter der mit dem Trackingcode der Versandstatus abgezeigt werden kann. Daher ist für die Erkennung, welcher Dienstleister verwendet wird, ein weiteres Attribut / Datenbankfeld erforderlich.

[B]Lösung[/B]
Um das zu verhindern, wird ein dreibuchstabige Abkürzung des Versanddienstleisters zusammen mit der Versendungsnummer in einem Feld in Oxid gespeichert.

Dazu wird einfach dem Trackingcode eine dreibuchstabige Abkürzung vorne angehängt, die den jeweiligen Versanddienstleister definiert:

[ul]
[li]DHL - Deutsche Post / DHL[/li][li]DPD - DPD Dynamic Parcel Distribution[/li][li]GLS - General Logistics Systems[/li][li]UPS - United Parcel Service[/li][li]HMS - Hermes Logistik[/li][li]ILX - Iloxx[/li][/ul]

In das Feld in Oxid wird beispielsweise für die DHL-Verfolgungsnummer 0123456789 der Wert DHL0123456789 eingegeben. Für die Sendungsverfolgung eine GLS-Paketes wäre es GLS0123456789 usw.

[B]Kunden-Information[/B]
Um dem Kunden ebenfalls eine Sendungsverfolgung zu ermöglichen, kann folgender Smarty-Code in der Versendet E-Mail integriert werden:

[{if $order->oxorder__oxtrackcode->value }]
        Hier können Sie Ihre Sendung verfolgen: 
        [{if ($order->oxorder__oxtrackcode->value|substring:1:3) == 'DHL'}]
                <a href="http://nolp.dhl.de/nextt-online-public/track.do?zip=[{ $order->oxorder__oxbillzip->value }]&idc=[{ $order->oxorder__oxtrackcode->value }]&lang=de">DHL: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        [{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'ILX'}]
                <a href="https://www.iloxx.de/net/popup/trackpop.aspx?id=[{$order->oxorder__oxtrackcode->value|substring:4:99}]">ILOXX: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        [{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'DPD'}]
                <a href="http://extranet.dpd.de/cgi-bin/delistrack?typ=1&lang=de&pknr=[{$order->oxorder__oxtrackcode->value|substring:4:99}]">DPD: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        [{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'GLS'}]
                <a href="http://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo=[{$order->oxorder__oxtrackcode->value|substring:4:99}]&txtAction=71000">GLS: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        [{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'HMS'}]
                <a href="http://tracking.hlg.de/Tracking.jsp?TrackID=[{$order->oxorder__oxtrackcode->value|substring:4:99}]">Hermes: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        [{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'UPS'}]
                <a href="http://wwwapps.ups.com/WebTracking/processRequest?HTMLVersion=5.0&Requester=NES&AgreeToTermsAndConditions=yes&loc=de_DE&tracknum=[{$order->oxorder__oxtrackcode->value|substring:4:99}]">UPS: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        [{else}]
                <a href="http://nolp.dhl.de/nextt-online-public/track.do?zip=[{ $order->oxorder__oxbillzip->value }]&idc=[{ $order->oxorder__oxtrackcode->value }]&lang=de">DHL: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        [{/if}]
[{/if}]

[B]Smarty Modifier[/B]
Da der Modifier substring in der Oxid Installation noch nicht dabei ist, muss als Weiteres der nachfolgende Code in der Textdatei modifier.substring.php in dem Verzeichnis /core/smarty/plugins gespeichert werden.

function smarty_modifier_substring($sString, $iPosition, $iLength)
{
    return substr($sString, $iPosition-1, $iLength);
}

Viel Spaß beim Ausprobieren
Joachim

P.S.: Wer kennt / nutzt noch weitere, andere Dienstleister?

Sehr genial - Danke fürs Teilen!

Hi,

sehr cool!
Da fällt mir spontan diese Extension ein:
https://projects.oxidforge.org/projects/carriertracking

Läßt sich das ggf. in diesem Sinne erweitern?

Gruß

Hallo Joachim,
das ist ja super! Ich habe vorgestern auf dem Heimweg über eine ähnliche Idee nachgedacht.

Da wir nur per UPS und Hermes versenden, hätte ich einen etwas anderen Ansatz gewählt. Die UPS-Paketnummern fangen immer mit unserer Kundennummer an.
Ein extra-Kürzel ist dann also überflüssig. Es würde eine einzige ifthenelse-Anweisung ausreichen.

@All
Danke, die Lösung entstand, da ein Teil direkt von Großhändler versandt wird, um Porto- und Lagerkosten zu reduzieren. Die haben (logischerweise) ihre eigenen Versender. Daher war das Ziel möglichst viele Versender auf einfachem Wege zu unterstützen.

@Marco
ja, die habe ich mir schon mal angesehen und auch testweise installiert. Die Entscheidung zur eigenen Lösung fiel aber deshalb, da ich mit möglichst wenig Änderungen auskommen wollte.

@Christoph
Wie kannst Du zwischen einem UPS und einem Hermes Tracking-Code unterscheiden?

P.S.: In Kürze kommt eine neue Version des Piwik-Plugins, das ebenfalls diese Art der Code-Kennzeichnung versteht.

[QUOTE=job963;78594]
@Christoph
Wie kannst Du zwischen einem UPS und einem Hermes Tracking-Code unterscheiden?
[/QUOTE]
Die UPS-Tracking-Nummer fängt immer mit unserer UPS-Kundennummer an.
Also in etwas so [B]1Z27429V[/B]6849534894088
Der fett makierte Teil ist die gleichbliebende Kundennummer. Wie man das in Smarty abfragt habe ich aber noch nicht geklärt.

Ähh, mir fällt gerade ein, das das im Prinzip ja auch nur ein “Substring” wie in deiner Lösung ist. :eek:

jupp, du könntest ja unter else die Kurzform behandeln und dort deine Kundennummer gleich reinhängen (also nach &tracknum= ):

[{else}]
                <a href="http://wwwapps.ups.com/WebTracking/processRequest?HTMLVersion=5.0&Requester=NES&AgreeToTermsAndConditions=yes&loc=de_DE&tracknum=1Z27429V[{$order->oxorder__oxtrackcode->value|substring:4:99}]">UPS: 1Z27429V[{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
        

tja, und wie es so ist, wenn man tiefer gräbt, findet man so manche Leiche im Keller:)

Wie z.B., dass bis zu 4.4.8 in der account_order.tpl :frowning: hardcoded in der Bestellhistorie ein Link auf DPD drin ist, oder noch genialer ab der 4.5 die URL in der /[U]core[/U]/oxorder.php :mad: fest ein Link auf DPD drin ist.

Da kann ich nur sagen:
Note 6 - setzen und hundert mal schreiben “Ich soll keine Resourcetexte hardcodieren!”

Aber es lässt sich beheben.

[B]Bis zur 4.4.8[/B] in der [I]account_order.tpl[/I] folgenden Code verwenden:

[{ assign var=styleTrackId value="text-decoration:underline;" }]
[{if ($order->oxorder__oxtrackcode->value|substring:1:3) == 'DHL'}]
  <a href="http://nolp.dhl.de/nextt-online-public/track.do?zip=[{ $order->oxorder__oxbillzip->value|substring:4:99 }]&idc=[{ $order->oxorder__oxtrackcode->value }]&lang=de" style="[{$styleTrackId}]" target="_blank">DHL: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'ILX'}]
  <a href="https://www.iloxx.de/net/popup/trackpop.aspx?id=[{$order->oxorder__oxtrackcode->value|substring:4:99}]" style="[{$styleTrackId}]" target="_blank">ILOXX: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'DPD'}]
  <a href="http://extranet.dpd.de/cgi-bin/delistrack?typ=1&lang=de&pknr=[{$order->oxorder__oxtrackcode->value|substring:4:99}]" style="[{$styleTrackId}]" target="_blank">DPD: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'GLS'}]
  <a href="http://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo=[{$order->oxorder__oxtrackcode->value|substring:4:99}]&txtAction=71000" style="[{$styleTrackId}]" target="_blank">GLS: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'HMS'}]
  <a href="http://tracking.hlg.de/Tracking.jsp?TrackID=[{$order->oxorder__oxtrackcode->value|substring:4:99}]" style="[{$styleTrackId}]" target="_blank">Hermes: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'UPS'}]
  <a href="http://wwwapps.ups.com/WebTracking/processRequest?HTMLVersion=5.0&Requester=NES&AgreeToTermsAndConditions=yes&loc=de_DE&tracknum=[{$order->oxorder__oxtrackcode->value|substring:4:99}]" style="[{$styleTrackId}]" target="_blank">UPS: [{$order->oxorder__oxtrackcode->value|substring:4:99}]</a>
[{else}]
  [{$order->oxorder__oxtrackcode->value}]
[{/if}]

[B]Ab der 4.5[/B] folgende Änderungen vornehmen:
[I]oxorder.php[/I] anstelle der Zeile $this->_sShipTrackUrl = "http://www.dpd.de/cgi-bin

	$sCarrier = substr($this->oxorder__oxtrackcode->value, 0, 3);
	$sTrackId = substr($this->oxorder__oxtrackcode->value, 3);
	
	switch ($sCarrier) {
		case "DHL":
			$this->_sShipTrackUrl = "http://nolp.dhl.de/nextt-online-public/track.do?zip=".$this->oxorder__oxbillzip->value."&idc=".$sTrackId."&lang=de";
			break;
	
		case "ILX":
			$this->_sShipTrackUrl = "https://www.iloxx.de/net/popup/trackpop.aspx?id=".$sTrackId;
			break;
	
		case "DPD":
			$this->_sShipTrackUrl = "http://extranet.dpd.de/cgi-bin/delistrack?typ=1&lang=de&pknr=".$sTrackId;
			break;
	
		case "GLS":
			$this->_sShipTrackUrl = "http://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo=".$sTrackId;
			break;
	
		case "HMS":
			$this->_sShipTrackUrl = "http://tracking.hlg.de/Tracking.jsp?TrackID=".$sTrackId;
			break;
	
		case "UPS":
			$this->_sShipTrackUrl = "http://wwwapps.ups.com/WebTracking/processRequest?HTMLVersion=5.0&Requester=NES&AgreeToTermsAndConditions=yes&loc=de_DE&tracknum=".$sTrackId;
			break;
	
		default:
			$this->_sShipTrackUrl = "".$this->oxorder__oxtrackcode->value;
			break;
	}
}

und wer die TrackID dem Kunden anzeigen möchte in der [I]order.tpl[/I] anstelle von [{ oxmultilang ident=“PAGE_ACCOUNT_ORDER_TRACKSHIPMENT” }]

[{if ($order->oxorder__oxtrackcode->value|substring:1:3) == 'DHL'}]
  DHL: [{$order->oxorder__oxtrackcode->value|substring:4:99}]
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'ILX'}]
  ILOXX: [{$order->oxorder__oxtrackcode->value|substring:4:99}]
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'DPD'}]
  DPD: [{$order->oxorder__oxtrackcode->value|substring:4:99}]
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'GLS'}]
  GLS: [{$order->oxorder__oxtrackcode->value|substring:4:99}]
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'HMS'}]
  Hermes: [{$order->oxorder__oxtrackcode->value|substring:4:99}]
[{elseif ($order->oxorder__oxtrackcode->value|substring:1:3) == 'UPS'}]
  UPS: [{$order->oxorder__oxtrackcode->value|substring:4:99}]
[{else}]
  </a>[{$order->oxorder__oxtrackcode->value}]<a href="">
[{/if}]

salut,

>>Wie z.B., dass bis zu 4.4.8 in der account_order.tpl hardcoded in der Bestellhistorie ein >>Link auf DPD drin ist, oder noch genialer ab der 4.5 die URL in der /core/oxorder.php fest >>ein Link auf DPD drin ist.

Eventuell was für den Bugtracker?
Oder ein Feature-Wunsch? :wink:

ceau

https://bugs.oxid-esales.com/view.php?id=2164

[QUOTE=Hebsacker;78781]https://bugs.oxid-esales.com/view.php?id=2164[/QUOTE]

Aua, das tut weh! :eek:

Hat da jemand 2Jahren alten Quelltext recycelt oder wo kommt das her? :confused: :mad: :confused:

OK, der Kommentar ganz unten im Bugtracker besagt, dass man es ändern kann, in dem man oxOrder::getShipmentTrackingUrl() überschreibt. Wer weiß, wie das geht, kann ja mal aufklären.

Für alle, die den Bug (und den Hinweis im Kommentar) nicht sehen, stellt sich die Situation dann so dar:

  • In der 4.4.8 ist die DPD-URL in Zeile 58 drin.
  • In der 4.5.5 ist es in die Core-Datei oxorder.php verschoben worden. (Zeile 2079)
  • Und in der 4.6.0 Beta 2 ist es ebenfalls noch drin. (Zeile 2211)

Das ist meiner Ansicht nach aber auch noch nicht das gelbe vom Ei, da die Tracking URL nur mittels Modul überschrieben werden kann.
Viel besser wäre es, wenn man den/die Basislink/s zum Versender individuell im Backend hinterlegen könnte, oder eben auch freilässt und diese Info dann zum Beispiel mit Deinem Code-Snippet in die eMail verschiebt.

Dazu wären dann aber wenigstens 3 Eingabefelder im Backend von Nöten, mehr Dienstleister dürften wohl die meisten nicht parallel nutzen.
Ob das was für die 4.6.0 wäre?

Da geb ich dir vollkommen recht. Die jetztige Lösung schließt einen Großteil der Nutzer aus, da sie zu kompliziert ist. Gleichzeitig ist das Mitteilen der Tracking-Nr heute als Standardfunktion zu betrachten und betrifft nahezu 100% der Shopanbieter.

Daher würde ich eine zeitnahe Umsetzung (4.6) zumindest einer Basis-URL ebenfalls wünschen. Soviel Aufwand ist da nicht dahinter.

So - sicherheitshalber neben den Kommentaren in den entsprechenden Bug-Einträgen zusätzlich noch in die Uservoice abgelegt, damits nicht untergeht. Ist ja halb Bug und halb Feature-Request…

Fleissig abstimmen!

Hallo,

ich möchte mich hier noch mit dran hängen.
auch wir haben mit der 4.5.7 das problem dass bei der kundeninfo der link “wo ist meine bestellung” automatisch auf dpd geht.

wir senden zwar inzwischen den richtigen link mit der versandmail abe rim kundencenter sollte das auch richtig stehen.

wer kann mir sagen wie ich das überschreiben/ändern kann?

Gruss
volker

Hallo Volker,

mach am besten noch einen Bug dazu auf. Weißt Du, wie’s geht?

Danke und Gruß von unterwegs

Hallo Marco,

hab ich bisher glaub ich noch nicht gemacht.
Ihr nutzt aber soweit ich das gesehen habe auch mantis oder?
Ich schau mal schnell und eröffne einen neuen bug.

done. Issue 3632

gruss
volker

in die Tutorials aufgenommen - inklusive der Variante als Modul:

Sagt mal - wenn ich nun mehrere Pakete versende und deshalb zu einer Order mehrere Tracking-IDs hinterlegen will … wie mach ich dann das?