[neues plugin] wellrad - Onlineshop

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Martin
Posts: 346
Joined: Thu Oct 23, 2008 11:57 am
Contact:

Re: [neues plugin] wellrad - Onlineshop

Post by Martin » Mon Dec 01, 2008 6:34 pm

Nein, nicht mit dem aktuellen Vorhandensein vom Quick.Cart, aber vielleicht hat Quick.Cart oder ein anderer schon einen 'customer' in der Session registriert.

Das wellrad-Plugin initialisiert einen 'customer' und registriert ihn in der Session, sobald etwas in den Korb gelegt wird.

In der Plugin-index.php wird dann schlicht überprüft, ob es einen $_SESSION['customer'] gibt. Wenn ja, dann versucht das Plugin, die Warenkorbvorschau anzuzeigen. Dabei bittet es dann den 'customer' um Mithilfe - und geht davon aus, dass es sich um einen zuvor von ihm intitialisierten 'Customer' handelt.

Ich vermute das Problem ja immer noch an dieser Stelle. Besteht es denn nach einem

Code: Select all

unset($_SESSION['customer']);
noch weiter?

Martin

Till
Posts: 337
Joined: Tue May 20, 2008 7:20 am
Location: Germany: Bremen
Contact:

Re: [neues plugin] wellrad - Onlineshop

Post by Till » Mon Dec 01, 2008 8:15 pm

Martin wrote:Nein, nicht mit dem aktuellen Vorhandensein vom Quick.Cart, aber vielleicht hat Quick.Cart oder ein anderer schon einen 'customer' in der Session registriert.
Ich hatte doch eben schon gesagt: Quick.Cart war gar nicht mehr drin. Das hatte ich doch gelöscht! Außerdem hat Quick.Cart sowieso nichts damit zu tun, weil es nämlich selbständig in einem iframe läuft und nicht als plugin. Und es war nicht mal aufgerufen. Oder sehe ich da was falsch.

Till

mvwd
Posts: 299
Joined: Tue Jun 17, 2008 10:35 pm
Location: Baden Württemberg / Germany
Contact:

Re: [neues plugin] wellrad - Onlineshop

Post by mvwd » Mon Dec 01, 2008 9:50 pm

Till wrote:Außerdem hat Quick.Cart sowieso nichts damit zu tun, weil es nämlich selbständig in einem iframe läuft und nicht als plugin. Und es war nicht mal aufgerufen. Oder sehe ich da was falsch.
...absolut richtig. Wellrad stört sich lediglich daran, daß bereits eine Session schon eröffnet wurde. Das Problem ist also prinzipiell in Clerk::add_to_cart() zu suchen. Vielleich schau ich mir das morgen nochmals an.

Im übrigen sollten wir auch für alle superglobalen Variablen Namenskonventionen einführen (etwa: $_SESSION['pluginname_variable'] oder $_SESSION['pluginname']['variable']) um Konflikte zu vermeiden.

mvwd.

Martin
Posts: 346
Joined: Thu Oct 23, 2008 11:57 am
Contact:

Re: [neues plugin] wellrad - Onlineshop

Post by Martin » Mon Dec 01, 2008 10:33 pm

Pardon! Ihr habt ja recht!

Wenn die Session schon an anderer Stelle gestartet wurde, kannte sie ja die 'Customer'-Klasse noch nicht, und der 'customer' bleibt 'incomplete'. Man muss ihn dann erstmal umwandeln. Ich hab das jetzt mal so, in der wellrad index.php,

Code: Select all

	if(!is_a($_SESSION['customer'], 'Customer')) {                            // wenn 'incomplete'
		$z_customer = new Customer();                                                // dann neues 'Customer'-Objekt initialisieren
		$customers_data = settype($_SESSION['customer'], 'Array');        // die Daten von $_SESSION['customer'] auslesen
		$customers_data = array_slice($_SESSION['customer'], 1);
		foreach($customers_data as $key => $value){                            // dem neuen Customer-Objekt übergeben
			$z_customer ->$key = $value;
		}
		$_SESSION['customer'] = $z_customer;                                      // und dieses in der Session registrieren
	}	
gelöst. - Einfach ganz weit oben, direkt hinter die Variablen-Deklarationen setzen.

Um den 'Customer', der im Laufe seiner Geschichte ganz schön abgespeckt hat, wäre es nun nicht schade. Der ist kaum noch mehr als ein Array. Aber es sollte doch prinzipiell möglich sein, 'Objekte' in der $_SESSION abzulegen, oder? Und auch dafür müsste man dann eine gemeinsame Lösung finden. Mein Vorschlag wäre, den session_start() komplett dem Pluginloader zu lassen - nachdem alle Klassen aller Plugins eingelesen wurden, sonst beißen den (alphabetisch) Letzten die Hunde.

