Produkt mit benutzerdefinierter Option über PHP in den Warenkorb legen


7

Ich versuche, ein Produkt programmgesteuert mit einigen benutzerdefinierten Optionen in den Warenkorb zu legen. Der Artikel wird korrekt in den Warenkorb gelegt, aber keine der Optionen wird jemals hinzugefügt. Mein Code lautet:

require_once '../../app/Mage.php';
umask(0);
/* not Mage::run(); */
Mage::app('default');

Mage::getSingleton("core/session", array("name" => "frontend"));

$product_id = 2364;
$id_opt_value = 6072;
$final_opt_value = 6074;

$product = Mage::getModel('catalog/product')->load($product_id);
$cart = Mage::getModel('checkout/cart');
$cart->init();
$params = array(
    'product' => $product_id,
    'qty'     => 1,
    'options' => array(         
        $id_opt_value => '123456',
        $final_opt_value => 'black gloss finish',
     )
);

$cart->addProduct($product, $params);
$cart->save();

Ich habe doppelt geprüft und die Optionswerte sind korrekt. Ich benutze Magento Ce-1.9.0.0

Antworten:


1

Das Erstellen eines Angebots kann hilfreich sein, anstatt das Kassen- / Warenkorbmodell zu verwenden.

$quote = Mage::getModel('sales/quote')
            ->setStoreId(Mage::app()->getStore('default')->getId());

Stellen Sie $paramshier Ihre Produkte ein.

erzwinge das Varien_Objectmit deinen Parametern aufaddProduct

$quote->addProduct($product, new Varien_Object($params));
$quote->save();

Vielen Dank, ich habe gerade Folgendes versucht: paste.ofcode.org/vf7uSudXxStYDaMZjHKPxk und das fügt das Produkt immer noch ohne Optionen hinzu. Was habe ich daran falsch gemacht?
odd_duck

0

Ich denke, dass Ihr Optionsarray eine falsche Formatierung hat. Ich denke, das Array sollte im folgenden Format sein.

$params = array(
    'product' => $product_id,
    'qty'     => 1,
    'options' => array(
        '123456' => 'black gloss finish',
     )
);

Dabei ist der Schlüssel die Options-ID und der Wert der Optionswert.

Die Alternative dazu wäre, direkt mit dem Angebot und dem Angebotsposten zu arbeiten und die Funktion addOptionfür das Angebotsposten zu verwenden.


0

So wird es nicht funktionieren.

$params = array(
    'product' => $product_id,
    'qty'     => 1,
    'options' => array(
        '123456' => 'black gloss finish',
     )
);

Anstelle von 123456 müssen Sie die numerische Nummer für die ID dieser benutzerdefinierten Option eingeben. Wenn die ID beispielsweise 'options_2_text' lautet, übergeben Sie '2' anstelle von '123456'. Für mehr Freigabe verwenden Sie diesen Code auf der Seite cart.html:

foreach($this->getItems() as $product) {
    $options = $product->getProduct()->getTypeInstance(true)->getOrderOptions($product->getProduct());
    if ($options)
    {
        if (isset($options['options']))
        {
            $result = $options['options'];
            echo '<pre>';
                print_r($result);
            echo '</pre>';    
        }
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.