категория: , Дорабатываем
✎ Опубликовано: 31.05.2015 ✎ Обновлено: 25.08.2015 ☕ Просмотров: 12372 ✉ Комментарии: 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» что более правильно.
Для вывода его в карточке товара нам надо открыть файл: 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: Написал свой модуль для добавления файлов к товару. Скачать можно по ссылке
Надо еще протестировать. Но на данный момент я разработал модуль для добавления файлов к товарам. Скачать его можно по ссылке добавление файлов к товарам
Бывают случаи, когда в списке товаров нужно кроме основного изображения вывести и дополнительные. Например, интернет-магазин фейерверков.
В стандартной реализации Opencart не предусмотрен вывод производителя товара в категории, но в некоторых ситуациях он просто необходим.
В CMS Opencart очень много есть преимуществ перед аналогами. Однако эта система имеет и свои недостатки. Самым серьезным из которых, как я считаю, являются – дубли страниц.
Как прикрепить файлы к товару, что бы была возможность их скачивания без покупки. Например инструкции или драйвера. Есть модуль!
Читая информацию о рекламе в facebook я нашел кое что интересное
Чистый и валидный HTML и CSS код, Хорошие показатели Google Page Speed, Более 20 модулей в комплекте, Профессиональная техническая поддержка - это только часть того что есть в шаблоне
Исправляем странный баг в Opencart в удаляется товар при копировании. Этот баг присутствует в google chrome
Также в статье хочу выразить благодарность не только Виталию а и другим крутым авторам дополнений с кем приходилось иметь дело
Чтобы принимать Биткоин и Лайткоин в OpenCart, вам не нужно заполнять утомительные документы, проходить проверку и ждать несколько дней. Установите бесплатный модуль и просто введите адрес своего Биткоин и/или Лайткоин кошелька. Тогда все входящие платежи
Монобанк - прогрессивный банк без отделений в котором дают кредитные карточки с хорошим грейс периодом а также возможностью заработать открыв в нем депозит. Именно о нем и пойдет речь
Мы знаем что поисковые роботы любят текст на страницах. Однако публикуя тексты помните предназначена ли эта страница для такого текста
Небольшой пример как можно сделать автоматически содержание описания со скролом при клике на заголовок
Обзор платежного шлюза fondy который позволяет сделать онлайн оплату на сайте за любые товары или услуги
Как оптимизировать сайт для google page speed - обзор основного функционала сервиса от гугл для проверки скорости загрузки страницы
Для того что бы вывести кастомную информацию не надо много кода. Достаточно применить правильный подход и пару строк кода. Читаем в статье.
Как мне "посчастливилось" пощупать UMI CMS особенно со стороны переноса данных и почему меня до сих пор тошнит при слове UMI
В этом обзоре будут выявлены все плюсы и минусы каждого фильтра. Всего в обзоре будет 7 фильтров который продаются и развиваются. По завершению будет дана рекомендация какой же выбрать
Коллеги, давайте предоставлять хороший сервис и поднимать планку качества. Небольшая история как я обращался к разным разработчикам