Hallo,
ich bin relativ neu im OXID Umfeld und möchte gern für eine Aufgabenstellung Tipps von Euch.
Ich möchte im Shop eine Seite einbauen, auf der ein Nutzer durch Eingabe von Parametern einen Wert erhält. Genauer soll die Wassermenge in einem Schwimmbecken durch die Form und Größe berechnet werden. Dies dient dem Nutzer dazu, z.B. die geeignete Filteranlage zu kaufen. Also habe ich mir einfach ein Formular und eine CMS Seite eben mit diesem Formular gebaut. Das Formular funktioniert auch wunderbar, nur möchte ich den Wert übernehmen und möchte ihn deshalb in der Session speichern. Und da fehlt mir momentan das Verständnis in OXID und hoffe das mir jemand auf die Sprünge hilft.
Welche Klasse würde man da erweitern? Rein für das Speichern würde ja oxsession reichen, oxarticles ist evtl falsch, da ich ja nicht direkt an den Artikel will. Gibt es Hilfsklassen mit denen ich arbeiten kann? Sehe da momentan nicht durch. Könnte ich nicht einfach eine einfache php klasse zum Setzen der Variablen verwenden und dem Formular dieses als action angeben? Mein erster Versuch mit einem Modul schlug fehl und nun ist meine OXID Installation unbrauchbar. Bin doch etwas verwirrt.
Hallo,
also wie ich es verstanden habe, gibt es eine endliche Zahl von Produkten, welche durch ein Formular im Prinzip dann ausgewählt werden sollen ?
Also Parameter x y z berechnen eine Filtergrösse, welches dann auf ein Produkt verweist ?
Das könnte man in der Tat alleine ohne Modul mit JS erreichen, indem in dem Formular quasi ein Produkt ausgerechnet wird, und dieses dann z.B. per Ajax geladen wird, oder aber mit Weiterleitung auf die URL des Produktes verwiesen wird …
Oder soll aber dynamisch aufgrund der Parameter ein Produkt erzeugt werden ?
Dazu müste man in der Tat oxarticle => filter_modul/filter_oxarticle Modul erzeugen, welches anhand der Parameter, die dann von der Session übergeben werden (oder aber auch mit POST Vars) ein Produkt erzeugt, dem Kunden darstellt, so daß er das dann in den Warenkorb tun kann, bzw. man erweitert den Warenkorb, so daß anhand der Paramter ein neues Produkt erzeugt und in den Warenkorb legt.
Vielen Dank für Deine Antwort. Soweit wollte ich gar nicht gehen. Es sollte eigentlich nur eine Seiten geben auf der der Nutzer die größe seines Pools einträgt und dann die Wassermenge berechnet. Dieser Wert soll dann gespeichert werden und wenn ein Artikel diesen braucht (zB eine Filteranlage) wird das vorausgewählt.
Mein erster Versuch war eine CMS Seite mit dem Formular. Das funktioniert, die naja Berechnung habe ich mit JavaScript gelöst. Nun muss ich den Wert ja irgendwie abspeichern, um ihn später zu verwenden. OXID bietet in der oxsession ja schon die Möglichkeit das zu speichern. Mir fehlt dazu einfach der Punkt wo ich das mache. Ich habe nun heute versucht mir etwas Modulentwicklung anzuschauen, aber ich habe mich total verrannt.
Ich habe heute ein Tutorial gefunden, bei dem ganz einfach die impressum.tpl dupliziert wurde und man eigentlich über www.domain.de/index.php?cl=info&tpl=neue.tpl diese aufrufen kann. Allerdings wurde ich immer wieder zur Startseite weitergeleitet. Gibt es das in der aktuellen Version nicht mehr?
Wie sieht eigentlich in einem Modul die Struktur aus? Das liegt ja in /modules in seinem Ordner. Der Controller natürlich im /controller. Was muss ich tun damit ich den Controller über die url ansprechen kann? Gibt es irgendwo aktuelle Tutorials zur Modulentwicklung?
Ok, jetzt habe ich noch besser verstanden.
Dann kommen wir auch zur Klassenthematik.
Zunächst mal zum Thema Werte abspeichern,
hierfür gibt es die Funktion oxSession::setVar
oxSession::setVar(‘wassermenge’, 1000);# z.B. 1000 l
um nun bei einem Produkt aufgrund dieses gespeicherten Wertes eine bestimmte Variante auszuwählen, könnte man z.B.
die Klasse views/details.php überladen,
und dort die Funktion getProduct() anzupassen.
z.B. in modules/wasser/wasser_details.php:
class wasser_details extends wasser_details_parent{
public function getProduct(){
$this->_oProduct = parent::getProduct(); # Std. Produkt holen
$wasser = oxSession->getVar(‘wasser’);
… # hier anhand von $wasser $this->_oProduct ändern
return $this->_oProduct;
}
im Admin bei Module dann das Modul bekanntmachen:
details => wasser/wasser_details
}
Das sieht schon gut aus und klingt verständlich. Kann ich dann in der wasser_details eine setWassermenge verwenden auf die die Action des Formulars zeigt? Das werde ich schon einmal testen. Vielen Dank
Ich habe das nun anders gelöst. Anstelle einer CMS Seite habe ich einfach im /views eine Klasse angelegt und ein Template dazu angelegt. Nun kann ich auch wunderbar die Formulardaten speichern und auch auslesen. Eigentlich doch eine einfache Sache.
Was mir nun Sorgen bereitet, ist die Vorauswahl einer Variante. Ich dachte wirklich, ich kann dann einfach den Wert aus der Sessionvariablen holen auf den value setzen o.ä. Leider ist das wohl nicht so einfach. Habe nun versucht dahinter zu steigen und bin noch nicht zu einer Lösung gekommen.
Die benötigten Artikel sind also mehrdimensionale Varianten und ich möchte, sofern die passende Wassermenge bestimmt wurde, dass diese bereits vorausgewählt ist.
Das nachladen der Varianten geschieht ja glaube ich per Javascript Request. Aber wie kann ich das vorauswählen?
Muss ich wirklich im schlimmsten Fall, ein verstecktes Formular erzeugen mit dem gespeicherten Wert und dieses dann abschicken um die Variante vorzuselektieren?
Zum Thema Klasse erweitern gäbe es ja wie unten beschrieben eine Möglichkeit
details => wasser_details/wasser_details
zu erweitern
public function getProducts(){
}
Dort dann die Variantenselektion gemäß des gespeicherten Wertes anzupassen:
$aVariantSelections = $this->_oProduct->getVariantSelections( oxConfig::getParameter( “varselid” ) );
hier dann
$this->_oProduct gemäss der Wassermenge ändern …