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

[Решено] Модуль импорта csv


Recommended Posts

Пытаюсь сделать импорт товаров из csv файла. Версия 2.1.0.2. По туториалу:
http://code.tutsplus.com/tutorials/building-a-product-csv-import-tool-in-opencart-part-2--cms-24503
эта обучалка под версию 1.5, но я решил попытаться.
код в контроллере ( /catalog/product.php):
 

	public function importCSV() {
		$data['error_csv'] = '';
		if ($this->request->server['REQUEST_METHOD'] == 'POST'){
			$file = $_FILES['csv']['tmp_name'];
			if (empty($file)) {
				$this->session->data['warning'] = 'CSV Not selected!';
			}
			else {
				$f = fopen($file,"r");
				while (($line = fgetcsv($f, 1000, ",")) !== FALSE)
				{
				    if ($line[0]!='') // if column 1 is not empty
				    {
				        $this->model_catalog_product->importCsvData($line);  // parse the data to model
				    }
				    else
				    {
				        $data['error_csv'] += 'error';
				    }
				}
				$this->session->data['success'] = 'CSV Successfully Imported!'; //success message
			}

		$this->response->redirect($this->url->link('catalog/product/importCSV', 'token=' . $this->session->data['token'], 'SSL'));
		}

		$this->document->setTitle('Import CSV');

		$data['heading_title']="Import CSV"; // parsing up heading title
		$this->load->model('catalog/product'); // Loading the Model of Products

		$data['cancel'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'], 'SSL');
		$data['action'] = $this->url->link('catalog/product/importCSV', '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/product', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => 'ImportCSV',
			'href' => $this->url->link('catalog/product/ImportCSV', '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/import_csv.tpl', $data));
	}

модель:

 

	public function importCsvData($data) {
		$product_id = $data[0];
		$model = $data[1];
		$name = $data[2];
		$quantity = $data[3];
		 
		if($product_id!='')
		{
		    $query = $this->db->query("UPDATE `".DB_PREFIX."product` SET model='".$model."',quantity='".(int)$quantity."' WHERE product_id='".$product_id."'");//updating product quantity & its model
		    if($name)
		    {
		        $query = $this->db->query("UPDATE `".DB_PREFIX."product_description` SET name='".$this->db->escape($name)."' WHERE product_id='".$product_id."'"); // update the name of the product
		    }
		}
	}   

Проблема в контроллере в строке $this->model_catalog_product->importCsvData($line);  // parse the data to model
функция в модели не вызывается, сайт возвращает 500 ошибку. У меня очень мало опыта в php, подскажите, возможно ли данный туториал адаптировать под 2.0?

Змінено користувачем gr4k
Надіслати
Поділитися на інших сайтах


перед вызовом

$this->model_catalog_product->importCsvData($line);  // parse the data to model

модель должна быть загружена

$this->load->model('catalog/product');

а для начала прочитайте https://opencartforum.com/forum-40/announcement-1-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-http-500-internal-server-error-%D0%BE%D0%BD%D0%B0-%D0%B6%D0%B5-%D0%B1%D0%B5%D0%BB%D1%8B%D0%B9-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD-%D1%87%D0%B8%D1%82%D0%B0%D1%82%D1%8C-%D0%BF%D1%80%D0%B5%D0%B6%D0%B4/

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


перед вызовом

$this->model_catalog_product->importCsvData($line);  // parse the data to model

модель должна быть загружена

$this->load->model('catalog/product');

а для начала прочитайте https://opencartforum.com/forum-40/announcement-1-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-http-500-internal-server-error-%D0%BE%D0%BD%D0%B0-%D0%B6%D0%B5-%D0%B1%D0%B5%D0%BB%D1%8B%D0%B9-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD-%D1%87%D0%B8%D1%82%D0%B0%D1%82%D1%8C-%D0%BF%D1%80%D0%B5%D0%B6%D0%B4/

спасибо! Может быть кому-то понадобится рабочий код:

 

Добавить кнопку во фронтенд можете по этому туториалу, там тоже немного нужно изменить код под 2.0:

http://code.tutsplus.com/articles/building-a-product-csv-import-tool-in-opencart-part-1--cms-24093

controller:

 

	public function importCSV() {
		$data['error_csv'] = '';
		if ($this->request->server['REQUEST_METHOD'] == 'POST'){
			$this->load->model('catalog/product');
			$file = $_FILES['csv']['tmp_name'];
			if (empty($file)) {
				$this->session->data['warning'] = 'CSV Not selected!';
			}
			else {
				$f = fopen($file,"r");
				while (($line = fgetcsv($f, 1000, ",")) !== FALSE)
				{
				    if ($line[0]!='') // if column 1 is not empty
				    {
				        $this->model_catalog_product->importCsvData($line);  // parse the data to model
				    }
				    else
				    {
				        $data['error_csv'] += 'error';
				    }
				}
				$this->session->data['success'] = 'CSV Successfully Imported!'; //success message
			}

		$this->response->redirect($this->url->link('catalog/product/importCSV', 'token=' . $this->session->data['token'], 'SSL'));
		}

		$this->document->setTitle('Import CSV');

		$data['heading_title']="Import CSV"; // parsing up heading title
		$this->load->model('catalog/product'); // Loading the Model of Products

		$data['cancel'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'], 'SSL');
		$data['action'] = $this->url->link('catalog/product/importCSV', '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/product', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => 'ImportCSV',
			'href' => $this->url->link('catalog/product/ImportCSV', '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/import_csv.tpl', $data));
	}

model:

 

	public function importCsvData($data) {
		$product_id = $data[0];
		$model = $data[1];
		$name = $data[2];
		$quantity = $data[3];
		 
		if($product_id!='')
		{
		    $this->db->query("UPDATE `".DB_PREFIX."product` SET model='".$model."',quantity='".(int)$quantity."' WHERE product_id='".$product_id."'");//updating product quantity & its model
		    if($name)
		    {
		        $this->db->query("UPDATE `".DB_PREFIX."product_description` SET name='".$this->db->escape($name)."' WHERE product_id='".$product_id."'"); // update the name of the product
		    }
		}
	} 
Змінено користувачем gr4k
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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