magento中的CSV文件批量導入,下面是我自己寫的一個發放優惠劵的功能,根據訂單給用戶發放優惠券,用到的字段是increment_id和優惠劵價格:
protected function _prepareForm()
{
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/importPost'),
'method' => 'post',
'enctype' => 'multipart/form-data'
));
$fieldset = $form->addFieldset('base_fieldset', array('legend' => Mage::helper('fun_promo')->__('Send Coupon')));
$fieldset->addField(Mage_ImportExport_Model_Import::FIELD_NAME_SOURCE_FILE, 'file', array(
'name' => Mage_ImportExport_Model_Import::FIELD_NAME_SOURCE_FILE,
'label' => Mage::helper('fun_promo')->__('Select File to Import'),
'title' => Mage::helper('fun_promo')->__('Select File to Import'),
'required' => true
));
$form->setUseContainer(true);
$this->setForm($form);
return parent::_prepareForm();
}
public function importPostAction()
{
$file = array_shift($_FILES);
$fileHandle = new Varien_Io_File();
$msg = '';
if (isset($file['tmp_name']) && $fileHandle->streamOpen($file['tmp_name'], 'r+b')) {
while (($line = $fileHandle->streamReadCsv()) !== false) {
isset($line[0]) && $increment_id = $line[0];
if (empty($increment_id)) {
continue;
}
$increment_id = trim($increment_id);
$order = Mage::getModel('sales/order')->loadByIncrementId($increment_id);
if ($order->getId()) {
$customerId = $order->getCustomerId();
if ($customerId) {
if ($this->ruleArr(intval($line[1]))) {
$rule_id = $this->ruleArr(intval($line[1]));
try {
$rule = Mage::getModel('salesrule/rule')->load($rule_id);
$expirationDate = date('Y-m-d H:i:s', strtotime('+3 month'));
$rule->acquireCoupon($customerId, $expirationDate);
} catch (Exception $e) {
$msg .= $increment_id.'發送優惠券失敗'."<br>";
continue;
}
}
} else {
$msg .= $increment_id.'沒找到用戶'."<br>";
continue;
}
} else {
$msg .= $increment_id.'訂單號不存在'."<br>";
continue;
}
}
$fileHandle->close();
if (!empty($msg)) {
Mage::getSingleton('adminhtml/session')->addError($msg);
} else {
Mage::getSingleton('adminhtml/session')->addSuccess('Import succeed.');
}
} else {
Mage::getSingleton('adminhtml/session')->addWarning('Invalid mime content-type.');
}
$fileHandle->rm($file['tmp_name']);
$this->_redirect('*/*/index');
}