Vielleicht wäre es Zeit für eine kleine virtuelle Entwicklerkonferenz: Namenskonventionen und auch eine Regelung für das Starten von Sessions müssen her. Ich weiss, dass ich auch wie es mir gerade passte die session (neu)gestartet habe - und 'customer' als Variablenname gehört auch verboten. Aber, nun ja, das Problembewußtsein steigt ...

Ich hoffe der kleine Hack ist schon mal ein Pflaster für das akute Problem. Bei mir hat 's geholfen.

Gute Nacht!

Martin

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: [neues plugin] wellrad - Onlineshop

Post by Holger » Mon Dec 01, 2008 11:05 pm

Martin wrote:Aber es sollte doch prinzipiell möglich sein, 'Objekte' in der $_SESSION abzulegen, oder?

Ja, Du kannst Objekte in Sessions speichern. Aber Du musst sicher stellen, dass die Klassen-Definition für solche Objekte vor dem Aufruf von session_start() includiert sind. Falls nicht, sind zwar die Objekte registriert, nicht aber ihre Methoden.

LG, Holger

Martin
Posts: 346
Joined: Thu Oct 23, 2008 11:57 am
Contact:

Re: [neues plugin] wellrad - Onlineshop

Post by Martin » Mon Dec 01, 2008 11:15 pm

Holger wrote:Ja, Du kannst Objekte in Sessions speichern. Aber Du musst sicher stellen, dass die Klassen-Definition für solche Objekte vor dem Aufruf von session_start() includiert sind.
Ja, klar, aber wie kann ich das denn sicherstellen, wenn jedes einzelne Plugin - oder heute zum Testen auch mal die cms.php - die Session möglicherweise schon längst, gestartet hat, als es sie gerade brauchte? Bevor mein Plugin überhaupt geladen wurde ...

Ich frag das jetzt im Ernst: Geht das irgendwie? Ich wäre freudig verwundert ...

Liebe Grüße

Martin

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: [neues plugin] wellrad - Onlineshop

Post by Holger » Mon Dec 01, 2008 11:28 pm

Martin wrote:
Holger wrote:Ja, Du kannst Objekte in Sessions speichern. Aber Du musst sicher stellen, dass die Klassen-Definition für solche Objekte vor dem Aufruf von session_start() includiert sind.
Ja, aber wie kann ich das denn machen, wenn jedes einzelne Plugin - oder heute zum Testen auch mal die cms.php - die Session möglicherweise schon längst, gestartet hat, als es sie gerade brauchte?

Ich frag das jetzt im Ernst: Geht das irgendwie? Ich wäre freudig verwundert ...

Liebe Grüße

Martin
Ich würde sagen - im Fall von CMSimple heute - nein, es geht nicht.
Warum? Die Antwort hast Du ja bereits gegeben:
Martin wrote:Und auch dafür müsste man dann eine gemeinsame Lösung finden. Mein Vorschlag wäre, den session_start() komplett dem Pluginloader zu lassen - nachdem alle Klassen aller Plugins eingelesen wurden, sonst beißen den (alphabetisch) Letzten die Hunde.
Ich glaube, so lange Du nicht verbieten kannst, dass irgend ein anderes Plugin bereits die Session startet, wird es nicht gehen. Aber ich lasse mich gerne vom Gegenteil überzeugen. Ich kenne jedenfalls keine andere Möglichkeit.
Der Einfachheit halber würde ich den 'Customer' in ein Array packen.

Holger

moprivat
Posts: 28
Joined: Mon Nov 24, 2008 9:30 pm

Re: [neues plugin] wellrad - Onlineshop

Post by moprivat » Mon Dec 08, 2008 4:00 pm

Hallo Martin,

ich habe das Plugin installiert und bin total begeistert. Auch ich hatte das Problem mit dem Wrapper. Wrapper raus, alles top!

Halte Dich auf dem Laufenden, wenn in der Abwicklung noch evtl. Fehler auftreten.

Ist schon Wahnsinn was hier so entwickelt wird. Danke!!!

Viele Grüße

Mo
:lol:

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: [neues plugin] wellrad - Onlineshop

Post by Holger » Mon Dec 08, 2008 4:55 pm

moprivat wrote:Auch ich hatte das Problem mit dem Wrapper. Wrapper raus, alles top!
???
Was hat das nun mit dem Wrapper zu tun?

Holger

Till
Posts: 337
Joined: Tue May 20, 2008 7:20 am
Location: Germany: Bremen
Contact:

Re: [neues plugin] wellrad - Onlineshop

Post by Till » Mon Dec 08, 2008 4:57 pm

moprivat wrote:Auch ich hatte das Problem mit dem Wrapper.
Wer denn noch? Und was hat der Wrapper mit dem Wellrad Shop zu tun?

Till

Post Reply