mishanya Опубликовано 31 октября, 2017 Автор Жалоба Поделиться Опубликовано 31 октября, 2017 Подскажите а как это применить к аватарам? Хочу сделать чтобы в карточке пользователя а сайте была возможность загрузить аватар. Ну и соответственно чтобы пропускало только картинки (для безопасности) для аватаров как мне кажется достаточно сделать на подобии картинок для бренда. нет смысла еще отдельно таблицу заводить и тд.скопируйте оттуда код и измените для себя Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 31 октября, 2017 Жалоба Поделиться Опубликовано 31 октября, 2017 для аватаров как мне кажется достаточно сделать на подобии картинок для бренда. нет смысла еще отдельно таблицу заводить и тд.скопируйте оттуда код и измените для себяНачал делать. Картинка загружается но не делаются ресайзы, подскажите что упустил? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 31 октября, 2017 Автор Жалоба Поделиться Опубликовано 31 октября, 2017 Начал делать. Картинка загружается но не делаются ресайзы, подскажите что упустил? потому что для брендов и категорий нет ресайза. как впрочем и для моих файлов).нужно доделывать если хотите там ресайз. но как мне кажется достаточно ограничить размер файла, пусть грузят что хотят Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 31 октября, 2017 Жалоба Поделиться Опубликовано 31 октября, 2017 (изменено) потому что для брендов и категорий нет ресайза. как впрочем и для моих файлов).нужно доделывать если хотите там ресайз. но как мне кажется достаточно ограничить размер файла, пусть грузят что хотятА как ограничить вес загружаемой картинки и чтобы загружали только квадратные картинки подскажите пожалуйста Изменено 31 октября, 2017 пользователем Julius123 Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 (изменено) Такая проблема что не могу в карточке пользователя на сайте ни загрузить ни даже отобразить (загруженный через админку) аватар. Что нужно сделать в UserView.php? никак не могу понять( название картинки хранится в таблице s_users в поле image Изменено 1 ноября, 2017 пользователем Julius123 Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 ноября, 2017 Автор Жалоба Поделиться Опубликовано 1 ноября, 2017 Такая проблема что не могу в карточке пользователя на сайте ни загрузить ни даже отобразить (загруженный через админку) аватар. Что нужно сделать в UserView.php? никак не могу понять( название картинки хранится в таблице s_users в поле image а в базу пишет? Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 а в базу пишет?не пишет в базу даже с сайта Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 ноября, 2017 Автор Жалоба Поделиться Опубликовано 1 ноября, 2017 не пишет в базу даже с сайтазначит не загружает файл тоже. проверяйте код. Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 (изменено) значит не загружает файл тоже. проверяйте код.Код формы загрузки в шаблоне или какой именно код? В админке же все работает. Изменено 1 ноября, 2017 пользователем Julius123 Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 ноября, 2017 Автор Жалоба Поделиться Опубликовано 1 ноября, 2017 Код формы загрузки в шаблоне или какой именно код? В админке же все работает. там другие переменные, смотрите. в админке $user, на сайте скорее всего $this->user. код покажите Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 там другие переменные, смотрите. в админке $user, на сайте скорее всего $this->user. код покажите <div class="avatar" style="background: url({if $user->image}{$user->image|resize:120:120:false:$config->resized_users_dir}{else}http://omvel.com/frontend/web/images/avatars/default.png{/if}) no-repeat center"> <div><input type="file" id="file" name="image" accept="image/*" /></div> </div> <div class="output" id="output"></div> <style> .avatar{ height: 120px; width: 120px; border: 3px solid #CECECE; } .avatar div{ opacity:0; height:100%; width:100%; background:url(http://www.omvel.com/images/avatars/refresh.png) center; transition: 0.4s; } .avatar input[type=file] { cursor: pointer; height:100%; width:100%; opacity:0; } .avatar div:hover { opacity:0.5; transition: 0.6s; } .output { height: 120px !important; width: 120px !important; border: 3px solid #CECECE; margin-top:-120px !important; margin-left:-1px !important; z-index:9999; position:inherit; } </style> </div> </div> <script> function handleFileSelectSingle(evt) { var file = evt.target.files; // FileList object var f = file[0] // Only process image files. if (!f.type.match('image.*')) { alert("Только изображения...."); } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. var span = document.createElement('span'); span.innerHTML = ['<img class="img-thumbnail" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join(''); document.getElementById('output').innerHTML = ""; document.getElementById('output').insertBefore(span, null); }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } document.getElementById('file').addEventListener('change', handleFileSelectSingle, false); function handleFileSelectMulti(evt) { var files = evt.target.files; // FileList object document.getElementById('outputMulti').innerHTML = ""; for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { alert("Только изображения...."); } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. var span = document.createElement('span'); span.innerHTML = ['<img class="img-thumbnail" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join(''); document.getElementById('outputMulti').insertBefore(span, null); }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('fileMulti').addEventListener('change', handleFileSelectMulti, false); </script> Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 ноября, 2017 Автор Жалоба Поделиться Опубликовано 1 ноября, 2017 так а код UserView, оно само должно сохранять картинку?) Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 (изменено) так а код UserView, оно само должно сохранять картинку?)Извиняюсь ) Вот код который редактировал я в UserView.php /*Отображение личного кабинета пользователя*/ public function fetch() { if(empty($this->user)) { header('Location: '.$this->config->root_url.'/'.$this->lang_link.'user/login'); exit(); } /*Обновление данных клиеньа*/ if($this->request->method('post') && $this->request->post('user_save')) { $user = new stdClass(); $user->name = $this->request->post('name'); $user->email = $this->request->post('email'); $user->phone = $this->request->post('phone'); $user->address = $this->request->post('address'); $password = $this->request->post('password'); $this->design->assign('name', $user->name); $this->design->assign('email', $user->email); $this->design->assign('phone', $user->phone); $this->design->assign('address', $user->address); $this->db->query('SELECT count(*) as count FROM __users WHERE email=? AND id!=?', $user->email, $this->user->id); $user_exists = $this->db->result('count'); /*Валидация данных*/ if($user_exists) { $this->design->assign('error', 'user_exists'); } elseif(!$this->validate->is_name($user->name, true)) { $this->design->assign('error', 'empty_name'); } elseif(!$this->validate->is_email($user->email, true)) { $this->design->assign('error', 'empty_email'); } elseif(!$this->validate->is_phone($user->phone)) { $this->design->assign('error', 'empty_phone'); } elseif(!$this->validate->is_address($user->address)) { $this->design->assign('error', 'empty_address'); } elseif($user_id = $this->users->update_user($this->user->id, $user)) { $this->user = $this->users->get_user(intval($user_id)); $this->design->assign('user', $this->user); } else { $this->design->assign('error', 'unknown error'); } // Удаление аватара if ($this->request->post('delete_image')) { $this->image->delete_image($user->id, 'image', 'users', $this->config->original_users_dir, $this->config->resized_users_dir); } // Загрузка аватара $image = $this->request->files('image'); if (!empty($image['name']) && ($filename = $this->image->upload_image($image['tmp_name'], $image['name'], $this->config->original_users_dir))) { $this->image->delete_image($user->id, 'image', 'users', $this->config->original_users_dir, $this->config->resized_users_dir); $this->users->update_user($user->id, array('image'=>$filename)); } if(!empty($password)) { $this->users->update_user($this->user->id, array('password'=>$password)); } } else { // Передаем в шаблон $this->design->assign('name', $this->user->name); $this->design->assign('email', $this->user->email); $this->design->assign('phone', $this->user->phone); $this->design->assign('address', $this->user->address); } Изменено 1 ноября, 2017 пользователем Julius123 Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 ноября, 2017 Автор Жалоба Поделиться Опубликовано 1 ноября, 2017 Извиняюсь ) Вот код который редактировал я в UserView.php а ф-я такая $this->image->delete_image есть? как и говорил должно быть не$this->users->update_user($user->id,а$this->users->update_user($this->user->id, и тут тоже самое не$this->image->delete_image($user->id,а $this->image->delete_image($this->user->id, Цитата Ссылка на сообщение Поделиться на другие сайты
miltonmors Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 а ф-я такая $this->image->delete_image есть? Еще в этом коде встречается $this->validate, $this->lang_link. Похоже на то, что приведенный код - небольшая модификация кода, заимствованного из OkayCMS.Если так, то в этом случае надо оттуда заимствовать и все прочее - и переменные из config.php, и функции ресайза, и работу с языками, и валидацию значений... Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 а ф-я такая $this->image->delete_image есть? как и говорил должно быть не$this->users->update_user($user->id,а$this->users->update_user($this->user->id, и тут тоже самое не$this->image->delete_image($user->id,а $this->image->delete_image($this->user->id,Спасибо большое, работает. Но какой-то непонятный баг, когда загружаю новую картинку, нажимаю кнопку сохранить в профиле юзера на сайте, страница обновляется и показывается старый аватар и только если еще раз обновить страницу в ручную показывается новый аватар. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 ноября, 2017 Автор Жалоба Поделиться Опубликовано 1 ноября, 2017 Спасибо большое, работает. Но какой-то непонятный баг, когда загружаю новую картинку, нажимаю кнопку сохранить в профиле юзера на сайте, страница обновляется и показывается старый аватар и только если еще раз обновить страницу в ручную показывается новый аватар. все правильно, вам нужно ПОСЛЕ $this->users->update_user($this->user->id, array('image'=>$filename)); выбрать пользотвателя этого, чтобы отдать на страницу новую картинку, т.к. выборка происходит ДО загрузки фотодобавить нужно ЭТО $this->user = $this->users->get_user(intval($user_id)); Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 все правильно, вам нужно ПОСЛЕ $this->users->update_user($this->user->id, array('image'=>$filename)); выбрать пользотвателя этого, чтобы отдать на страницу новую картинку, т.к. выборка происходит ДО загрузки фотодобавить нужно ЭТО $this->user = $this->users->get_user(intval($user_id)); Добавил, получилось вот так, но все равно только после перезагрузки обновляется. // Удаление аватара if ($this->request->post('delete_image')) { $this->image->delete_image($this->user->id, 'image', 'users', $this->config->original_users_dir, $this->config->resized_users_dir); } // Загрузка аватара $image = $this->request->files('image'); if (!empty($image['name']) && ($filename = $this->image->upload_image($image['tmp_name'], $image['name'], $this->config->original_users_dir))) { $this->image->delete_image($this->user->id, 'image', 'users', $this->config->original_users_dir, $this->config->resized_users_dir); $this->users->update_user($this->user->id, array('image'=>$filename)); $this->user = $this->users->get_user(intval($user_id)); } Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 ноября, 2017 Автор Жалоба Поделиться Опубликовано 1 ноября, 2017 Добавил, получилось вот так, но все равно только после перезагрузки обновляется. // Удаление аватара if ($this->request->post('delete_image')) { $this->image->delete_image($this->user->id, 'image', 'users', $this->config->original_users_dir, $this->config->resized_users_dir); } // Загрузка аватара $image = $this->request->files('image'); if (!empty($image['name']) && ($filename = $this->image->upload_image($image['tmp_name'], $image['name'], $this->config->original_users_dir))) { $this->image->delete_image($this->user->id, 'image', 'users', $this->config->original_users_dir, $this->config->resized_users_dir); $this->users->update_user($this->user->id, array('image'=>$filename)); $this->user = $this->users->get_user(intval($user_id)); } еще в после той строки $this->design->assign('user', $this->user); Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 1 ноября, 2017 Жалоба Поделиться Опубликовано 1 ноября, 2017 еще в после той строки $this->design->assign('user', $this->user); Теперь действительно работает все как нужно. Спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 30 ноября, 2017 Жалоба Поделиться Опубликовано 30 ноября, 2017 а как сделать, чтобы название картинки менялось если с таким именем уже есть? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 30 ноября, 2017 Автор Жалоба Поделиться Опубликовано 30 ноября, 2017 а как сделать, чтобы название картинки менялось если с таким именем уже есть? как вариант использовать такой же метод как в картинках. добавлять _1, _2, и тд. Images.php Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 1 декабря, 2017 Жалоба Поделиться Опубликовано 1 декабря, 2017 как вариант использовать такой же метод как в картинках. добавлять _1, _2, и тд. Images.php править нужно тут api/Image.php ? public function upload_image($filename, $name) { // Имя оригинального файла $name = $this->correct_filename($name); $uploaded_file = $new_name = pathinfo($name, PATHINFO_BASENAME); $base = pathinfo($uploaded_file, PATHINFO_FILENAME); $ext = pathinfo($uploaded_file, PATHINFO_EXTENSION); if(in_array(strtolower($ext), $this->allowed_extentions)) { while(file_exists($this->config->root_dir.$this->config->original_images_dir.$new_name)) { $new_base = pathinfo($new_name, PATHINFO_FILENAME); if(preg_match('/_([0-9]+)$/', $new_base, $parts)) $new_name = $base.'_'.($parts[1]+1).'.'.$ext; else $new_name = $base.'_1.'.$ext; } if(move_uploaded_file($filename, $this->config->root_dir.$this->config->original_images_dir.$new_name)) return $new_name; } return false; } Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 20 января, 2018 Жалоба Поделиться Опубликовано 20 января, 2018 Мишань подскажи как вывести в каталоге товаров прикрепляемый файл? Если используем твою инструкцию по добавление прикрепляемого файла к товару Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 28 марта, 2018 Жалоба Поделиться Опубликовано 28 марта, 2018 баг когда к примеру у разных товаров уже есть прикрепленные файлы, и потом нажать создать новый товар то в новом товаре уже будут все добавленные файлы Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.