Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Импорт из Excel в БД


Recommended Posts

Здравствуйте. Только начал работать с 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>

но это не работает и ни единой ошибки не выдает. Буду рад любой подсказке.

Надіслати
Поділитися на інших сайтах


3 часа назад, crapic сказал:

< <button type="submit" form="form-postavtchik-import" title="Импорт" class="btn btn-primary">Импорт</button>
---
> <button type="submit" form="import" title="Импорт" class="btn btn-primary">Импорт</button>

может быть

это поправил. Спасибо. Но ничего не изменилось

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.