Hallo,
ich würde gerne einen Artikel im Frontend dynamisch über ein Modul erzeugen und in den Warenkorb legen.
Leider habe ich noch nicht viel Erfahrung mit Oxid und im Moment fehlt mir der richtige Ansatz.
Grundidee:
- User gibt in Formularfelder Artikelnamen, Beschreibung und Preis ein.
- Der Artikel wird in Oxid erzeugt und automatisch in den Warenkorb gelegt.
Gibt es evtl. bestehende Module, die sowas oder etwas ähnliches machen, bei denen ich mir das grundsätzliche Vorgehen abschauen kann? Oder hat jemand von euch einen guten Tip für den Einstieg?
Wenn ich das richtig verstehe, existiert der Artikel zunächst garnicht und wird “dynamisch” erzeugt. So ein Modul habe ich noch nicht gesehen, aber machen kann man das.
genau, die Artikel sollen dynamisch erzeugt werden und da fehlt mir der richtige Ansatz.
Den Artikel anschließend in den Warenkorb zu legen scheint relativ einfach zu sein mit
$oBasket = oxSession::getInstance()->getBasket();
$oBasket->addToBasket($sProductID, $dAmount);
bzw. im Zweifelsfall auch über einen modifizierten Link. Beispiel:
/oxid/warenkorb/?fnc=tobasket&aid=09646538b54bac72b4ccb92fb5e3649f&am=1
Aber für das dynamische Anlegen der Produkte (inkl. Rückgabe der artikel ID) fehlten mir noch die passenden Methoden.
Die musst aus dem Admin nehmen und anpassen. Einfach mal anschauen, wie ein Artikel im Admin angelegt wird und dann die entsprechenden Funktionen anpassen.
Moin,
ich denke, es geht um einen Konfigurator, oder?
Also: Man nehme einen Rechner, baue Mainboard XY dort rein, Netzteil soundso, Festplatte, Sound- und Videokarte, mische alles gut durch und fertig ist das neue Produkt. Soll es so laufen?
Gruß
ja, das trifft es ziemlich genau auf den Punkt.
Ich bin inzwischen bei der Klasse “Article_Main” angekommen, die ich zu extenden versuche… so ganz schaffe ich es aber noch nicht. Da feht mir etwas die Übung auch beim Zusammenspiel mit Smarty etc. Daher hatte ich gehofft, passende Beispiele zu finden, um mich daran etwas orientieren zu können.
Das geht ohne Artikel in der DB anzulegen, indem du einen Artikel mit persparam individualisierst:
http://forum.oxid-esales.com/showthread.php?t=18200
hm, das klingt nach einer interessanten Alternative.
Allerdings wollte ich gerne die fertig konfigurierten Systeme als fertig vorkonfiguriertes Produkt wiederverwenden können. Das wäre in der Variante nicht möglich, oder verstehe ich das falsch?
Oh - in dem Fall heisst das Zauberwörtchen “Mass-Customization”: Schütte Dir ein Müsli zusammen aus Grundbrei, packe Zucker, Zimt, Banane, Apfel und Goldflitter hinzu und nenne das ganze System “California”. Nimm dieses Produkt und stell es auf die Startseite, optional zum Angebot, das eigene Müsli “Boston” zu mischen. 80% der Shopbesucher werden “California” kaufen. 
So in etwa?
Gruß
Hast du eine PE oder EE? In der ERP/Soap-Schnittstelle gibt es die Funktion “OXERPSetArticle” - laut Doku kann man damit Produkte anlegen…
[QUOTE=joerg0815;135844]hm, das klingt nach einer interessanten Alternative.
Allerdings wollte ich gerne die fertig konfigurierten Systeme als fertig vorkonfiguriertes Produkt wiederverwenden können. Das wäre in der Variante nicht möglich, oder verstehe ich das falsch?[/QUOTE]
Doch dann lädst du eine Konfiguration in den Konfigurator. Wenn du allerdings tatsächlich nur Artikelnamen, Beschreibung und Preis brauchst dann ist es evtl. besser echte Artikel in oxid zu generieren. Stell dir vor du hast einen PC-Konfigurator, jemand konfiguriert einen PC und den kann dann jemand kaufen. Jetzt werden Festplatten teurer. Wenn du den PC als Artikel gespeichert hast hat der jetzt noch den alten Preis, wenn du aber die Konfiguration gespeichert hast und in den Konfigurator lädst, passt sich der Preis an, das ist der Unterschied.
Genau, die drei Informationen Artikelname, Beschreibung und Preis sind ausreichend.
Allerdings schaffe ich es bisher nur, bestehende Artikelseiten zu manipulieren und dort ggf. zusätzliche Informationen mit blocks einzublenden.
Was ich nicht schaffe ist, eine leere Seite zu erzeugen, die 3 Eingabefelder hat (Name, Beschreibung, Preis), über die dann ein Artikel im Frontend angelegt werden kann.
Schau dir an wie das MVC bei Oxid funktioniert. Für eine leere Seite brauchst du einen eigenen controller (extends oxubase, files array in metadata.php) und ein dazugehöriges Template (templates array in metadata). Die render() Methode des controllers liefert den Namen des Templates. Aufgerufen wird der controller mit shopurl?cl=controllername.
Super, da war bei mir noch nicht alles vollständig.
Das hat jetzt soweit geklappt.
Allerdings möchte ich ja neben oxUBase auch noch einen controller schreiben, um den Artikel zu erstellen. Das habe ich jetzt in einer weiteren Datei probiert, bekomme aber folgende Fehlermeldung:
Fatal error: Class ‘my_createarticle_oxAdminDetails_parent’ not found in …\oxid\modules\my\my_createarticle\application\models\my_createarticle_oxAdminDetails.php on line 4
Quelltexte:
metadata.php
'extend' => array(
'oxUBase' => 'my/my_createarticle/application/models/my_createarticle',
'oxAdminDetails' => 'my/my_createarticle/application/models/my_createarticle_oxAdminDetails',
),
'templates' => array(
'my_createarticle.tpl' => 'my/my_createarticle/application/views/tpl/my_createarticle.tpl',
),
'blocks' => array(
),
'files' => array(
'my_createarticle' => 'my/my_createarticle/application/models/my_createarticle.php',
'my_createarticle_oxAdminDetails' => 'my/my_createarticle/application/models/my_createarticle_oxAdminDetails.php',
),
my_createarticle_oxAdminDetails.php
my_createarticle_oxAdminDetails.php
class my_createarticle_oxAdminDetails extends my_createarticle_oxAdminDetails_parent
{
public function render()
{
return parent::render();
}
}
Mir ist extenden mit _parent nicht ganz klar und ich verstehe nicht, was falsch ist.
Es gibt zwei Möglichkeiten eine eigene Klasse zu erstellen:
- eine bestehende erweitern:
- metadata: extends array
- Klassendefinition: deineKlasse extends deineKlasse_parent
- Effekt: ALLE Objekte die die Standardklasse mit oxnew laden, laden ab sofort deine erweiterte Klasse, deine erweiterte Klasse erbt in Wirklichkeit von der Standardklasse die du im extends array angegeben hast
- eine neue Klasse erstellen:
- metadata: files array
- Klassendefinition: deineKlasse extends oxubase (je nachdem was du extenden willst)
- Effekt: Nur die Objekte die mit oxnew(’'deineKlasse") geladen werden (oder im Falle eines Controllers mit ?cl=deineKlasse aufgerufen werden) verwenden deine Klasse
Also entweder extends array oder files array, nicht beides. In deinem Fall muss der extends array leer bleiben. Oxadmindetails brauchst du auch nicht weil das ganze ja im Frontend laufen soll.
Also ein Controller, ein Template, ein Eintrag im files array, ein Eintrag im templates array, Klasendefinition deineKlasse extends oxubase.