Jump to content
xt:Commerce Community Forum

Variablen vie Array an XTC übertragen...


aschieferbein

Recommended Posts

Hallo liebe Community,

ich möchte den Warenkorb ein wenig für ein aktuelle Projekt aufwerten, dazu habe ich +/- Button in den Warenkorb eingefügt. Die Produktanzahl, Preis etc. funktionieren so weit auch ganz gut.

Realisiert habe ich das alles via JQuery, nun würde ich das Formular cartform einfach via $("#cartform").serialize() und einem Ajax Reqest übertragen.

Grundlegende Frage, da ich so was in der Richtung noch nie gemacht habe. An welche Datei muss ich mein serialisiertes Array übergeben? Ich habe etwas von einer $tpl_data gelesen, leider bin ich nicht so recht schlau aus der Sache geworden.

Ich wäre für Denkanstöße produktiver Natur sehr dankbar.

Link to comment
Share on other sites

Ok, das ist ja immer hin schon mal ein Ansatz.

Im Originalshop sieht der Post so aus..

9qdduddb.png

Und in meinem so..

9o7kl2sc.png

Auch ich als Anfänger verstehe wieso das nicht funktionieren kann.

Ich habe in dieser Anleitung oder Beispiel gelesen das ich das serialisierte Array auf der PHP "Seite" wieder un/ oder besser gegenserialisieren muss.. Ok, klingt beides blöd, liege ich damit richtig?

Link to comment
Share on other sites

So, ich bin einen Schritt weiter..


		var action = "update_product";

		var data_form = [

						{name:"action", value:action},

						{name:"products_key[]", value:prod_id},

						{name: "qty[]", value:prod_quan}];


		//AJAX Request

		$.ajax({

			type: "POST",

			url: 'http://localhost/shop2/index.php',

			data: data_form,

			// success: {$("form[name=action]").submit()}

			});

Der Post von meinem Ajax Request und vom Original Template sehen extakt gleich auch.

Mit Ajax Request

f5ojzmd4.png

Original Request

eqo3cfud.png

Damit sollte ich schon mal auf dem richtigen Wege sein oder?

Ich habe mir die form_handler.php angeschaut und auch halbwegs, grundlegend verstanden, glaube ich zu mindestens.

Die Datei nimmt die $_POST & $_GET Anfragen eingegen, speicher sie in jeweils seperaten Arrays, fügt Sie zusammen und wendet eine switch/case Unterscheidung auf dieses Array an. Unterscheidungskriterien sind dann meines Erachtens die action Attribute, korrekt? Für meinen Fall muss ich action=update_product auswählen, ich hab das einfach mal per JQuery definiert, da die Aktion welche durch den click auf den + Button ausgelöst werden soll ja immer die gleiche ist.

So da ich Neuling bin, eine doofe Frage an dieser Stelle.

Wenn ich Werte via $_POST jeglicher Art sende, ist es ja nur logisch das ich die veränderten Werte via $_GET wieder "hole" richtig? Ich habe mir via Firebug jedenfalls das Verhalten des Standart Templates angeschaut und dort folgt auf jeden $_POST automatisch ein $_GET.. Scheint für mich auch logischer Natur.

Link to comment
Share on other sites

@9Gleis1/2 THX..

Mittlerweile funktioniert der Datenaustausch ohne Probleme, muss noch ein wenig optimiert werden aber ich bin guter Dinge das die Geschichte irgend wann meinen Wünschen entspricht.. Daten landen bereits auch alle korrekt im Session Objekt, Daten refresh funzt auch.. Wenn ich ehrlich bin, weis ich garnicht wieso man hier ein so großes Geheimniss um solche Geschichten macht. Wenn ich nicht auf dem kompletten Holzweg bin, dann ist Datenaustausch mit Ajax in XTC garkeine große Sache. Was einfach hier nur nervt, man bekommt kaum eine Antwort, und natürlich gibt es kaum Beispiele.. Ich glaube ich werde meinem Chef mal einen anderes Shop System nahelegen. Die Community von anderen Shop Systemen ist DEUTTTLICH hilfsbereiter und ich muss ehrlich sagen, dann macht das entwickeln auch mehr Spaß wenn man mal eine Antwort auf seine Frage bekommt.. Nun gut, das ist eine andere Geschichte..

Aktuell arbeite ich auf XTC 4.1, die URL Geschichten (absolute Pfade) passe ich erst zum Schluß an wenn ich die komplette Funktionalität in ein Pluging gepackt habe..

Link to comment
Share on other sites

@aschieferbein

Mittlerweile funktioniert der Datenaustausch ohne Probleme, muss noch ein wenig optimiert werden aber ich bin guter Dinge das die Geschichte irgend wann meinen Wünschen entspricht.. Daten landen bereits auch alle korrekt im Session Objekt, Daten refresh funzt auch.. Wenn ich ehrlich bin, weis ich garnicht wieso man hier ein so großes Geheimniss um solche Geschichten macht. Wenn ich nicht auf dem kompletten Holzweg bin, dann ist Datenaustausch mit Ajax in XTC garkeine große Sache.

Es werden von einem Shop die Warenkorb-Daten auf einen anderen Shop und ein anderes Checkout verschoben.

Mir erschließt sich die Sinnhaftigkeit nicht wirklich.

Link to comment
Share on other sites

