Здравствуйте. Только начал работать с opencart. Появилась необходимость сделать простой импорт из таблицы Excell. Видел кучу модулей экспорта и импорта, но они очень громосткие и не делают что нужно. Задача стоит такая: во-первых, прочитать из файла 2 столбца - с ean и с количеством товара, во-вторых, нужно сравнить ean из БД и файла. Если ean из файла=ean из БД, то количество в БД заменяем количеством из файла, если ean из файла нет БД, то надо вывести сообщение "Введите новый товар", если ean из БД нет в файле, то количество товара обнуляем. Попытался сделать, таким образом.
Модель
public function importExcelData($data,$man) {
$ean_i = $data[0];
$kol_i = $data[1];
$ean_iz_db=array();
$query = $this->db->query("SELECT ean FROM " . DB_PREFIX . "product WHERE manufacturer_id=".$man."");
foreach ($query->rows as $result) {
$ean_iz_db[]= $result['ean'];}
if(in_array($data[0],$ean_iz_db)&&(isset($data[0]))){
$query = $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity='".$data[1]."' WHERE ean='".$data[0]."' and manufacturer_id='".$man."'");}
else { echo "Товара с ean ".$data[0]." нет в БД. Необходимо внести новый товар с ean ".$data[0]."<br>";}
$arr=array();
$arr[]=$ean_i;
foreach ($ean_iz_db as $ean_db){
if(!in_array($ean_db,$arr)&&(isset($arr))){
$query = $this->db->query("UPDATE " . DB_PREFIX . "product SET `quantity`='0' WHERE `ean`='".$ean_db."' and `manufacturer_id`='".$man."'");
}
}
}
контроллер
public function importExcel($filepath,$stolbec1,$stolbec) {
$data['error_xml'] = '';
if ($this->request->server['REQUEST_METHOD'] == 'POST'){
$this->load->model('catalog/postavtchik');
$file = $_FILES['xls']['tmp_name'];
$newname = 'file/'.$file;
// проверяем, файл с таким названием уже есть на сервере
if (!file_exists($newname)) {
// переместить загруженный файл в новое место
if ((move_uploaded_file($_FILES['file_path_excel']['tmp_name'],$newname))) {
}}
$man=$this->request->post['proiz_p[]'];
$stolbec1=$this->request->post['ean_i'];
$stolbec=$this->request->post['kol_i'];
if (empty($file)) {
$this->session->data['warning'] = 'Файл не выбран!';
}
else {
require_once ("Classes/PHPExcel.php");
$data['result'] = array();
$file_type = PHPExcel_IOFactory::identify( $filepath );
$objReader = PHPExcel_IOFactory::createReader( $file_type );
$objPHPExcel = $objReader->load( $filepath );
if ( (!empty($stolbec)) && (!empty($stolbec1)) ) {
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
{
//Имя таблицы
$Title = $worksheet->getTitle();
//Последняя используемая строка
$lastRow = $worksheet->getHighestRow();
//Последний используемый столбец
$lastColumn = $worksheet->getHighestColumn();
//Последний используемый индекс столбца
$lastColumnIndex = PHPExcel_Cell::columnIndexFromString($lastColumn);
for ($row = 12; $row <= $lastRow; ++$row)
{
$val = $worksheet->getCellByColumnAndRow($stolbec, $row)->getValue();
$val1 = $worksheet->getCellByColumnAndRow($stolbec1, $row)->getValue();
$val=trim($val);
$val1=trim($val1);
$data['result'][]=array('ean'=>$val1,'kol'=>$val);
};
}
$this->model_catalog_product->importExcelData($data);
}
else { $data['error_xml'] += 'error'; }
$this->session->data['success'] = 'Файл успешно загружен'; //success message
}
$this->response->redirect($this->url->link('catalog/postavtchik/importExcel', 'token=' . $this->session->data['token'], 'SSL'));
}
$this->document->setTitle('Import Excel');
$data['heading_title']="Import Excel"; // parsing up heading title
$this->load->model('catalog/postavtchik'); // Loading the Model of Products
$data['cancel'] = $this->url->link('catalog/postavtchik', 'token=' . $this->session->data['token'], 'SSL');
$data['action'] = $this->url->link('catalog/postavtchik/importExcel', 'token=' . $this->session->data['token'], 'SSL');
if (isset($this->session->data['warning'])) {
$data['error_warning'] = $this->session->data['warning'];
unset($this->session->data['warning']);
} else {
$data['error_warning'] = '';
}
if (isset($this->session->data['success'])) {
$data['success'] = $this->session->data['success'];
unset($this->session->data['success']);
} else {
$data['success'] = '';
}
// Breadcrumbs start here
$data['breadcrumbs'] = array();
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
);
$data['breadcrumbs'][] = array(
'text' => 'Товары',
'href' => $this->url->link('catalog/postavtchik', 'token=' . $this->session->data['token'], 'SSL')
);
$data['breadcrumbs'][] = array(
'text' => 'ImportExcel',
'href' => $this->url->link('catalog/postavtchik/ImportExcel', 'token=' . $this->session->data['token'], 'SSL')
);
$data['header'] = $this->load->controller('common/header');
$data['column_left'] = $this->load->controller('common/column_left');
$data['footer'] = $this->load->controller('common/footer');
$this->response->setOutput($this->load->view('catalog/postavtchik_form.tpl', $data));
}
вид
<form action="<?php echo $action;?>" method="post" enctype="multipart/form-data" id="import" class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label" for="input-import"><?php echo $entry_vibor_proiz; ?></label>
<div class="col-sm-10">
<?php foreach ($proizvoditeli as $proiz_p){?>
<?php if(in_array($proiz_p['manufacturer_id'],$maspp)){?>
<div class="checkbox">
<label><input type="radio" name="proiz_p[]" value="<?php echo $proiz_p['manufacturer_id']; ?>" /><?php echo $proiz_p['name']; ?></label>
</div>
<?php } }?>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-upload"><?php echo $entry_upload; ?></label>
<div class="col-sm-10">
<input type="file" name="xls"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-ean"><?php echo $entry_ean; ?></label>
<div class="col-sm-10">
<input type="text" name="ean_i" placeholder="<?php echo $help_ean; ?>" class="form-control" />
<?php echo $help_column; ?>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-kol"><?php echo $entry_kol; ?></label>
<div class="col-sm-10">
<input type="text" name="kol_i" placeholder="<?php echo $help_kol; ?>" class="form-control" />
<?php echo $help_column; ?>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-button-import"></label>
<div class="col-sm-10">
<button type="submit" form="form-postavtchik-import" title="Импорт" class="btn btn-primary">Импорт</button>
</div>
</div>
</form>
но это не работает и ни единой ошибки не выдает. Буду рад любой подсказке.