Problem mit persparam - Zusätzlichen Artikel in den Warenkorb legen

Hallo,

ich habe folgendes vor. Ich möchte in der Detailansicht (details.tpl) ein textarea platzieren, in dem beliebig viele Zeichen eingetragen werden können. Der Inhalt wird dann bei klick auf “In den Warenkorb” in den Warenkorb gelegt. Dort kann man den Text (für eine Grußkarte) auch ändern.
Das habe ich mit Hilfe von persparam und der Beispieldatei details_persparam.tpl auch hinbekommen und es funktioniert.

[B]detail.tpl[/B]


<div class="persparam">
	<label>[{ oxmultilang ident="DETAILS_PERSPARAM_LABEL" }]</label>
	<textarea name="persparam[Beschriftung]">[{ $product->aPersistParam.text }]</textarea>
</div>

Weiter oben in der details.tpl habe ich ein hidden-Feld ergänzt


<input type="hidden" name="sg_geschenk_id" value="886103cac96baa2ba3a93c29c4c1567d">

Im Warenkorb wird der Text wieder so ausgegeben (basket.tpl). Oder brauch ich das gar nicht?:


[{foreach key=sVar from=$basketitem->getPersParams() item=aParam }]
   <b>[{ $sVar }]:</b> 			   
   <textarea name="aproducts[[{ $basketindex }]][persparam][[{ $sVar }]]">[{ $aParam }]</textarea><br>
[{/foreach }]

Mein Problem ist nun, dass dieser Text, den man dort hinterlassen kann zusätzliche Kosten von X Euro hervorruft. Dazu habe ich einen Artikel angelegt, der zusätzlich in den Warenkorb hineingelegt werden soll, wenn in dem Textarea Text steht. Ich habe gelesen, dass ich dazu die oxcmp_basket->tobasket erweitern muss, damit dieser Artikel hinzugefügt wird. Nur leider weiß ich nicht genau wie. Ich habe im alten Forum einen Beitrag gefunden, der das ungefähr beschreibt. Ich habe es etwas dem neuem Code angepasst:


$aid = $myConfig->getParameter( "sg_geschenk_id");
if( isset( $aid) && $aid)
{ $aPersParam = oxSession::getVar( 'persparam' );
	$aData['sg_geschenk_id'] = $aid;
	$aPersParam[$sProductID] = $aData;
	//$mySession->SetVar( "persparam", $aPersParam );
	oxSession::setVar( 'persparam', $aPersParam );
}

Es funktioniert nleider noch nicht. Ich weiß auch nicht, wo genau ich es in der tobasket platzieren soll (ich weiß, ich sollte es auslagern, aber ich möchte erst mal generell testen, ob das überhaupt geht) bzw. was ich noch machen muss, um mein Ziel zu erreichen?

Hat jemand einen Tipp?

Danke,
Kathrin

Da ich den ganzen Tag nicht weitergekommen bin, hab ich nun einen anderen Weg gesucht. Ich habe ein Modul als Erweiterung von oxBasketItem begonnen.

Ich habe als persparam nun kein Textarea mehr verwendet, sondern eine Checkbox, was ebenfalls funktioniert. Nun will ich in meiner Erweiterung abfragen: ist persparam (also die Checkbox) “on”, dann addiere zu der Funktion getFTotalPrice() aus der oxBasketItem X Euro hinzu.Nur leider habe ich ein Problem persparam abzufragen, was mache ich falsch?

in der details.tpl steht das:

<input type="checkbox" name="persparam[Geschenkverpackung]" />

in der basket.tpl wird es so innerhalb der foreach wieder ausgegeben:

<input type="checkbox" name="aproducts[[{ $basketindex }]][persparam][[{ $sVar }]]" [{ if $aParam == "on"}] checked[{/if}] />

Im ersten Schritt des Warenkorbs habe ich über smarty-debug sehen können, dass in dem Array persparam, meine “Geschenkverpackung” steht mit dem Wert “on”. Doch wie frage ich diesen Wert ab?


class sg_oxBasketItem extends sg_oxBasketItem_parent
{
    public function getFTotalPrice()
    {	
        $aPersParam = oxConfig::getParameter( "persparam");
        if($aPersParam["Geschenkverpackung"] == "on")
             return oxLang::getInstance()->formatCurrency( ($this->getPrice()->getBruttoPrice()+2.5) );
        else
             return oxLang::getInstance()->formatCurrency( $this->getPrice()->getBruttoPrice() );
     }
}

Analog würde ich dieses Vorgehen auch für die anderen Preise machen (grandtotal u.ä.).

Kann mir hierzu vielleicht jemand sagen, wie ich persparam richtig abfrage? Wenn das klappt, könnte der Weg für mich funktionieren, hoffe ich.

VIele Grüße,
Kathrin