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

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

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

Пытаюсь сделать импорт товаров из 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

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


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

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

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

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

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

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

Войти

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

Войти

  • Похожий контент

    • От savage4pro
      Скачать/Купить дополнение


      Замена символа рубля OCMOD
      Мод заменяет знак валюты рубля на симпатичный почти уже стандартный символ (U+20BD), представленный в наборе глифов шрифта "Roboto" от Christian Robertson.
      Подходит для любого шаблона OpenCart версий 2.0.x, 2.1.x, 2.2.x, 2.3.x при отсутствии прямых модификаций ядра.
      Схема работы:
      добавляет в БД новую таблицу `oc_currency_modsymbols` с одной записью - для валюты с кодом RUB
      на этапе выборки данных о валютах оборачивает оригинальный символ в конструкцию для обработки подключаемыми при загрузке страницы стилями
      не ломает возможность менять оригинальный символ в админке, который будет показан при выводе шаблонов, в которых нет возможности подключать дополнительные стили (например, почтовые уведомления), пробелы до/после оригинального символа выносятся за пределы конструкции, т.е. сохраняются
      после установки можно вручную добавлять записи в таблицу `oc_currency_modsymbols` для форматирования символов валют по желанию (для включения в конечную строку стандартного значения, т.е. для автозамены, вместо него следует указать "_default_symbol_")
      мод можно безболезненно отключать/удалять, функциональность при этом вернется к стандартной
      Установка:
      Бекап!
      загрузить roboto-rouble-symbol-2.5.ocmod.zip через Extensions / Extension Installer
      обновить кэш модификаций на странице Extensions / Modifications
      обновить системный кэш

      Удаление:
      Бекап!
      удалить мод на странице Extensions / Modifications, там же обновить кэш модификаций
      обновить системный кэш
      вручную удалить из БД таблицу `oc_currency_modsymbols`
      вручную удалить файлы catalog/view/theme/default/stylesheet/roboto-forced.css и roboto-forced.min.css
      вручную удалить файлы catalog/view/theme/default/stylesheet/font/google/roboto-subset-latin-ext-*.*
      При обновлении с предыдущих версий рекомендется полное их удаление, но можно удалить сам модификатор и очистить системный кэш и кэш модификаций, данные БД перезапишутся на новые при повторной установке.

      В случае некорректного отображения блока с форматированной ценой (например, вылезающие закрывающие теги вида: руб." />") необходимо в шаблоне, где эта цена выводится, оборачивать её вывод в strip_tags();
      С 2016-11-28 (v.2.5.1) в комплекте идет сабсет (latin-ext, webfont) шрифта Roboto для совместимости с браузерами, которые блокируют подгрузку внешних шрифтов (да, это про тебя, IE9, гори в аду!)
      Добавил savage4pro Добавлено 06.11.2015 Категория Прочее Системные требования Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop  
    • От Evergreens
      800.00 руб
      Скачать/Купить дополнение


      Модуль адаптивной Корзины "Evercart" +API "Новая Почта"
      Evercart v2.0+
      GreenCart (EverCart) - упрощенный модуль корзины с оформлением заказа + обновление по API отделений Новая Почта
      Разработано: © 2015 Evergreen http://evergreens.com.ua
      Совместимость:
      OpenCart: 2.0.0.0 / 2.0.1.0 / 2.0.1.1 / 2.0.2.0 / 2.0.3.1
      ocStore: теоретически должен работать на версиях 2.0.* (тестирования не было)
      Внимание: корректность работы модуля не гарантируется на версиях, которые не указаны выше.
      Тестировали в: Opera 12, FireFox, Chrome, IE 9 (версии ниже не поддерживаются), Safari
      Инструкция по установке (также находится в файле readme.txt, в архиве модуля):
      1. Поместите файлы из директории upload на сервер
      2. Перейдите в административный раздел сайта (Дополнения - Модули). Установите и настройте дополнение "Evercart"
      3. Перейдите в раздел Дополнения - Установка дополнений. Загрузите файл evercart.ocmod.xml.
      4. Перейдите в раздел Дополнения - Модификации и нажмите Обновить.
      5. Также в комплекте присутствуют модифицированные системы доставки (Новая Почта и Курьерская доставка). Их можно установить также из раздела Дополнения - Доставка.
      Что модуль имеет:
      отображение сэкономленных средств;
      возможность добавления пользовательских полей ввода персональных данных (настраивается из админ панели магазина);
      динамический пересчет стоимости товаров в корзине;
      возможность вывода кастомных темплейтов модулей доставки;
      стилизированы некоторые элементы.
      + обновление по API отделений Новая Почта

      Особенности:
      Модули доставки «Новая Почта» и «Доставка Курьером». Особенность этих модулей заключается в возможности заполнения дополнительной информации для выбранной системы доставки и динамическом пересчете итоговой суммы.
      Корзина адаптивная, что позволяет ей отображаться корректно на разных устройствах.
      Демо корзины:
      Сайт: http://opencart2.dev.evergreens.com.ua/
      Админ панель: http://opencart2.dev.evergreens.com.ua/admin/
      логин: observer
      пароль: test
      Если у вас возникли трудности по установке модуля на ваш нестандартный шаблон, то адаптация модуля выполняется не бесплатно. Для адаптации вам необходимо написать нам на support@evergreens.com.ua
      Информационный продукт, если не определен как продукт с бесплатным тестовым периодом, возврату и обмену не подлежит.
      Добавил Evergreens Добавлено 29.08.2015 Категория Прочее Системные требования OCMod Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop  
    • От AlexDW
      Скачать/Купить дополнение


      FixFilter OC2x - исправление фильтра в Opencart 2.0
      Стандартный фильтр Opencart работает по принципу ИЛИ (OR) для разных групп при фильтрации.
      Данный патч решает проблему с фильтром, меняя логику выбора групп фильтров на И (AND)
       
      Актуален для ocStore / Opencart.PRO & CMS / Opencart версий 2.0.0.0 - 3.0.2.x Не меняет файлы движка и БД (работает через OCMOD)  
      DEMO
      ADMIN

      до патча:
      при фильтрации будут выбраны все товары, у которых совпадает ХОТЯ БЫ один параметр в фильтрах (без учета групп фильтров)
      пример - все товары, где совпадают цвет или размер

      после патча:
      при фильтрации будут выбраны только те товары, у которых совпадут ВСЕ отмеченные параметры в фильтрах (с учетом групп фильтров)
      пример - только те товары, где совпадают и цвет, и размер

      Как настроить фильтр в Opencart

      Внимание!
      Патч предназначен только для стандартного фильтра Opencart
      При использовании отдельного модуля фильтра (Mega Filter, Filter Pro и др) необходимости в патче нет, его применение может привести к ошибкам

      Установка 2x:
      1. Загрузить файл fix_filter.ocmod.xml в Extensions->Extension Installer (Дополнения > Установка дополнений)
      2. Обновить кеш модификаторов в Extensions->Modifications (Дополнения > Менеджер дополнений)

      Установка 3x:
      1. Загрузить архив fix_filter.ocmod.zip в Extensions->Extension Installer (Дополнения > Установка дополнений)
      2. Обновить кеш модификаторов в Extensions->Modifications (Дополнения > Менеджер дополнений)
       
       
      Другие дополнения:
      --------------------------
      SearchOrder - быстрый просмотр и поиск по заказам
      AutoSearch 2x - предпросмотр результатов поиска
      OrderField - дополнительные поля в заказе, корзине и письме
      ExtendedSearch - настройка и управление поиском в Opencart
      Добавил AlexDW Добавлено 14.08.2015 Категория Фильтры Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х  
    • От Otvet
      Скачать/Купить дополнение


      Настраиваемый H1 для Opencart 2.0.x [OCmod]
      OCmod-Модификатор.
      Добавляет кастомные H1 для товаров, категорий и информационных страниц.
      Для работы модификатор сам создает поля в базе данных.
      Установка производится через стандартный инструмент: Дополнения - Установка дополнений.
      Выберите файл custom_h1.ocmod.zip
      Распаковывать архив не нужно.
      После установки не забудьте обновить кеш модификаций.
      Если на этапе Выполнение SQL! возникает ошибка, значит записи в бд присутствуют, установите custom_h1_no_sql.ocmod.zip
      Обратите так-же внимание на более важный модуль H1 для главной https://opencartforum.com/files/file/2672-seo-h1-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%BE%D0%B5-%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5/
      Добавил Otvet Добавлено 15.06.2015 Категория Прочее  
    • От serega-lomik
      Скачать/Купить дополнение


      PopUp Image Options для Opencart и OcStore 2.*
      Модуль изменяет вид опций-картинок в карточке товара. Картинки заменяются на кнопку, при клике по которой открывается всплывающее окно со списком опций-картинок.
      Основные возможности модуля:
      Модуль полностью настраивается из админ части магазина
      Присутствует возможность выбора опций и категорий, для которых необходимо активировать модуль
      В настройках модуля вы можете включить замену главного изображения товара на изображение выбранной опции
      Возможность выбора ширины картинок опций во всплывающем окне
      Возможность выбора максимальной ширины самого окна с картинками опций
      В модуль встроен автопересчёт цены в зависимости от выбранных опций

      Тестировалось на OpenCart и OcStore версий с 2.0.* по 2.1.*
      Вид опций-картинок до установки модуля:

      Вид опций-картинок после установки модуля:


      Установка: распаковываем архив, содержимое папки upload загружаем в корень сайта, файл options_slider.ocmod.xml устанавливаем через "установку расширений" в админ. части магазина.
      Для тех, у кого настроен ФТП в амин части магазина достаточно просто загрузить весь архив через "установку расширений".
      После установки модуля не забываем перейти в раздел "Модификаторы", очистить там лог и нажать кнопку "Обновить"
      Так-же существует версия для OpenCart и OcStore версий 1.5 - https://opencartforum.com/files/file/2132-popup-image-options-%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8-%D0%BE%D0%BF%D1%86%D0%B8%D0%B9-%D0%B2%D0%BE-%D0%B2%D1%81%D0%BF%D0%BB%D1%8B%D0%B2-%D0%BE%D0%BA%D0%BD%D0%B5-vqmod/
      Демо:http://oc2.oc-dev.ru/test
      Добавил serega-lomik Добавлено 23.04.2015 Категория Опции Системные требования Сайт разработчика Старая цена Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop  
  • Последние посетители   0 пользователей онлайн

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

×

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

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