Добавление файла к товару

категория: , Дорабатываем


Опубликовано: 31.05.2015 Обновлено: 25.08.2015 Просмотров: 5434 Комментарии: 2


Добавление файла к товару

В Opencart есть возможность закачки файлов через админку. Однако сделано это очень неудобно и дает возможность скачивать файл только с личного кабинета покупателя


В Opencart есть возможность закачки файлов через админку. Однако сделано это очень неудобно и дает возможность скачивать файл только с личного кабинета покупателя, после совершения покупки.

Но во многих случаях нам надо прикрепить инструкцию или любой другой файл к товару. Стандартными возможностями сделать это не предоставляется возможным, либо только вручную ссылку прописывать, что не правильно.

Для добавления файла к товару нам надо создать возможность его закачки в форме редактирования товара.

Но для сохранения этих данных требуется дополнительное поле в базе данных. Создавать его я не вижу смысла т.к. в опенкарте есть много полей, которые думаю 90% не используют вовсе. Выберем переменную jan. Для этого открываем admin/view/template/catalog/product_form.tpl и в любое удобное место (смотрите по верстке) вставляем форму загрузки файла.

<tr>
	<td>Файл:</td>
	<td><input type="text" name="jan" value="<?php echo $jan; ?>" /> <a id="button-upload-jan" class="button">Обзор</a></td>
</tr>

Для работы которой нам понадобится javascript код, который вставляем перед <?php echo $footer; ?>

<script type="text/javascript" src="view/javascript/jquery/ajaxupload.js"></script>
<script type="text/javascript"><!--
	new AjaxUpload('#button-upload-jan', {
		action: 'index.php?route=catalog/download/upload_jan&token=<?php echo $token; ?>',
		name: 'file',
		autoSubmit: true,
		responseType: 'json',
		onSubmit: function(file, extension) {
			$('#button-upload-jan').after('<img src="view/image/loading.gif" class="loading" style="padding-left: 5px;" />');
			$('#button-upload-jan').attr('disabled', true);
		},
		onComplete: function(file, json) {
			$('#button-upload').attr('disabled', false);
			if (json['success']) {
			alert(json['success']);
			$('input[name="jan"]').attr('value', json['jan']);
			}
			if (json['error']) {
			alert(json['error']);
			}
			$('.loading').remove();
		}
	});
//--></script>

Для загрузки файла на сервер нам надо обработчик, для этого открываем файл admin/controller/catalog/download.php и перед строкой

public function index() {

Вставляем:

public function transform($string){
	$arr = array( 'А' => 'A' , 'Б' => 'B' , 'В' => 'V' , 'Г' => 'G', 'Д' => 'D' , 'Е' => 'E' , 'Ё' => 'JO' , 'Ж' => 'ZH', 'З' => 'Z' , 'И' => 'I' , 'Й' => 'JJ' , 'К' => 'K', 'Л' => 'L' , 'М' => 'M' , 'Н' => 'N' , 'О' => 'O', 'П' => 'P' , 'Р' => 'R' , 'С' => 'S' , 'Т' => 'T', 'У' => 'U' , 'Ф' => 'F' , 'Х' => 'KH' , 'Ц' => 'C', 'Ч' => 'CH', 'Ш' => 'SH', 'Щ' => 'SHH', 'Ъ' => '"', 'Ы' => 'Y' , 'Ь' => '', 'Э' => 'EH' , 'Ю' => 'JU', 'Я' => 'JA', 'а' => 'a' , 'б' => 'b' , 'в' => 'v' , 'г' => 'g', 'д' => 'd', 'е' => 'e' , 'ё' => 'jo' , 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'jj', 'к' => 'k' , 'л' => 'l' , 'м' => 'm', 'н' => 'n', 'о' => 'o' , 'п' => 'p' , 'р' => 'r' , 'с' => 's', 'т' => 't', 'у' => 'u' , 'ф' => 'f' , 'х' => 'kh', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shh', 'ъ' => '"' , 'ы' => 'y', 'ь' => '_', 'э' => 'eh', 'ю' => 'ju' , 'я' => 'ja', ' ' => '_');
	$key = array_keys($arr);
	$val = array_values($arr);
	$translate = str_replace($key, $val, $string);
	return $translate;
}

public function upload_jan() {
	$json = array();
	if (!empty($this->request->files['file']['name'])){
		$filename = $this->transform($this->request->files['file']['name']);
		if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 1000)) {
			$json['error'] = $this->language->get('error_filename');
		}
		if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
			$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
		}
	} else {
		$json['error'] = $this->language->get('error_upload');
	}

	if (!isset($json['error'])) {
		move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $filename);
		$json['jan'] = $filename;
		$json['success'] = "Файл загружен успешно!";
	}

	$this->response->setOutput(json_encode($json));
}

Этот код загружает файл на сервер, помещает его в папку download и преобразует имя файла в транслит, при этом заменяя пробелы и другие спецсимволы на нормальные разделители слов. Например, у нас был файл «Инструкция к велосипеду.docx» на сервер оно загрузится как «instrukciya_k_velosipedu.docx» что более правильно.

Добавление файла к товару в Opencart

Для вывода его в карточке товара нам надо открыть файл: catalog/controller/product/product.php и перед строкой:

$this->data['options'] = array();

вставить

$this->data['file'] = "/download/".$product_info['jan'];

После этого открываем файл шаблон catalog/view/theme/default/template/product/product.tpl и в любое удобное место (смотрите по шаблону и верстке) вставляете ссылку на закачку файла:

<?php if($file){ ?><a href="<?php echo $file; ?>">Скачать инструкцию</a><?php } ?>

После таких изменений у нас к каждому товару можно добавлять файл на закачку посетителем при просмотре карточки товара.

Маленькое замечание. Увеличьте поле jan в базе данных до 1000 символов.

UPD: Написал свой модуль для добавления файлов к товару. Скачать можно по ссылке


Комментарии:


Фото комментатора

Dimon 22.08.2015

Условие if не срабатывает, ссылка показывается всегда, независимо от того есть файл или нет.
Администратор

Ответ for-opencart.com 22.08.2015

Надо еще протестировать. Но на данный момент я разработал модуль для добавления файлов к товарам. Скачать его можно по ссылке добавление файлов к товарам

Фото комментатора

Viktor 05.02.2016

Хотел посмотреть как работает перед покупкой, не работает демо доступ.
Администратор

Ответ for-opencart.com 05.02.2016

2.for-opencart.com

admin

admin

UPD. Не тот модуль дал. Немного позже дам демки для файлов.

Быстрый поиск

Похожее

Новое на сайте