admin Опубликовано 12 марта, 2022 Поделиться Опубликовано 12 марта, 2022 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 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.