mishanya Опубликовано 7 декабря, 2015 Жалоба Поделиться Опубликовано 7 декабря, 2015 (изменено) Что делает: дает возможность прикреплять любые файлы к объекту (товару, посту, странице). Можно использовать для вывода например документации товара и другой информации 1. выполнить запрос DROP TABLE IF EXISTS `s_files`; CREATE TABLE `s_files` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `object_id` int(11) NOT NULL DEFAULT '0', `filename` varchar(255) NOT NULL DEFAULT '', `type` enum('product','blog','page','order') NOT NULL, `position` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 2. добавить в папку /api - Files.php 3. добавляем класс в api/Simpla.php 'files' => 'Files', 4. добавляем в config/config.php ;Директория файлов cms_files_dir = files/files/; 5. добавляем папку files с правами 777 в папку /files6. добавить в нужный контролер админки (simpla/PostAdmin.php, simpla/ProductAdmin.php, simpla/PageAdmin.php) код для POST запроса на примере simpla/ProductAdmin.php после $images = $this->products->get_images(array('product_id'=>$product->id)); вставляем код $files = array(); $files = (array)$this->request->post('files'); // Удаление файлов $current_files = $this->files->get_files(array('object_id'=>$product->id,'type'=>'product')); foreach($current_files as $file) if(!in_array($file->id, $files['id'])) $this->files->delete_file($file->id); // Порядок файлов if($files = $this->request->post('files')){ $i=0; foreach($files['id'] as $k=>$id) { $this->files->update_file($id, array('name'=>$files['name'][$k],'position'=>$i)); $i++; } } // Загрузка файлов if($files = $this->request->files('files')){ for($i=0; $i<count($files['name']); $i++) { if ($file_name = $this->files->upload_file($files['tmp_name'][$i], $files['name'][$i])){ $this->files->add_file($product->id, 'product', $file_name); } else { $this->design->assign('error', 'error uploading file'); } } } $files = $this->files->get_files(array('object_id'=>$product->id,'type'=>'product')); 7. В конце контролера из п6 добавляем выборку файлов при открытии страницы админки (на примере товаров) $files = $this->files->get_files(array('object_id'=>$product->id,'type'=>'product')); $this->design->assign('cms_files', $files); 8. Добавить в шаблон админки куда нужно (post.tpl, product.tpl, order.tpl)на примере simpla/design/html/product.tpl <div class="block layer"> <h2>Файлы товара</h2> {if $cms_files|count>0} <div id=list class="sortable files_products"> {foreach $cms_files as $file} <div class="row"> <div class="move cell"> <div class="move_zone"></div> </div> <div class="name cell"> <input type=text name='files[name][]' value='{$file->name}'> </div> <div class="name cell"> <input type=hidden name='files[id][]' value='{$file->id}'> <a target="_blank" href="{$config->cms_files_dir}{$file->filename}"> {$file->filename} </a> </div> <div class="icons cell"> <a href='#' class="delete"></a> </div> <div class="clear"></div> </div> {/foreach} </div> {else} Нет файлов {/if}<br/> <input class='upload_file' name=files[] type=file multiple accept='pdf/txt/doc/docx'> </div> 9. В файле дизайна п.8 добавить js-код для удаления файла // Удаление файлов товара $(".files_products a.delete").live('click', function() { $(this).closest("div.row").fadeOut(200, function() { $(this).remove(); }); return false; }); 10. добавить в нужный контролер сайта (view/BlogView.php, view/ProductView.php, simpla/PageView.php) код для выборки файлов объекта на примере view/ProductView.php $files = $this->files->get_files(array('object_id'=>$product->id,'type'=>'product')); $this->design->assign('cms_files', $files); 11. добавить в шаблон строки для вывода файлов {if $cms_files} <h2>Файлы</h2> {foreach $cms_files as $file} <a href="{$config->cms_files_dir}{$file->filename}"> {if $file->name}{$file->name}{else}{$file->filename}{/if} </a> {/foreach} {/if} По аналогии использовать можно для постов, страниц, заказов, как отдельно так и одновременно. не забываем указывать тип объекта при выборке файликов 'type'=>'product' и тд. Скрины:- https://yadi.sk/i/z_pGbcuJm4GfhFiles.zip Изменено 7 декабря, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 7 декабря, 2015 Жалоба Поделиться Опубликовано 7 декабря, 2015 Красавчик! Цитата Ссылка на сообщение Поделиться на другие сайты
wildrock Опубликовано 9 декабря, 2015 Жалоба Поделиться Опубликовано 9 декабря, 2015 Красавельчик ) Цитата Ссылка на сообщение Поделиться на другие сайты
Eddy Опубликовано 9 декабря, 2015 Жалоба Поделиться Опубликовано 9 декабря, 2015 (изменено) удалением файлов [Thu Dec 10 01:24:00 2015] [error] [client 10.3.4.146] PHP Notice: Undefined index: id in /web/simpla/PostAdmin.php on line 55, referer: /simpla/index.php?module=PostAdmin&id=1&return=%2Fsimpla%2Findex.php%3Fmodule%3DBlogAdmin [Thu Dec 10 01:24:00 2015] [error] [client 10.3.4.146] PHP Warning: in_array() expects parameter 2 to be array, null given in /web/simpla/PostAdmin.php on line 55, referer: /simpla/index.php?module=PostAdmin&id=1&return=%2Fsimpla%2Findex.php%3Fmodule%3DBlogAdmin Изменено 9 декабря, 2015 пользователем Eddy Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 10 декабря, 2015 Автор Жалоба Поделиться Опубликовано 10 декабря, 2015 (изменено) удалением файлов [Thu Dec 10 01:24:00 2015] [error] [client 10.3.4.146] PHP Notice: Undefined index: id in /web/simpla/PostAdmin.php on line 55, referer: /simpla/index.php?module=PostAdmin&id=1&return=%2Fsimpla%2Findex.php%3Fmodule%3DBlogAdmin[Thu Dec 10 01:24:00 2015] [error] [client 10.3.4.146] PHP Warning: in_array() expects parameter 2 to be array, null given in /web/simpla/PostAdmin.php on line 55, referer: /simpla/index.php?module=PostAdmin&id=1&return=%2Fsimpla%2Findex.php%3Fmodule%3DBlogAdmin прикрепите файл PostAdmin.php в архив Изменено 10 декабря, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Eddy Опубликовано 11 декабря, 2015 Жалоба Поделиться Опубликовано 11 декабря, 2015 (изменено) simpla/ProductAdmin.php // Удаление файлов$current_files = $this->files->get_files(array('object_id'=>$product->id,'type'=>'product'));foreach($current_files as $file) if(!in_array($file->id, $files['id'])) $this->files->delete_file($file->id); ошибка в этой строке if(!in_array($file->id, $files['id'])) также simpla/PostAdmin.php Изменено 11 декабря, 2015 пользователем Eddy Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 11 декабря, 2015 Жалоба Поделиться Опубликовано 11 декабря, 2015 Длинный код из п.6, по-моему, хорошо бы оформить в виде функции, передавая 'type'=>'product' в качестве параметра.Было бы намного проще и удобнее, с учетом того, что этот код планируется вставлять в разные места... И код п.8 (кроме заголовка), удобнее бы оформить отдельным tpl-файлом... Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 11 декабря, 2015 Автор Жалоба Поделиться Опубликовано 11 декабря, 2015 simpla/ProductAdmin.php // Удаление файлов$current_files = $this->files->get_files(array('object_id'=>$product->id,'type'=>'product'));foreach($current_files as $file) if(!in_array($file->id, $files['id'])) $this->files->delete_file($file->id); ошибка в этой строке if(!in_array($file->id, $files['id'])) также simpla/PostAdmin.php тут должно быть 'type'=>'blog' а не productдальше тут вместо $product->id должно быть $post->id Цитата Ссылка на сообщение Поделиться на другие сайты
sansara0891 Опубликовано 26 января, 2016 Жалоба Поделиться Опубликовано 26 января, 2016 Здравствуйте. Скажите, а можно ли эту доработку использовать для комментариев ? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 26 января, 2016 Автор Жалоба Поделиться Опубликовано 26 января, 2016 Здравствуйте. Скажите, а можно ли эту доработку использовать для комментариев ? впринципе, да, просто надо переделать загрузку не из админки а из страници комментариев, и использовать новый тип - comments например. и к каждому айти комментария будет привязан файл/файлы. а дальше уже выбирать их выводить их на странице Цитата Ссылка на сообщение Поделиться на другие сайты
trainracing Опубликовано 25 января, 2017 Жалоба Поделиться Опубликовано 25 января, 2017 сохраняет в админке, файл закачивает, а когда переоткроешь то все пропадает. остается только файл на сервере ни к чему не привязаный. Пробовал для брендов прикрутить Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 25 января, 2017 Автор Жалоба Поделиться Опубликовано 25 января, 2017 сохраняет в админке, файл закачивает, а когда переоткроешь то все пропадает. остается только файл на сервере ни к чему не привязаный. Пробовал для брендов прикрутить вы уверены что все правильно сделали? у многих людей все работает. в базе создали таблицу? Цитата Ссылка на сообщение Поделиться на другие сайты
trainracing Опубликовано 25 января, 2017 Жалоба Поделиться Опубликовано 25 января, 2017 Да, так: DROP TABLE IF EXISTS `s_files`; CREATE TABLE `s_files` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `object_id` int(11) NOT NULL DEFAULT '0', `filename` varchar(255) NOT NULL DEFAULT '', `type` enum('brand','page') NOT NULL, `position` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 25 января, 2017 Автор Жалоба Поделиться Опубликовано 25 января, 2017 Да, так: DROP TABLE IF EXISTS `s_files`; CREATE TABLE `s_files` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `object_id` int(11) NOT NULL DEFAULT '0', `filename` varchar(255) NOT NULL DEFAULT '', `type` enum('brand','page') NOT NULL, `position` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; так посмотрите на строку `type` enum('brand','page') NOT NULL, видите тут блог? она же отличается от моей Цитата Ссылка на сообщение Поделиться на другие сайты
trainracing Опубликовано 25 января, 2017 Жалоба Поделиться Опубликовано 25 января, 2017 я как бы для брендов а не для блога, работает все, кроме сохранения файла к бренду Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 26 января, 2017 Жалоба Поделиться Опубликовано 26 января, 2017 вы уверены что все правильно сделали? у многих людей все работает. в базе создали таблицу? юзал дефолтный шаблон и мануал тоже самое все сохраняет в админке для товара, а после того как снова войти в карточку товара в админке исчизает, хот на сайте выводит у товара.. Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 26 января, 2017 Жалоба Поделиться Опубликовано 26 января, 2017 разобрался, пропустил в файле ProductsAdmin.php не добавил после // Свойства товара $options = $this->features->get_options(array('product_id'=>$product->id)); это // Прикрепленые файлы $files = $this->files->get_files(array('object_id'=>$product->id,'type'=>'product')); прикрепленые файлы перестали пропадать Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 29 октября, 2017 Жалоба Поделиться Опубликовано 29 октября, 2017 Здравствуйте. Подскажите пожалуйста, пытаюсь вывести объём файла через плагин смарти modifier.filesize.php <?php function smarty_modifier_filesize($size) { $size = max(0, (int)$size); $units = array( 'b', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb', 'Eb', 'Zb', 'Yb'); $power = $size > 0 ? floor(log($size, 1024)) : 0; return number_format($size/pow(1024, $power), 2, '.', ',') . $units[$power]; } ?> Закинул его в Smarty/lib/plugins В шаблоне {$config->cms_files_dir}{$file->filename}{$filename.size|filesize} Пишет 0.00b Кто нибудь реализовывал? Цитата Ссылка на сообщение Поделиться на другие сайты
miltonmors Опубликовано 29 октября, 2017 Жалоба Поделиться Опубликовано 29 октября, 2017 Выведите отдельно {$filename.size} и проверьте, в каком виде выводится размер и выводится ли вообще. Имейте в виду, такой плагин с гарантией не будет работать с большими размерами, так как (int)$size имеет пределы в 4G. http://expange.ru/e/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D0%B2_%D0%BC%D0%B5%D0%B3%D0%B0%D0%B1%D0%B0%D0%B9%D1%82%D0%B0%D1%85_-_PHP Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 29 октября, 2017 Жалоба Поделиться Опубликовано 29 октября, 2017 Ничего не выводит. Выведите отдельно {$filename.size} и проверьте, в каком виде выводится размер и выводится ли вообще. Имейте в виду, такой плагин с гарантией не будет работать с большими размерами, так как (int)$size имеет пределы в 4G.http://expange.ru/e/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0_%D0%B2_%D0%BC%D0%B5%D0%B3%D0%B0%D0%B1%D0%B0%D0%B9%D1%82%D0%B0%D1%85_-_PHP Цитата Ссылка на сообщение Поделиться на другие сайты
fuckmoney Опубликовано 29 октября, 2017 Жалоба Поделиться Опубликовано 29 октября, 2017 (изменено) {if $cms_files} <h2>Файлы</h2> {foreach $cms_files as $file}{$config->cms_files_dir}{$file->filename}{$filename.size|filesize}{/foreach} {/if}Могу и ошибаться, по аналогии как предложил mishanya вывести в цикле. Изменено 29 октября, 2017 пользователем sergeevizh Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 29 октября, 2017 Жалоба Поделиться Опубликовано 29 октября, 2017 {if $cms_files} <h2>Файлы</h2> {foreach $cms_files as $file}{$config->cms_files_dir}{$file->filename}{$filename.size|filesize}{/foreach} {/if}Могу и ошибаться, по аналогии как предложил mishanya вывести в цикле.0.00b Цитата Ссылка на сообщение Поделиться на другие сайты
miltonmors Опубликовано 30 октября, 2017 Жалоба Поделиться Опубликовано 30 октября, 2017 (изменено) Ничего не выводит. А что ж Вы тогда хотите? Плагин применяется к пустому значению, и показывает 0, т.е. плагин отрабатывает нормально.Выходит, у Вас ошибка еще ДО применения плагина. $filename.size - выглядит как чистая бессмыслица. Проверить плагин отдельно можно так{3544|filesize} {32987500|filesize} Пробуйте примерно так:{assign var=fn value="`$config->cms_files_dir``$file->filename`"} {filesize($fn)|filesize} Изменено 30 октября, 2017 пользователем miltonmors Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 октября, 2017 Автор Жалоба Поделиться Опубликовано 30 октября, 2017 что мешает в ф-и get_files сразу подсчитывать вес файлов через php а не через модификаторы.а еще лучше, писать размер файла при загрузке, чтобы каждый раз не дергать ф-ю Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 31 октября, 2017 Жалоба Поделиться Опубликовано 31 октября, 2017 (изменено) Подскажите а как это применить к аватарам? Хочу сделать чтобы в карточке пользователя на сайте была возможность загрузить аватар. Ну и соответственно чтобы пропускало только картинки (для безопасности). Изменено 31 октября, 2017 пользователем Julius123 Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.