Jump to content

Shop bzw. Country Context Manipulation, aber wie?


Recommended Posts

Hallo liebe Community,

 

Ich muss in einem Script den Shop bzw genauer den Country Context manipulieren, schaffe es aber nicht die Country ID zu allgemein zu setzen.

 

Warum das Ganze:

Ich habe ein Script was mir ein File erstellen soll mit bereits richtig berechneten Preisen. Die Steuersätze die hier herangezogen werden sind unterschiedlich pro Land.

Da ich kein eingeloggter User bin sonder alles direkt aufrufe erkennt er anhand von geotagging immer meinen Standort und natürlich nicht den den ich brauchen würde.

 

Meine Idee:

Wenn ich aus dem Script komme setze ich den Allgemeinen Context, so dass ich überall "simuliere", dass ich aus einem anderen Land komme.

 

Leider finde ich dazu nicht viel.

Ich weiß, dass ich per

Context::getContext();

auf den Context zugreifen kann, aber schaffe es einfach nicht die country ID zu setzen wie ich sie möchte.

 

Ich würde mich über Hilfe freuen und wünsche euch einen guten Start in die Woche!

 

LG

Edited by R4xx4r (see edit history)
Link to comment
Share on other sites

 Hallo und gleich mal DANKE für die schnelle Antwort!


Es gibt eine Niederlassung mit mehreren "Märkten".
Mein Script ist ein Export der Daten mit relevanten Infos unter anderem auch die Preise.

Wir haben also eine com domain welche dann per /de /it /... auf die jeweiligen Shops zeigt.

Das Script ist ein eigenes Modul welches dann einfach aufgerufen wird => er hat quasi keine Länder Zuordnung -> das geotagging greift und ordnet mich zu (Ich sitze in Östereich, daher mit der country id für AT)

Context::getContext()->country->id = 10;

setzt es zwar richtig, aber bei der Tax Berechnung wird einfach nicht der richtige Wert hergezogen.

 

Hier überprüfen wir auch anhand der TLD wo wir uns befinden und setzen sogar manuell das Land - wir faken also quasi, dass wir aus Italien sind - Leider auch das ohne Erfolg

switch ( $shop ) {
	case "DE":
		/* ... */
		break;
	case "AT":
		/* ... */
		break;
	case "IT":
		$id_shop = 6;
		$id_lang = 4;
		$country = Country::getCountriesByZoneId(10, 4);
		Shop::setContext(Shop::CONTEXT_SHOP, 6);
		Context::getContext()->shop->id = 6;
		Context::getContext()->country = $country;
		break;
}

 

Falls es relevant ist handelt es sich explizit um die Version 1.7.3.1

Edited by R4xx4r (see edit history)
Link to comment
Share on other sites

Mittlerweile haben wir die Lösung gefunden wie wir dieses Problem lösen.

Der Context war einfach falsch gesetzt. dieses wurde wie folgt angepasst und siehe da, wir haben den richtigen Context:

switch ( $shop ) {
	case "DE":
		$id_shop = 1;
		$id_lang = 1;
		$replace = '.com/de/';
		Context::getContext()->country = new Country((int)1);  // ID 1 für Deutschland
		break;
	case "AT":
		$id_shop = 5;
		$id_lang = 1;
		$replace = '.com/at/';
		Context::getContext()->country = new Country((int)2);  // ID 2 für Österreich
		break;
	case "IT":
		$id_shop = 6;
		$id_lang = 4;
		$replace = '.com/it/';
		Context::getContext()->country = new Country((int)10); // ID 10 für Italien
		break;
}

 

Wenn man die ID's der Länder nicht weiß, kann man sich diese aber auch recht schnell mit folgendem Snippet holen:

echo '<pre>';
var_dump(Country::getCountries());
die();

 

ACHTUNG: Man darf nicht eingeloggt sein im Frontend, da sonst die Adresse des eingeloggten Users genommen wird - Diese dürfte eine höhere Gewichtung haben.

 

Ich hoffe, ich konnte vlt. dem ein oder anderen damit helfen!

 

LG

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...