Добавьте значение опции к продукту, затем в корзину с Magento - PullRequest
8 голосов
/ 25 января 2011

Я некоторое время искал и только нашел решения, которые добавили совершенно новые наборы опций к продуктам в магазине Magento.

То, что я пытаюсь сделать, - это способ добавить простой продукт в корзину. Этот простой продукт имеет некоторые предопределенные пользовательские параметры (поля с произвольным текстом), которые должны быть заполнены функцией php.

Итак, как я могу это сделать? Допустим, у меня есть продукт с идентификатором «111» и одной пользовательской опцией.

$qty = '1';
$product = Mage::getModel('catalog/product')->load("111");
// set option value in product model?

$cart = Mage::helper('checkout/cart')->getCart();
$cart->addProduct($product, $qty);
// set option value while passing product to car?

$cart->save();

Заранее спасибо за любые подсказки.

Кстати: установка значений параметров через QueryString относительно проста, как видно здесь .

Ответы [ 4 ]

15 голосов
/ 25 января 2011

Вы не устанавливаете пользовательскую опцию для модели продукта, вы передаете ее через второй аргумент в $cart->addProduct($product, $params).

Настройка, которую мы имеем для проекта, который требует внешнего приложения длядобавить в корзину Magento, это использовать массив $params следующего формата:

$params = array(
    'product' => 1, // This would be $product->getId()
    'qty' => 1,
    'options' => array(
        34 => "value",
        35 => "other value",
        53 => "some other value"
    )
);

* $params['options'] содержит информацию о пользовательских опциях.Ключи - это идентификаторы пользовательских опций, их можно увидеть, если вы просматриваете раздел пользовательских опций экрана продукта с помощью Firebug или аналогичный.

$params['product'] может быть избыточным, я написал этот скрипт некоторое время назаддля гораздо более ранней версии Magento.

Кроме того, я вполне уверен, что стандартные события add to cart сработают, когда вы добавите этот путь, поэтому вам нужно будет установить ихот себя.Могут быть побочные эффекты.

4 голосов
/ 24 октября 2012

В Magento 1.7 вы должны обернуть массив параметров в объект Varien.

                $params = array(
                    'product' => $_fancypack->getId(),
                    'qty' => 1,
                    'options' => array(
                        $this->_getOptionId($_fancypack,'Product SKU') => $product->getId() .'/'. $product->getSku()
                    )
                );

                $request = new Varien_Object();
                $request->setData($params);

                $quote->addProduct($_fancypack, $request);
1 голос
/ 20 сентября 2012

Вы должны записать входной параметр для addproduct в следующем формате, он проверен мной:

$params = array(
    'product' => 1, // This would be $product->getId()
    'qty' => 1,
    'super_attribute' => array(
        34 => "value",
        35 => "other value",
        53 => "some other value"
    )
);
0 голосов
/ 30 ноября 2011

Проблема с текущим ответом состоит в том, что magento не добавит вторую позицию, если SKU такой же, но параметры отличаются от первого.Если вы хотите 3-дюймовое яблоко и 4-дюймовое яблоко, вы хотели бы иметь отдельные позиции.Или, по крайней мере, я.

HTTP-вызов на следующий URL

/store/checkout/cart/add?product=23&qty=1&options[41]=4

с последующим

/store/checkout/cart/add?product=23&qty=1&options[41]=3

добавит две позиции.* Но все же это только полдела, что означают эти коды опций ??Хорошо, следующий PHP-код расскажет вам.А поскольку мы используем HTTP-вызов, код вернет JSON готовый JSON.

<?php     
include_once '../app/Mage.php';
Mage::app();
echo getProductOptionsIds($_GET['eventcode']);

function getProductOptionsIds($sku) 
{

    $ProductID = Mage::getModel('catalog/product')->getIdBySku($sku);
    $Product = Mage::getModel('catalog/product')->load($ProductID);

    $config = array();
    $config['ProductID'] = $ProductID;

    foreach ($Product->getOptions() as $option) {
          // @var $option Mage_Catalog_Model_Product_Option 
        if ($option->getGroupByType() == Mage_Catalog_Model_Product_Option::OPTION_GROUP_SELECT) {
            $_tmpValues = array();
            foreach ($option->getValues() as $value) {
                // @var $value Mage_Catalog_Model_Product_Option_Value 
                $_tmpValues[$value->getTitle()] = $value->getId();
            }

            $config[$option->getTitle().'list'] = $option->getId();
            $optionValue = $_tmpValues;
        } else {
            $optionValue = $option->getId();
        }
        $config[$option->getTitle()] = $optionValue;
    }
    return json_encode($config);
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...