@9Gleis1/2 wird es nicht, ich habe lediglich zwei lokale XTC VErsionen hier laufen. Ich habe unseren aktuellen Shop lokal installiert und geupdatet (Shop1 praktisch). Da dieser aber viel Content enthält, entwickle ich die Warenkorb Funktionalität auf einer frischen 4.1 Shop Version...

Und keine Sorge, wir haben mehr als nur eine Lizenz, das passt alles.. ;)

Ich arbeite praktisch in Shop2..

Link to comment
Share on other sites

Ich kann deine Motivation gut nachvollziehen und halte auch den Ansatz für praktikabel - soweit ich ihn verstanden habe. Es wäre hilfreicher gewesen, wenn du genauer aufgeschlüsselt hättest, was du tun willst. Ich schreibe mal runter, wie ich dein Vorgehen verstanden habe:

1. Du änderst per AJAX die Values für die Anzahl eines Artikel per +/- Button.

1.1 Was soll eigentlich passieren, wenn die Anzahl auf 0 gesetzt wird? Soll der Artikel dann aus der Liste gelöscht werden? Ein Verhalten für den Fall solltest du vorher definieren!

2. Du passt bei änderter Anzahl automatisch den Preis an.

2.1 Hierbei solltest du mögliche Staffelpreise beachten! Also entweder diesen Fall per Definition ausschließen oder du musst dir die richtigen Preise aus dem Shop per AJAX laden! Wenn du ihn per Definition ausschließt, sollte eine einfache mathematische Operation mit dem Einzelpreis reichen oder hab ich da einen Fall vergessen?

3. Du überträgst das geänderte Formular an den Shop, damit die aktualisierten Daten auch dort hinterlegt werden.

3.1 Eine unsaubere aber schnelle Lösung wäre das Formular einfach per AJAX zu senden und die komplette Seite sich zurückgeben zu lassen. Unsauber wegen der unnötige Generierung der Seite durch das Shop-System und die daraus resultierende Belastung der Datenbank und der Traffic bei der Übertragung. (So macht es aber zum Beispiel das Plugin vt_addproduct_nocart.)

3.2 Sauberer wäre es dafür eine eigene Schnittstelle zu implementieren, die die Funktionalität beim Absenden des Formulars auf das nötige Minimum reduziert.

4. Wichtig ist in jedem Fall zu überprüfen, ob die Änderungen korrekt vom Shop angenommen wurden. Ansonsten kann es zu einer Abweichung zwischen der Anzeige beim User und den Daten im Shop kommen! Diese sieht der User beim normalen Einkaufsverhalten dann erst auf der Bestellbestätigungsseite (/checkout/confirmation) oder er achtet da nicht mehr drauf und bestellt dann falsch.

4.1 Wenn du die unsaubere Lösung aus 3.1 nimmst, kannst du die zurückgegebene Seite auswerten und schauen, ob die Daten stimmen.

4.2 Bei der sauberen Lösung solltest du dir ein JSON zurückgeben lassen, in dem steht, ob die Prozedur erfolgreich war.

Feedback zu diesen Gedanken wäre fein, weil ich mich dem Thema auch bald widmen werde. :-)

Freundliche Grüße

Jeldrik

Link to comment
Share on other sites

@Jeldrik

Du änderst per AJAX die Values für die Anzahl eines Artikel per +/- Button

.....

Guten Tag,

Alex@4tfm hat das mobile template als Referenz angesprochen. Im mobilen Template ist (per default) ajax deaktiviert. Zur Änderung der +/- Button ist auch kein Ajax erforderlich. Zur Formularänderung des Warenkorbs ist ebenfalls kein ajax erfoderlich.

Via ajax kann mit der DB direkt kommunizieren werden.

Genau das macht mich stutzig und vorsichtig, wenn zwei verschiedenen Shops im Einsatz sind.

Link to comment
Share on other sites

@Jeldrik, Sorry, bei Punkt 1 muss es natürlich JavaScript heißen.

1. Du änderst per AJAX die Values für die Anzahl eines Artikel per +/- Button.

1.1 Was soll eigentlich passieren, wenn die Anzahl auf 0 gesetzt wird? Soll der Artikel dann aus der Liste gelöscht werden? Ein Verhalten für den Fall solltest du vorher definieren!

Nach einer Durchsicht von xtc 4.1 kann Punkt 1 der Liste (@Jeldrik) bereits als gelöst abgehackt werden.

1. mobile Template-Lösung für einen +/- Button

Der Quellcode xtc 4.1 ist von jedem nachvollziehbar und prüfbar.

Wenn man das mobile Template von xtc 4.1 hinsichtlich der Funktionsweise des +/- Buttons analysiert, so ist die Verwendung von JQuery Ajax oder JQuery Mobile Ajax nicht erfoderlich.

2. @aschieferbein -Lösung für einen +/- Button

Im Forum wurde von @aschieferbein eine Lösung für Punkt 1 gepostet .

Nach Angeben von @aschieferbein funktioniert dieser Lösungansatz.

Die Lösung ist jedoch nicht nachvollziehbar, denn mit der Funktion "load" wird eine Referenz auf "someFile.php" gesetzt.


$(this).parent().parent().find("li:last").children("input").val(count_prod, function (){

			$("ul.change_quantity").load('someFile.php',{'products_key[], count_prod': 'someValue'});

		});

Welche Funktion "someFile.php" hat wird leider nicht erklärt.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...