ps-simpla Опубликовано 31 января, 2015 Жалоба Поделиться Опубликовано 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 вопрос, как сделать проверку если такой файл с таким названием есть то выдать ошибку ... Знатоков прошу дополнить или дать замечания, что бы довести до ума данную доработку. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 1 февраля, 2015 Жалоба Поделиться Опубликовано 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. Экспорт-импорт... Цитата Ссылка на сообщение Поделиться на другие сайты
ps-simpla Опубликовано 1 февраля, 2015 Автор Жалоба Поделиться Опубликовано 1 февраля, 2015 1. По моему, при создании дубля товара запись в бд должна благополучно дублироваться. 2. как сделать проверку если такой товар с таким названием есть то выдать ошибку - лучше всего подождать, когда разработчик исправит ошибку http://forum.simplacms.ru/topic/9097-как-simpla-перезагружает-цифровой-товар а потом уже действовать по аналогии. 3. Экспорт-импорт...1. И вправду получилось.... странно 2. Думаю не скоро будет данное решение... 3. ДА точно Цитата Ссылка на сообщение Поделиться на другие сайты
vziker Опубликовано 10 февраля, 2015 Жалоба Поделиться Опубликовано 10 февраля, 2015 Отличное решение Цитата Ссылка на сообщение Поделиться на другие сайты
yourock Опубликовано 15 июня, 2015 Жалоба Поделиться Опубликовано 15 июня, 2015 (изменено) А как в шаблон передать расширение файла? Хочу сделать, чтобы на странице товара, рядом с ссылкой на скачивание файла отображалась иконка, соответствующая типу загруженного файла - PDF, ZIP и так далее. Переменная {$product->attachment_files_one} содержит полное название загруженного файла, например "instrukciya-svarka.pdf". Как из нее вычленить только "pdf" ? ... и если возможно то размер файла, как-то отобразить. Изменено 15 июня, 2015 пользователем yourock Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 15 июня, 2015 Жалоба Поделиться Опубликовано 15 июня, 2015 Примерно так:{$product->attachment_files_one|regex_replace:"/.*\./":""} Цитата Ссылка на сообщение Поделиться на другие сайты
yourock Опубликовано 15 июня, 2015 Жалоба Поделиться Опубликовано 15 июня, 2015 Примерно так:{$product->attachment_files_one|regex_replace:"/.*\./":""} Работает.Дай бог Вам здоровьюшка, Kors! Цитата Ссылка на сообщение Поделиться на другие сайты
Foх Опубликовано 16 июня, 2015 Жалоба Поделиться Опубликовано 16 июня, 2015 1. И вправду получилось.... странно 2. Думаю не скоро будет данное решение...3. ДА точно дружище подскажи как сделать чтоб возможно было загружать 1 одному товару несколько инструкций? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 16 июня, 2015 Жалоба Поделиться Опубликовано 16 июня, 2015 Несколько инструкций - сделать сложнее.Надо либо заводить отдельную таблицу по примеру связанных товаров или изображений, либо сериализовать массив с названиями инструкций. Цитата Ссылка на сообщение Поделиться на другие сайты
Foх Опубликовано 16 июня, 2015 Жалоба Поделиться Опубликовано 16 июня, 2015 Несколько инструкций - сделать сложнее.Надо либо заводить отдельную таблицу по примеру связанных товаров или изображений, либо сериализовать массив с названиями инструкций. а если создать 5 полей и обращаться к ним это сильно загрузит сайт? получается все продублировано будет. Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 16 июня, 2015 Жалоба Поделиться Опубликовано 16 июня, 2015 Нет, не думаю, что это увеличит нагрузку. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 20 июля, 2015 Жалоба Поделиться Опубликовано 20 июля, 2015 Еще есть 1 вопрос, как сделать проверку если такой файл с таким названием есть то выдать ошибку ... я добавлял в название файла еще айди объекта. ну там товара/категории/поста. таким образом затирать не будет. Цитата Ссылка на сообщение Поделиться на другие сайты
Dysha-Kuzbass Опубликовано 6 августа, 2015 Жалоба Поделиться Опубликовано 6 августа, 2015 А можно ли организовать другие имена для файлов загрузки? Т.е., рандомые, к примеру, dfg64dg65d4gd564gd.zip З.Ы. Я с картинками такое сделал, а вот с файлами не получается! Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 6 августа, 2015 Жалоба Поделиться Опубликовано 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 от названия впринципе. не забывайте о расширении Цитата Ссылка на сообщение Поделиться на другие сайты
Dysha-Kuzbass Опубликовано 6 августа, 2015 Жалоба Поделиться Опубликовано 6 августа, 2015 Для картинок я сделал следующее: $ext = pathinfo($uploaded_file, PATHINFO_EXTENSION); $new_name = uniqid('img_') . '.' . $ext; Картинки получаются такого вида: img_55c3743b9e14d.800x600w.jpg? С загрузкой файлов пытался такое же проделать: не прокатило.. Цитата Ссылка на сообщение Поделиться на другие сайты
spl Опубликовано 10 августа, 2015 Жалоба Поделиться Опубликовано 10 августа, 2015 Добрый день. Все проделал по инструкции, ноВ карточке товара админке файл загружается и попадает в папку документс, но в карточе товара что в админке, что на сайте не отображается. Версия 2,3,6.Проверил несколько раз правильность установки. Что может быть?Спасибо. Цитата Ссылка на сообщение Поделиться на другие сайты
spl Опубликовано 10 августа, 2015 Жалоба Поделиться Опубликовано 10 августа, 2015 Добрый день. Все проделал по инструкции, ноВ карточке товара админке файл загружается и попадает в папку документс, но в карточе товара что в админке, что на сайте не отображается. Версия 2,3,6.Проверил несколько раз правильность установки. Что может быть?Спасибо.Все разобрался))Затык был в найдем: p.body, и ниже вставим (в 2-х случаях): p.attachment_files_one, Цитата Ссылка на сообщение Поделиться на другие сайты
Dysha-Kuzbass Опубликовано 10 августа, 2015 Жалоба Поделиться Опубликовано 10 августа, 2015 В головном файле index.php ещё добавить нужно: }, ибо будет просто белая страница. Цитата Ссылка на сообщение Поделиться на другие сайты
spl Опубликовано 10 августа, 2015 Жалоба Поделиться Опубликовано 10 августа, 2015 В головном файле index.php ещё добавить нужно: }, ибо будет просто белая страница.Да не, все вроде ок. Цитата Ссылка на сообщение Поделиться на другие сайты
trainracing Опубликовано 11 августа, 2015 Жалоба Поделиться Опубликовано 11 августа, 2015 Спасибо! Супер) надо придумать как вывести в вместо текста один вариант из характеристик (наример модель : mck27j ) и выводить "инструкция {$f->value->id=5} " как правильно? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 11 августа, 2015 Жалоба Поделиться Опубликовано 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/ Цитата Ссылка на сообщение Поделиться на другие сайты
trainracing Опубликовано 11 августа, 2015 Жалоба Поделиться Опубликовано 11 августа, 2015 Kors как всегда выручает) спасибо огромное! Цитата Ссылка на сообщение Поделиться на другие сайты
goaad Опубликовано 26 марта, 2016 Жалоба Поделиться Опубликовано 26 марта, 2016 Подскажите пожалуйста, какой принцип работы "цифрового товара"? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 26 марта, 2016 Жалоба Поделиться Опубликовано 26 марта, 2016 Принцип обычный. А практическая реализация слабовата. Использовать не рекомендуется.Поиском по фразе "цифровой товар" можете найти сведения о недостатках.За много лет работы с Simpla не встретил ни одного сайта, работающего с цифровым товаром.Зато встречал фрилансеров, который используют свои сайты для продажи доработок, но при этом СОЗНАТЕЛЬНО не используют функционал цифрового товара... Цитата Ссылка на сообщение Поделиться на другие сайты
trainracing Опубликовано 15 апреля, 2016 Жалоба Поделиться Опубликовано 15 апреля, 2016 Столкнулся с проблемой, при загрузке pdf файла размером более 8мб он не сохранялся, если кому пригодится решение проблемы, нужно в настройках хостинга увеличить размер отправляемых файлов (post_max_size) Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.