В Opencart есть возможность закачки файлов через админку. Однако сделано это очень неудобно и дает возможность скачивать файл только с личного кабинета покупателя, после совершения покупки.
Но во многих случаях нам надо прикрепить инструкцию или любой другой файл к товару. Стандартными возможностями сделать это не предоставляется возможным, либо только вручную ссылку прописывать, что не правильно.
Для добавления файла к товару нам надо создать возможность его закачки в форме редактирования товара.
Но для сохранения этих данных требуется дополнительное поле в базе данных. Создавать его я не вижу смысла т.к. в опенкарте есть много полей, которые думаю 90% не используют вовсе. Выберем переменную jan. Для этого открываем admin/view/template/catalog/product_form.tpl и в любое удобное место (смотрите по верстке) вставляем форму загрузки файла.
Файл: Обзор
Для работы которой нам понадобится javascript код, который вставляем перед
Для загрузки файла на сервер нам надо обработчик, для этого открываем файл 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 и в любое удобное место (смотрите по шаблону и верстке) вставляете ссылку на закачку файла:
Скачать инструкцию
После таких изменений у нас к каждому товару можно добавлять файл на закачку посетителем при просмотре карточки товара.
Маленькое замечание. Увеличьте поле jan в базе данных до 1000 символов.
UPD: Написал свой модуль для добавления файлов к товару. Скачать можно по ссылке