Jump to content

Recommended Posts

Подскажите а как это применить к аватарам? Хочу сделать чтобы в карточке пользователя а сайте была возможность загрузить аватар. Ну и соответственно чтобы пропускало только картинки (для безопасности)

 

для аватаров как мне кажется достаточно сделать на подобии картинок для бренда. нет смысла еще отдельно таблицу заводить и тд.

скопируйте оттуда код и измените для себя

Link to post
Share on other sites
  • Replies 83
  • Created
  • Last Reply

Top Posters In This Topic

для аватаров как мне кажется достаточно сделать на подобии картинок для бренда. нет смысла еще отдельно таблицу заводить и тд.

скопируйте оттуда код и измените для себя

Начал делать. Картинка загружается но не делаются ресайзы, подскажите что упустил?

Link to post
Share on other sites

Начал делать. Картинка загружается но не делаются ресайзы, подскажите что упустил?

 

потому что для брендов и категорий нет ресайза. как впрочем и для моих файлов).

нужно доделывать если хотите там ресайз. но как мне кажется достаточно ограничить размер файла, пусть грузят что хотят

Link to post
Share on other sites

потому что для брендов и категорий нет ресайза. как впрочем и для моих файлов).

нужно доделывать если хотите там ресайз. но как мне кажется достаточно ограничить размер файла, пусть грузят что хотят

А как ограничить вес загружаемой картинки и чтобы загружали только квадратные картинки подскажите пожалуйста

Edited by Julius123
Link to post
Share on other sites

Такая проблема что не могу в карточке пользователя на сайте ни загрузить ни даже отобразить (загруженный через админку) аватар. Что нужно сделать в UserView.php? никак не могу понять( название картинки хранится в таблице s_users в поле image

Edited by Julius123
Link to post
Share on other sites

Такая проблема что не могу в карточке пользователя на сайте ни загрузить ни даже отобразить (загруженный через админку) аватар. Что нужно сделать в UserView.php? никак не могу понять( название картинки хранится в таблице s_users в поле image

 

а в базу пишет?

Link to post
Share on other sites

 

значит не загружает файл тоже. проверяйте код.

Код формы загрузки в шаблоне или какой именно код? В админке же все работает.

Edited by Julius123
Link to post
Share on other sites

Код формы загрузки в шаблоне или какой именно код? В админке же все работает.

 

там другие переменные, смотрите. в админке $user, на сайте скорее всего $this->user. код покажите

Link to post
Share on other sites

там другие переменные, смотрите. в админке $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>
 
Link to post
Share on other sites

так а код 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 by Julius123
Link to post
Share on other sites

Извиняюсь ) Вот код который редактировал я в 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,

Link to post
Share on other sites

а ф-я такая $this->image->delete_image есть?

 

Еще в этом коде встречается  $this->validate$this->lang_link.

 

Похоже на то, что приведенный код - небольшая модификация кода, заимствованного из OkayCMS.

Если так, то в этом случае надо  оттуда заимствовать и все прочее - и переменные из config.php, и функции ресайза, и работу с языками, и валидацию значений...

Link to post
Share on other sites

а ф-я такая $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,

Спасибо большое, работает. Но какой-то непонятный баг, когда загружаю новую картинку, нажимаю кнопку сохранить в профиле юзера на сайте, страница обновляется и показывается старый аватар и только если еще раз обновить страницу в ручную показывается новый аватар.

Link to post
Share on other sites

Спасибо большое, работает. Но какой-то непонятный баг, когда загружаю новую картинку, нажимаю кнопку сохранить в профиле юзера на сайте, страница обновляется и показывается старый аватар и только если еще раз обновить страницу в ручную показывается новый аватар.

 

все правильно, вам нужно ПОСЛЕ

$this->users->update_user($this->user->id, array('image'=>$filename));

выбрать пользотвателя этого, чтобы отдать на страницу новую картинку, т.к. выборка происходит ДО загрузки фото

добавить нужно ЭТО

$this->user = $this->users->get_user(intval($user_id));
Link to post
Share on other sites

 

все правильно, вам нужно ПОСЛЕ

$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));
                }
 

 

Link to post
Share on other sites

 

Добавил, получилось вот так, но все равно только после перезагрузки обновляется.

 

// Удаление аватара
                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);
Link to post
Share on other sites
  • 4 weeks later...

а как сделать, чтобы название картинки менялось если с таким именем уже есть?

 

как вариант использовать такой же метод как в картинках. добавлять _1, _2, и тд. Images.php

Link to post
Share on other sites

как вариант использовать такой же метод как в картинках. добавлять _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;
	}
Link to post
Share on other sites
  • 1 month later...

Мишань подскажи как вывести в каталоге товаров прикрепляемый файл? Если используем твою инструкцию по добавление прикрепляемого файла к товару

Link to post
Share on other sites
  • 2 months later...

баг когда к примеру у разных товаров уже есть прикрепленные файлы, и потом нажать создать новый товар то в новом товаре уже будут все добавленные файлы

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...