ps-simpla Posted January 31, 2015 Report Share Posted January 31, 2015 http://s7.hostingkartinok.com/uploads/images/2015/01/6f25703f19732e2069dd84674b55e850.jpg Многим думаю пригодится, допустим у нас есть кнопка "интсрукция" при нажатии на нее скачиваем файл. Нам надо:Дополнительно поле type="file" для загрузки файла Возможности:- Загрузка файла- Удаление Файла- Вывод ссылки и название файла в шаблон- Расширение файлов которые можно загружать #0 - Запрос в БД: ALTER TABLE `s_products` ADD `attachment_files_one` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `name` #1 - \simpla\design\html\product.tplнайдем: // Удалить файл к варианту $('#variants_block a.remove_attachment').click(function() { closest_li = $(this).closest('li'); closest_li.find('.attachment_name').hide('fast'); $(this).hide('fast'); closest_li.find('input[name*=delete_attachment]').val('1'); closest_li.find('a.add_attachment').show('fast'); return false; }); и ниже вставим: // Загрузить файл 1 $('#variants_block_one a.add_attachment_one').click(function() { $(this).hide(); $(this).closest('li').find('div.browse_attachment_one').show('fast'); $(this).closest('li').find('input[name*=attachment_files_one]').attr('disabled', false); return false; }); // Удалить файл 1 $('#variants_block_one a.remove_attachment_one').click(function() { closest_li = $(this).closest('li'); closest_li.find('.attachment_name_one').hide('fast'); $(this).hide('fast'); closest_li.find('input[name*=delete_attachment_one]').val('1'); closest_li.find('a.add_attachment_one').show('fast'); return false; }); найдем: <!-- Правая колонка свойств товара --> <div id="column_right"> ниже вставим: <!-- Документация товара --> <div class="block layer" > <h2>Документация товара </h2> <ul> <li id="variants_block_one"> <b>Техническая документация:</b> {if $product->attachment_files_one} <span class=attachment_name_one><a href="../{$config->documents_dir}{$product->attachment_files_one}">{$product->attachment_files_one|truncate:25:'...':false:true}</a></span> <a href='#' class=remove_attachment_one><img src='design/images/bullet_delete.png' title="Удалить цифровой товар"></a> <a href='#' class=add_attachment_one style='display:none;'><img src="design/images/cd_add.png" title="Добавить цифровой товар" /></a> {else} <a href='#' class=add_attachment_one><img src="design/images/cd_add.png" title="Добавить цифровой товар" /></a> {/if} <div class=browse_attachment_one style='display:none;'> <input type=file name=attachment_files_one> <input type=hidden name=delete_attachment_one> </div> </li> </ul> </div> #2 - \simpla\ProductAdmin.phpнайдем: class ProductAdmin extends Simpla { ниже вставим: private $allowed_files_extentions = array('pdf', 'doc', 'rar', 'zip'); найдем: // Категории товара $product_categories = $this->request->post('categories'); if(is_array($product_categories)) выше вставим: // Удаление файла_one if($this->request->post('delete_attachment_one')) { $this->products->delete_attachment_one($product->id); } // Загрузка файла_one $attachment_files_one = $this->request->files('attachment_files_one'); if(!empty($attachment_files_one['name']) && in_array(strtolower(pathinfo($attachment_files_one['name'], PATHINFO_EXTENSION)), $this->allowed_files_extentions)) { $this->products->delete_attachment_one($product->id); move_uploaded_file($attachment_files_one['tmp_name'], $this->root_dir.$this->config->documents_dir.$attachment_files_one['name']); $this->products->update_product($product->id, array('attachment_files_one'=>$attachment_files_one['name'])); } #3 - \api\Products.phpнайдем: p.body, и ниже вставим (в 2-х случаях): p.attachment_files_one, найдем: public function delete_image($id) { выше вставим: /* * * Удаление файла_one * @param $id * */ public function delete_attachment_one($id) { $query = $this->db->placehold("SELECT attachment_files_one FROM __products WHERE id=?", intval($id)); $this->db->query($query); $attachment_files_one = $this->db->result('attachment_files_one'); if(!empty($attachment_files_one)) { $query = $this->db->placehold("UPDATE __products SET attachment_files_one=NULL WHERE id=?", $id); $this->db->query($query); $query = $this->db->placehold("SELECT count(*) as count FROM __products WHERE attachment_files_one=? LIMIT 1", $attachment_files_one); $this->db->query($query); $count = $this->db->result('count'); if($count == 0) { @unlink($this->config->root_dir.$this->config->documents_dir.$attachment_files_one); } } } найдем: // Удаляем варианты $variants = $this->variants->get_variants(array('product_id'=>$id)); foreach($variants as $v) $this->variants->delete_variant($v->id); ниже вставим: // Удаляем файл_one $this->delete_attachment_one($id); $query = $this->db->placehold("DELETE FROM __products WHERE id=? LIMIT 1", $id); #5 - \confing\confing.phpнайдем: ;Изображения брендов brands_images_dir = files/brands/; ниже вставим: ;Документация товара documents_dir = files/documents/; Не забываем создать папку "documents" в папке "file" #4 - вывод в шаблоне {if $product->attachment_files_one}<li><a href="../{$config->documents_dir}{$product->attachment_files_one}">Техническая документация</a></li>{/if} Сразу скажу при создании дубля товара файлы и запись в бд не про дублируется.Еще есть 1 вопрос, как сделать проверку если такой файл с таким названием есть то выдать ошибку ... Знатоков прошу дополнить или дать замечания, что бы довести до ума данную доработку. Quote Link to post Share on other sites
Kors Posted February 1, 2015 Report Share Posted February 1, 2015 1. По моему, при создании дубля товара запись в бд должна благополучно дублироваться.2. как сделать проверку если такой товар с таким названием есть то выдать ошибку - лучше всего подождать, когда разработчик исправит ошибку http://forum.simplacms.ru/topic/9097-%D0%BA%D0%B0%D0%BA-simpla-%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D1%82-%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B9-%D1%82%D0%BE%D0%B2%D0%B0%D1%80/ а потом уже действовать по аналогии.3. Экспорт-импорт... Quote Link to post Share on other sites
ps-simpla Posted February 1, 2015 Author Report Share Posted February 1, 2015 1. По моему, при создании дубля товара запись в бд должна благополучно дублироваться. 2. как сделать проверку если такой товар с таким названием есть то выдать ошибку - лучше всего подождать, когда разработчик исправит ошибку http://forum.simplacms.ru/topic/9097-как-simpla-перезагружает-цифровой-товар а потом уже действовать по аналогии. 3. Экспорт-импорт...1. И вправду получилось.... странно 2. Думаю не скоро будет данное решение... 3. ДА точно Quote Link to post Share on other sites
vziker Posted February 10, 2015 Report Share Posted February 10, 2015 Отличное решение Quote Link to post Share on other sites
yourock Posted June 15, 2015 Report Share Posted June 15, 2015 (edited) А как в шаблон передать расширение файла? Хочу сделать, чтобы на странице товара, рядом с ссылкой на скачивание файла отображалась иконка, соответствующая типу загруженного файла - PDF, ZIP и так далее. Переменная {$product->attachment_files_one} содержит полное название загруженного файла, например "instrukciya-svarka.pdf". Как из нее вычленить только "pdf" ? ... и если возможно то размер файла, как-то отобразить. Edited June 15, 2015 by yourock Quote Link to post Share on other sites
Kors Posted June 15, 2015 Report Share Posted June 15, 2015 Примерно так:{$product->attachment_files_one|regex_replace:"/.*\./":""} Quote Link to post Share on other sites
yourock Posted June 15, 2015 Report Share Posted June 15, 2015 Примерно так:{$product->attachment_files_one|regex_replace:"/.*\./":""} Работает.Дай бог Вам здоровьюшка, Kors! Quote Link to post Share on other sites
Foх Posted June 16, 2015 Report Share Posted June 16, 2015 1. И вправду получилось.... странно 2. Думаю не скоро будет данное решение...3. ДА точно дружище подскажи как сделать чтоб возможно было загружать 1 одному товару несколько инструкций? Quote Link to post Share on other sites
Kosjak76 Posted June 16, 2015 Report Share Posted June 16, 2015 Несколько инструкций - сделать сложнее.Надо либо заводить отдельную таблицу по примеру связанных товаров или изображений, либо сериализовать массив с названиями инструкций. Quote Link to post Share on other sites
Foх Posted June 16, 2015 Report Share Posted June 16, 2015 Несколько инструкций - сделать сложнее.Надо либо заводить отдельную таблицу по примеру связанных товаров или изображений, либо сериализовать массив с названиями инструкций. а если создать 5 полей и обращаться к ним это сильно загрузит сайт? получается все продублировано будет. Quote Link to post Share on other sites
Kosjak76 Posted June 16, 2015 Report Share Posted June 16, 2015 Нет, не думаю, что это увеличит нагрузку. Quote Link to post Share on other sites
mishanya Posted July 20, 2015 Report Share Posted July 20, 2015 Еще есть 1 вопрос, как сделать проверку если такой файл с таким названием есть то выдать ошибку ... я добавлял в название файла еще айди объекта. ну там товара/категории/поста. таким образом затирать не будет. Quote Link to post Share on other sites
Dysha-Kuzbass Posted August 6, 2015 Report Share Posted August 6, 2015 А можно ли организовать другие имена для файлов загрузки? Т.е., рандомые, к примеру, dfg64dg65d4gd564gd.zip З.Ы. Я с картинками такое сделал, а вот с файлами не получается! Quote Link to post Share on other sites
mishanya Posted August 6, 2015 Report Share Posted August 6, 2015 А можно ли организовать другие имена для файлов загрузки? Т.е., рандомые, к примеру, dfg64dg65d4gd564gd.zip З.Ы. Я с картинками такое сделал, а вот с файлами не получается! move_uploaded_file($attachment_files_one['tmp_name'], $this->root_dir.$this->config->documents_dir.$attachment_files_one['name']); $this->products->update_product($product->id, array('attachment_files_one'=>$attachment_files_one['name'])); нужно $attachment_files_one['name'] заменить на ваше название, которое будет сгенерировано каким-то генератом на php, можно просто брать md5 от названия впринципе. не забывайте о расширении Quote Link to post Share on other sites
Dysha-Kuzbass Posted August 6, 2015 Report Share Posted August 6, 2015 Для картинок я сделал следующее: $ext = pathinfo($uploaded_file, PATHINFO_EXTENSION); $new_name = uniqid('img_') . '.' . $ext; Картинки получаются такого вида: img_55c3743b9e14d.800x600w.jpg? С загрузкой файлов пытался такое же проделать: не прокатило.. Quote Link to post Share on other sites
spl Posted August 10, 2015 Report Share Posted August 10, 2015 Добрый день. Все проделал по инструкции, ноВ карточке товара админке файл загружается и попадает в папку документс, но в карточе товара что в админке, что на сайте не отображается. Версия 2,3,6.Проверил несколько раз правильность установки. Что может быть?Спасибо. Quote Link to post Share on other sites
spl Posted August 10, 2015 Report Share Posted August 10, 2015 Добрый день. Все проделал по инструкции, ноВ карточке товара админке файл загружается и попадает в папку документс, но в карточе товара что в админке, что на сайте не отображается. Версия 2,3,6.Проверил несколько раз правильность установки. Что может быть?Спасибо.Все разобрался))Затык был в найдем: p.body, и ниже вставим (в 2-х случаях): p.attachment_files_one, Quote Link to post Share on other sites
Dysha-Kuzbass Posted August 10, 2015 Report Share Posted August 10, 2015 В головном файле index.php ещё добавить нужно: }, ибо будет просто белая страница. Quote Link to post Share on other sites
spl Posted August 10, 2015 Report Share Posted August 10, 2015 В головном файле index.php ещё добавить нужно: }, ибо будет просто белая страница.Да не, все вроде ок. Quote Link to post Share on other sites
trainracing Posted August 11, 2015 Report Share Posted August 11, 2015 Спасибо! Супер) надо придумать как вывести в вместо текста один вариант из характеристик (наример модель : mck27j ) и выводить "инструкция {$f->value->id=5} " как правильно? Quote Link to post Share on other sites
Kors Posted August 11, 2015 Report Share Posted August 11, 2015 http://forum.simplacms.ru/topic/8269-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D0%BD%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D1%85-%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2-%D0%BD%D0%B0-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0/ Quote Link to post Share on other sites
trainracing Posted August 11, 2015 Report Share Posted August 11, 2015 Kors как всегда выручает) спасибо огромное! Quote Link to post Share on other sites
goaad Posted March 26, 2016 Report Share Posted March 26, 2016 Подскажите пожалуйста, какой принцип работы "цифрового товара"? Quote Link to post Share on other sites
Kors Posted March 26, 2016 Report Share Posted March 26, 2016 Принцип обычный. А практическая реализация слабовата. Использовать не рекомендуется.Поиском по фразе "цифровой товар" можете найти сведения о недостатках.За много лет работы с Simpla не встретил ни одного сайта, работающего с цифровым товаром.Зато встречал фрилансеров, который используют свои сайты для продажи доработок, но при этом СОЗНАТЕЛЬНО не используют функционал цифрового товара... Quote Link to post Share on other sites
trainracing Posted April 15, 2016 Report Share Posted April 15, 2016 Столкнулся с проблемой, при загрузке pdf файла размером более 8мб он не сохранялся, если кому пригодится решение проблемы, нужно в настройках хостинга увеличить размер отправляемых файлов (post_max_size) Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.