есть модель File (id, original_name, size, height, width, type[image/*])
Есть модель новости, модель пользователя. у них есть привязка BELONGS_TO к модели File.
Абстрактный код:
Код: Выделить всё
News::model()->find(...)->image
User::model()->find(...)->avatar
У модели File есть так же магический метод getPreview($pattern);
Код: Выделить всё
News::model()->find(...)->image->getPreview('news.small')
User::model()->find(...)->avatar->getPreview('user.blog.avatar.small')
Код: Выделить всё
"params"=>array(
'Imagine'=>array(
'templates'=>array(
'user.small.extra'=>array(
'width'=>30,
'height'=>30,
'quality'=>100
),
'user.small.blog'=>array(
'width'=>75,
'height'=>75,
'quality'=>100
),
'user.small'=>array(
'width'=>175,
'height'=>175,
'quality'=>100
),
'blog.small'=>array(
'width'=>175,
'height'=>175,
'quality'=>100
),
'blog.medium'=>array(
'width'=>320,
'height'=>240,
'quality'=>100
),
)
),
)
Вобщем вот модель
http://pastebin.com/KbmxM8Q4
на кривость кода не особо обращайте внимания. она далека от завершения. пока я занят другим функционалом. но к концу месяца дойдут руки прривести порядок и здесь
подскажите, со своей точки зрения. чем мой подход плох?
// todo
1. в upload принудительно добавлю регенерацию изображения, дабы лишить возможности встроить код в картинки.
2. модель FILE служит не только для изображений. это единый мост между файлами и записями CMS
3. в модель принудительно так же для каждого размера будет генерироваться картинка копия с ватермаркс, nginx будет для внешних сайтов (типа гуглокартинок и т.п.) подставлять ссылку на сайт
4
5
6
...