Magento的编程方式,类型为“日期”的定义选项创建订单(Magento programmatic

2019-09-29 15:37发布

我想要自动创建由TEXTFILES从什么地方来给出数据基于Magento中的新订单。 这是基本的代码我使用:

$product = Mage::getModel('catalog/product')->load($productId);
$request = new Varien_Object();
$request->setData(array(
    'product' => $product->getId(),
    'qty' => 1,
    'options' => array(
        30 => 'some text...',
        8 => 'some other text...',
        7 => date('Y-m-d H:i:s')
    )
));
$quote = Mage::getModel('sales/quote')
    ->setStoreId($storeId)
    ->setIsMultiShipping(false)
    ->setCheckoutMethod('guest')
    ->setCustomerId(null)
    ->setCustomerEmail($customerEmail)
    ->setCustomerIsGuest(true)
    ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);

$quote->addProduct($product, $request);
// ...the interesting part ends here

ID为自定义选项“7”的类型是“日期”(从Magento的Web后端配置),而这肯定是什么原因导致的问题:这个片段效果很好,当自定义选项7改为键入“文本框”。

如果我检查的内容$quote调用后对象addProduct()我看到的自定义选项7的值不是一个日期字符串,如预期,但单个数字(这似乎是准确的日期的第一个数字格式为Ymd H:i:s ,因此今年的第一位,我试图用不同年份)。

如果我更改选项7的类型为文本,整个日期字符串正确保存里面$quote的对象。

至于更多的信息,如果我让脚本通过所有的秩序创造过程继续下去,我得到的是说,一个例外:

Unsupported ISO8601 format (2)

其中数字2是我正在通话之前的日期的第一个数字。 所以我试图用iso8601格式:

7 => date('c')

与所有没有影响。

该异常的堆栈跟踪为:

#0 app/code/core/Zend/Date.php(1091): Zend_Date->_calculate('set', '2', 'c', 'it_IT')
#1 app/code/core/Zend/Date.php(210): Zend_Date->set('2', 'c', 'it_IT')
#2 app/code/core/Mage/Core/Model/Locale.php(494): Zend_Date->__construct('2', 'c', Object(Zend_Locale))
#3 app/code/core/Mage/Catalog/Model/Product/Option/Type/Date.php(167): Mage_Core_Model_Locale->date('2', 'c', NULL, false)
#4 app/code/core/Mage/Catalog/Model/Product/Type/Abstract.php(620): Mage_Catalog_Model_Product_Option_Type_Date->getFormattedOptionValue('2')
#5 app/code/core/Mage/Sales/Model/Convert/Quote.php(141): Mage_Catalog_Model_Product_Type_Abstract->getOrderOptions(Object(Mage_Catalog_Model_Product)) 
#6 app/code/core/Mage/Sales/Model/Service/Quote.php(170): Mage_Sales_Model_Convert_Quote->itemToOrderItem(Object(Mage_Sales_Model_Quote_Item))
#7 app/code/core/Mage/Sales/Model/Service/Quote.php(249): Mage_Sales_Model_Service_Quote->submitOrder()
#8 wbs-import-orders.php(309): Mage_Sales_Model_Service_Quote->submitAll()
#9 {main}

那么,如何使型“日期”这个定义选项接受日期字符串? 它甚至有正确的传递日期字符串呀?

谢谢你们!

Answer 1:

我猜,我猜对了吧! 好极了!

$request->setData(array(
    'product' => $product->getId(),
    'qty' => 1,
    'options' => array(
         30 => 'some text...',
         8 => 'some other text...',
         7 => array(
             'year' => 2014,
             'month' => 1,
             'day' => 23
         )
    )
));

这是正确保存类型“日期”的选项。



文章来源: Magento programmatically create order with custom option of type “date”
标签: php magento date