Перейти к содержанию
View in the app

A better way to browse. Learn more.

Русскоязычное сообщество Opencart

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

В связи с блокировкой банка QIWI оплата через сайт не возможна.
Для оплаты и получения дополнений просьба писать в личные сообщения 
Admin*у
или в Телеграмм https://t.me/pascha_opencart
После оплаты Вам так же будет доступно скачивание дополнений и обновлений на данном форуме

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

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

Опубликовано

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» что более правильно.

Для вывода его в карточке товара нам надо открыть файл: 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 символов.

Последние посетители 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.