Загрузка изображений най сайт

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
Аватара пользователя
matios
Сообщения: 76
Зарегистрирован: 2013.03.17, 20:44
Откуда: Россия, Лиски

Загрузка изображений най сайт

Сообщение matios »

Приветствую всех. Хотел бы поделиться своим рецептом загрузки изображений на сайт. Использовать можно, например, для загрузки аватара или обложки книги. Оформил данный компонент в стиле ImageHandler от Yaroslav Pelesh aka Tokolist.

Итак, что может компонент?
1. Загружает изображение в указанную папку.
2. При обновлении изображения удаляет старое. (Например загружаем новый аватар, а старый удаляем)
3. Если нам пытаются подсунуть текстовый файл с расширением графического файла, то такой файл сразу удаляется.
4. Может изменять размер исходного изображения и создавать превью (Помогает в этом ImageHandler)

Как использовать?

1. Для начала в конфиге прописываем:

Код: Выделить всё

'import'=>array(
    ...
    'application.components.ImageLoader.CImageLoader',
),

.....

'components'=>array(

    ....

    'il'=>array(
       'class'=>'CImageLoader',
    ),
),
2. В требуемой модели пишем (на примере загрузки аватара):

Код: Выделить всё

    public $image;  //Атрибут для хранения изображения

    ...
    
public function rules()
{
        return array(
            ...
            array('avatar, image', 'file', 'types' => 'jpg,jpeg,gif,png', 'allowEmpty' => true, 'safe' => false),
            array('avatar, image', 'file', 'maxSize' => 1024 * 200, 'allowEmpty' => true, 'safe' => false, 'tooLarge' => 'Размер файла {file} слишком велик'),
            ....
       );
}


public function beforeSave()
{
        $il = new CImageLoader();
        $il->model = self::findByPk($this->id);
        $il->attribute_temp = 'image';
        $il->attribute_bd = 'avatar';
        $il->path = '/upload/users/';
        $il->thumbs = true;
        $this->avatar = $il->Upload()->avatar;

        return parent::beforeSave();
}
3. В представлении вашей формы должно быть прописано
'enctype'=>'multipart/form-data'

Поле для выбора файла:

Код: Выделить всё

<?php echo $form->fileField($userProfile, 'image'); ?>

Входные параметры

Код: Выделить всё

    public $model //Ваша модель
    public $attribute_temp //Атрибут для хранения загруженной картинки. В нашем случае "image"
    public $attribute_bd; //Атрибут для хранения названия картинки в БД
    public $path = '/upload/users/'; //Путь загрузки фото
    public $size_origin = array(200, 200); //Размеры основного изображения (если нужно обрезать по размерам)
    public $thumbs = false; // Если нужны превью, то заменить на true
    public $size_thumbs = array(
        array(32, 32),
        array(50, 50),
        array(100, 100),
    ); //массив с размерами превью     

Прочие пояснения

Для работы резайзов подключите CImageHandler viewtopic.php?f=9&t=882
Структура папок для аватора в моем случае:
/upload/users/
/upload/users/thumbs_32/
/upload/users/thumbs_50/
/upload/users/thumbs_100/

Добавил компонент на Битбакет: https://bitbucket.org/matios/imageloader

Хотелось бы услышать ваше мнение о реализации и полезности данного компонента. Сам то я не так давно начал заниматься Yii да и вообще программированием, поэтому если можно будет как-либо упростить или улучшить код, то рад был бы услышать.
Вложения
ImageLoader.rar
(1.15 КБ) 596 скачиваний
Последний раз редактировалось matios 2014.05.13, 01:59, всего редактировалось 2 раза.
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Загрузка изображений най сайт

Сообщение lancedevnull »

гитхаб надо
Аватара пользователя
matios
Сообщения: 76
Зарегистрирован: 2013.03.17, 20:44
Откуда: Россия, Лиски

Re: Загрузка изображений най сайт

Сообщение matios »

Понимаю, но все никак не найду время разобраться с его использованием) На Битбакет залил)
gold_zloy
Сообщения: 1
Зарегистрирован: 2019.07.14, 14:26

Re: Загрузка изображений най сайт

Сообщение gold_zloy »

Не понимаю куда прописать из 3 пункта и Входные параметры, подскажите пожалуйста.
Ответить