Перейти к содержанию

Рекомендуемые сообщения

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
< <button type="submit" form="form-postavtchik-import" title="Импорт" class="btn btn-primary">Импорт</button>
---
> <button type="submit" form="import" title="Импорт" class="btn btn-primary">Импорт</button>

может быть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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>

может быть

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.