mishanya Posted October 31, 2017 Author Report Share Posted October 31, 2017 Подскажите а как это применить к аватарам? Хочу сделать чтобы в карточке пользователя а сайте была возможность загрузить аватар. Ну и соответственно чтобы пропускало только картинки (для безопасности) для аватаров как мне кажется достаточно сделать на подобии картинок для бренда. нет смысла еще отдельно таблицу заводить и тд.скопируйте оттуда код и измените для себя Quote Link to post Share on other sites
Julius123 Posted October 31, 2017 Report Share Posted October 31, 2017 для аватаров как мне кажется достаточно сделать на подобии картинок для бренда. нет смысла еще отдельно таблицу заводить и тд.скопируйте оттуда код и измените для себяНачал делать. Картинка загружается но не делаются ресайзы, подскажите что упустил? Quote Link to post Share on other sites
mishanya Posted October 31, 2017 Author Report Share Posted October 31, 2017 Начал делать. Картинка загружается но не делаются ресайзы, подскажите что упустил? потому что для брендов и категорий нет ресайза. как впрочем и для моих файлов).нужно доделывать если хотите там ресайз. но как мне кажется достаточно ограничить размер файла, пусть грузят что хотят Quote Link to post Share on other sites
Julius123 Posted October 31, 2017 Report Share Posted October 31, 2017 (edited) потому что для брендов и категорий нет ресайза. как впрочем и для моих файлов).нужно доделывать если хотите там ресайз. но как мне кажется достаточно ограничить размер файла, пусть грузят что хотятА как ограничить вес загружаемой картинки и чтобы загружали только квадратные картинки подскажите пожалуйста Edited October 31, 2017 by Julius123 Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 1, 2017 (edited) Такая проблема что не могу в карточке пользователя на сайте ни загрузить ни даже отобразить (загруженный через админку) аватар. Что нужно сделать в UserView.php? никак не могу понять( название картинки хранится в таблице s_users в поле image Edited November 1, 2017 by Julius123 Quote Link to post Share on other sites
mishanya Posted November 1, 2017 Author Report Share Posted November 1, 2017 Такая проблема что не могу в карточке пользователя на сайте ни загрузить ни даже отобразить (загруженный через админку) аватар. Что нужно сделать в UserView.php? никак не могу понять( название картинки хранится в таблице s_users в поле image а в базу пишет? Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 1, 2017 а в базу пишет?не пишет в базу даже с сайта Quote Link to post Share on other sites
mishanya Posted November 1, 2017 Author Report Share Posted November 1, 2017 не пишет в базу даже с сайтазначит не загружает файл тоже. проверяйте код. Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 1, 2017 (edited) значит не загружает файл тоже. проверяйте код.Код формы загрузки в шаблоне или какой именно код? В админке же все работает. Edited November 1, 2017 by Julius123 Quote Link to post Share on other sites
mishanya Posted November 1, 2017 Author Report Share Posted November 1, 2017 Код формы загрузки в шаблоне или какой именно код? В админке же все работает. там другие переменные, смотрите. в админке $user, на сайте скорее всего $this->user. код покажите Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 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> Quote Link to post Share on other sites
mishanya Posted November 1, 2017 Author Report Share Posted November 1, 2017 так а код UserView, оно само должно сохранять картинку?) Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 1, 2017 (edited) так а код 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); } Edited November 1, 2017 by Julius123 Quote Link to post Share on other sites
mishanya Posted November 1, 2017 Author Report Share Posted November 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, Quote Link to post Share on other sites
miltonmors Posted November 1, 2017 Report Share Posted November 1, 2017 а ф-я такая $this->image->delete_image есть? Еще в этом коде встречается $this->validate, $this->lang_link. Похоже на то, что приведенный код - небольшая модификация кода, заимствованного из OkayCMS.Если так, то в этом случае надо оттуда заимствовать и все прочее - и переменные из config.php, и функции ресайза, и работу с языками, и валидацию значений... Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 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,Спасибо большое, работает. Но какой-то непонятный баг, когда загружаю новую картинку, нажимаю кнопку сохранить в профиле юзера на сайте, страница обновляется и показывается старый аватар и только если еще раз обновить страницу в ручную показывается новый аватар. Quote Link to post Share on other sites
mishanya Posted November 1, 2017 Author Report Share Posted November 1, 2017 Спасибо большое, работает. Но какой-то непонятный баг, когда загружаю новую картинку, нажимаю кнопку сохранить в профиле юзера на сайте, страница обновляется и показывается старый аватар и только если еще раз обновить страницу в ручную показывается новый аватар. все правильно, вам нужно ПОСЛЕ $this->users->update_user($this->user->id, array('image'=>$filename)); выбрать пользотвателя этого, чтобы отдать на страницу новую картинку, т.к. выборка происходит ДО загрузки фотодобавить нужно ЭТО $this->user = $this->users->get_user(intval($user_id)); Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 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)); } Quote Link to post Share on other sites
mishanya Posted November 1, 2017 Author Report Share Posted November 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); Quote Link to post Share on other sites
Julius123 Posted November 1, 2017 Report Share Posted November 1, 2017 еще в после той строки $this->design->assign('user', $this->user); Теперь действительно работает все как нужно. Спасибо! Quote Link to post Share on other sites
n1c Posted November 30, 2017 Report Share Posted November 30, 2017 а как сделать, чтобы название картинки менялось если с таким именем уже есть? Quote Link to post Share on other sites
mishanya Posted November 30, 2017 Author Report Share Posted November 30, 2017 а как сделать, чтобы название картинки менялось если с таким именем уже есть? как вариант использовать такой же метод как в картинках. добавлять _1, _2, и тд. Images.php Quote Link to post Share on other sites
n1c Posted December 1, 2017 Report Share Posted December 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; } Quote Link to post Share on other sites
shooroop Posted January 20, 2018 Report Share Posted January 20, 2018 Мишань подскажи как вывести в каталоге товаров прикрепляемый файл? Если используем твою инструкцию по добавление прикрепляемого файла к товару Quote Link to post Share on other sites
shooroop Posted March 28, 2018 Report Share Posted March 28, 2018 баг когда к примеру у разных товаров уже есть прикрепленные файлы, и потом нажать создать новый товар то в новом товаре уже будут все добавленные файлы 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.