Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将选项值添加到产品,然后添加到带有Magento的购物车_Php_Magento - Fatal编程技术网

Php 将选项值添加到产品,然后添加到带有Magento的购物车

Php 将选项值添加到产品,然后添加到带有Magento的购物车,php,magento,Php,Magento,我四处搜索了一段时间,只找到了为Magento商店的产品添加全新选项集的wit解决方案 我试图实现的是一种向购物车添加简单产品的方法。这个简单的产品有一些预先定义的自定义选项(自由文本字段),必须由php函数填充 那么,我该怎么做呢?假设我有一个ID为“111”的产品和一个自定义选项 $qty = '1'; $product = Mage::getModel('catalog/product')->load("111"); // set option value in product mo

我四处搜索了一段时间,只找到了为Magento商店的产品添加全新选项集的wit解决方案

我试图实现的是一种向购物车添加简单产品的方法。这个简单的产品有一些预先定义的自定义选项(自由文本字段),必须由php函数填充

那么,我该怎么做呢?假设我有一个ID为“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设置选项值相对容易

您没有在产品模型上设置自定义选项,而是通过第二个参数将其传递到
$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']
包含自定义选项信息。这些键是自定义选项ID,如果使用Firebug或类似工具检查产品屏幕的“自定义选项”部分,您可以看到它们

$params['product']
可能是多余的,我不久前为一个更早版本的Magento编写了这个脚本


另外,我相当肯定,当您以这种方式添加时,标准的add-to-cart事件将触发,因此您需要自己设置它们。可能会有副作用。

当前答案的问题是,如果SKU相同,但选项与第一个不同,则magento不会添加第二行项目。如果你想要一个3英寸的苹果和一个4英寸的苹果,你希望有单独的行项目。至少我知道

对以下URL的HTTP调用

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

/store/checkout/cart/add?product=23&qty=1&options[41]=3
将添加两个行项目

但这仍然只是战斗的一半,这些选项代码代表什么??下面的PHP代码将告诉您。由于我们使用的是HTTP调用,代码将返回javascript就绪的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);
}
?>

您应该按照以下格式编写
addproduct
的输入参数,由我自己测试:

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

在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);

谢谢你,尼克!在Magento 1.4.1.1中进行了测试,效果与预期一致。在我的情况下,它是一个可配置的产品,我如何实现这一点?我需要从addtocart传递一个与自定义模块相关的值。我的选择是什么?我可以使用session,event,但我只会在确定没有其他方法的情况下使用。注:轮胎,使所有类型的产品通用。谢谢!我花了半天时间和同样的麻烦搏斗!