Yii: работа с множественной загрузкой фото

  • 04, 14, 2013
  •  
  •  php
  • Комментарии к записи Yii: работа с множественной загрузкой фото отключены

Для генерации превьюшек разных размеров понадобится http://www.yiiframework.com/extension/image/ (В описании установки есть ошибка: CArray.php нужно скопировать в корень protected/components проекта).

Постановка

Задача такая:
Есть разные объекты разных классов (для примера, квартиры и многоквартирные дома), каждый из них может иметь неограниченное количество фотографий.
Все фотографии представляются объектом Photo, а принадлежность к разным типам объектов зависит от атрибута ref_type.
Нужно иметь превью фотографий разных размеров (генерировать при сохранении фото).
Достаточно сделать загрузку файлов только в формате jpg (поэтому расширение зашито жёстко).

SQL

Вот SQL-код моделей (SQLite; часть полей опущена):

Код моделей, контроллеров и отображений генерировался с помощью Gii, так что начальный код приводить смысла нет.

Модели

Photo

В контроллере нужно будет для каждой фотографии вызвать метод save(), который сохранит на диск файл и все превью.

Flat

Контроллеры

FlatController

Пока тут нет обработки ошибок, только размечены места, где она будет.
Всё, что нужно — это вызвать метод savePhotos().

view

/views/flat/_form.php

Не надо забывать про multipart/form-data у формы.
Отображение фотографий на странице просмотра оставим на факультатив:)

Вот собственно и всё.
На всякий случай можно добавить в конфиг image:

/config/main.php

Полезные ссылки:
http://sudwebdesign.com/yii-uploading-and-saving-images/541
http://www.yiiframework.com/wiki/176/uploading-multiple-images-with-cmultifileupload/
http://www.yiiframework.com/forum/index.php/topic/6392-fancyupload/page__view__findpost__p__91605
http://stackoverflow.com/questions/10891294/condition-while-making-relation-in-yii/16000313#16000313 и http://www.yiiframework.com/forum/index.php/topic/10185-using-relations-and-conditions/ — про правильную запись отношений между моделями.

Similar Posts

    None Found

Comments are closed.