Neues Feld aus oxbasket in die DB schreiben

Ich habe nun im oxorder eine neue Variable: $beratername

Wie kann ich dies nun in die Tabelle oxorder schreiben, in die ich bereits eine neue Spalte “berater” eingefügt habe ? Und zwar wenn ein Kunde die Bestellung abschließt (ich vermute erst dann werden auch die Bestelldaten in oxorder geschrieben)

wo/wie hast du denn die variable (oxorder eigenschaft?) erstellt?

Ich habe dazu die Klasse oxorder überschrieben mit einer neuen Klassenvariable und einer Get-Methode.

das sollte gar nicht notwendig sein. poste mal deinen code …

Die Get-Methode wird im Template gerufen. (Das geht bereits)


class womic_order extends womic_order_parent {

        $_beratername = "willy";

        public function getBeratername() {
            return $this->_beratername;
        }

    }


Für später ist angedacht, im Checkout-Prozess über eine Comboxbox einen
Berater auszuwählen.
Der ausgewählte Beratername soll dann in die neue Spalte in der DB oxorder geschrieben werden.

Wie muss ich richtigerweise eine neue Variable in oxorder registrieren, dass diese beim Speichern der Bestellung automatisch mit in die DB geschrieben wird ?

wenn du eine eigenschaft von oxorder hast, z. b.

$order->oxorder__meinfeld

und diese gefüllt ist und das datenbankfeld “meinfeld” vorhanden ist wir es automatisch gespeichert.

OK, und wie definiere ich dieses $order->oxorder__meinfeld ?

In oxorder:

$this->oxorder__deinfeld = new oxField($this->_beratername);

Habe ich so drin, es wird nichts gespeichert. Habe auch zum Test
statt “$this->_beratername” “willi” eingegeben. Nichts.
Views sind upgedated und tmp gelöscht.


class womic_order extends womic_order_parent {

        $_beratername = "willy";

        public function getBeratername() {
            $this->oxorder__berater = new oxField($this->_beratername);
            return $this->_beratername;
        }

    }  

“berater” ist der Spaltenname in der Tabelle für oxorder.

Wenn ich direkt in “__construct()” dies reinmache:
$this->oxorder__berater = new oxField(“vogel”);
dann wird es in die DB geschrieben.

Jedoch in meiner überschreibenden Klasse, wo definitiv durchlaufe,
wird die Variable NICHT neu gesetzt. In der Datenbank landet “vogel”

Du solltest ein paar beispiele dir ansehen, auf die schnelle merke ich das dir [B]save();[/B] Funktion fehlt.

Grüße
Rafig

Habe das hinzugefügt, es wird nur das gespeichert was direkt in oxorder steht “vogel”


 public function save()
   {
        $this->oxorder__berater = new oxField("essig");
       return parent::save();
       
   }

Wenn du im Administrationsbereich Im Bestellübersicht Felder speichern und wieder abrufen möchtest kannst du im gründe auf die PHP gänzlich verzichten.

Im order_overview.tpl trage das hier ein:


<input type="text" name="editval[oxorder__berater]" value="">

Sobald du jetzt Berater Name in das Textfeld eingibst und auf “Speichern” klickst wird der neue Berater in der Datenbank automatisch gespeichert, vorausgesetzt BERATER in der Datenbank Tabelle oxorder existiert.

Der abgespeicherter Berater wird wie folgt im derselben stelle aufgerufen und angezeigt:


$edit->oxorder__berater->value

Grüße
Rafig

@OXID-Design:
Es soll aber im Checkout-Prozess ein Mitarbeiter ausgewählt werden (vom Kunden)
darum muss es über das FE gehen

Jetzt geht es.
Ich habe bei all rumprobieren irgendwann den “order” überschrieben, nicht mehr den “oxorder”.

Gibt es eigentlich eine Verbindung von oxorder zum order.tpl ?
Dann man im tpl einen Wert aus oxorder abfragen kann.

Ach so, dann habe ich dich falsch verstanden. Gut das es geklappt hat, das ist das wichtigste.

Grüße
Rafig

[QUOTE=womic2000;177880]
Gibt es eigentlich eine Verbindung von oxorder zum order.tpl ?
Dann man im tpl einen Wert aus oxorder abfragen kann.[/QUOTE]
Wenn order.tpl angezeigt wird gibt’s ja noch keine Bestellung.