Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 84
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

 

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

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

Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

там другие переменные, смотрите. в админке $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>
 
Ссылка на сообщение
Поделиться на другие сайты

так а код 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);
        }
Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Если так, то в этом случае надо  оттуда заимствовать и все прочее - и переменные из config.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,

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

$this->user = $this->users->get_user(intval($user_id));
Ссылка на сообщение
Поделиться на другие сайты

 

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

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

 

Ссылка на сообщение
Поделиться на другие сайты

 

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

 

// Удаление аватара
                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);
Ссылка на сообщение
Поделиться на другие сайты

 

еще в после той строки

 

$this->design->assign('user', $this->user);

Теперь действительно работает все как нужно. Спасибо!

Ссылка на сообщение
Поделиться на другие сайты
  • 4 недели спустя...

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

как вариант использовать такой же метод как в картинках. добавлять _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;
	}
Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...