zyablik
Новичок
о том как хранить картинки...
преамбула:
возможно гдето буду неточен в формулировках и терминологии (особенно что касается объект\не объект вчасности и ооп вообще)
вопрос: как хранить картинки(ссылки на картинки) в своей цмс
вводная информация:
есть своя развивающаяся цмс.
архитектура цмс:
1.базовая таблица
для хранения ссылок на объекты и неких общих характеристик, таких как,
- ид
- название
- путь от корня сайта
- скрипт отображения
- тип объекта
- папка (тру\фолс)
- статус (отображать тру.фолс)
2. таблица имен объектов items
- имя
- дефолтный скрипт отображения
- дефолтное значение папка(тру\фолс)
3. таблица параметров объектов
- имя объекта
- имя поля
- тип поля
это основа цмски
после инсталяции системы имеем 3 таблицы и скрипты цмски
идеология работы на примере новостей
создаем объект новость
при создании объекта у разработчика спрашиваются такие вещи как
- имя объекта
- скрипт отображения
- папка?
пример (obj=news, title= Новость, script=news,isFolder=false)
в системе создается таблица news имеющая дефотные поля
id-autoincrement
parent
order
ElementName
path
в таблицу items добавляется запись
item=news,name=Новость,script=news,isfolder=false
далее разработчик у объекта новость добавляет параметры
- анонс
- полный текст
- картинка
итп
при добавлении параметра объекта
в таблицу параметров добавляется значение и изменяется таблица новости добавлением поля
тоесть в таблице параметров хранится список дополнительных полей для каждой таблицы новых обхектов
далее администратор сайта
добавляет новость.
заполняет поля, сабмитит, новость появляется
при сабмите
в главную таблицу добавляется новая запись
- генерится ид
- геренится путь до новости
- название новости (дублирующее поле)
- order дефолтный
- скрипт берется из таблицы объектов
в таблицу новостей добавляется вся инфа о новости
анонс
полный текст
путь до картинки
в шаблоне отображения новостей делаю запрос по двум таблицам
из главной и таблицы новостей
в итоге получаю всю информацию об объекте
пример запроса
SELECT * FROM news,main WHERE news.ElementID = main.ElementID AND main.isNode = '0' AND main.is_virtual = '2' ORDER BY main.ElementOrder ASC, main.ElementID ASC
Вопрос:
иногда возникает необходимость получать(отображать на сайте) дополнительную информацию о картинках (файлах)
например, знать размер закаченой картинки (высота, ширина), кол-во байт
при текущей реализации, в шаблоне отображения новостей для каждой картинки новости беру getimagesize()
и прописываю высоту и ширину
не нравится что при каждом отображении новости идет обращие к диску и вычисление размеров изобажения
видимые варианты решения:
хранить доп инфу о картинке либо
- в поле где хранится ссылка на картинку на диске
- создать вспомогательную таблицу, с произвольным набором полей для хранения любых параметров картинок
минусы решений
1. в админке писать обработчик который в одно поле будет запихивать всю инфу и в шаблонах для отображения вместо
<img src=$news['pic']>
придется писать обработчик который будет доставать нужное значение
2. дополнительный запрос к базе для отображения каждой картинки.
что думаете?
преамбула:
возможно гдето буду неточен в формулировках и терминологии (особенно что касается объект\не объект вчасности и ооп вообще)
вопрос: как хранить картинки(ссылки на картинки) в своей цмс
вводная информация:
есть своя развивающаяся цмс.
архитектура цмс:
1.базовая таблица
для хранения ссылок на объекты и неких общих характеристик, таких как,
- ид
- название
- путь от корня сайта
- скрипт отображения
- тип объекта
- папка (тру\фолс)
- статус (отображать тру.фолс)
2. таблица имен объектов items
- имя
- дефолтный скрипт отображения
- дефолтное значение папка(тру\фолс)
3. таблица параметров объектов
- имя объекта
- имя поля
- тип поля
это основа цмски
после инсталяции системы имеем 3 таблицы и скрипты цмски
идеология работы на примере новостей
создаем объект новость
при создании объекта у разработчика спрашиваются такие вещи как
- имя объекта
- скрипт отображения
- папка?
пример (obj=news, title= Новость, script=news,isFolder=false)
в системе создается таблица news имеющая дефотные поля
id-autoincrement
parent
order
ElementName
path
в таблицу items добавляется запись
item=news,name=Новость,script=news,isfolder=false
далее разработчик у объекта новость добавляет параметры
- анонс
- полный текст
- картинка
итп
при добавлении параметра объекта
в таблицу параметров добавляется значение и изменяется таблица новости добавлением поля
тоесть в таблице параметров хранится список дополнительных полей для каждой таблицы новых обхектов
далее администратор сайта
добавляет новость.
заполняет поля, сабмитит, новость появляется
при сабмите
в главную таблицу добавляется новая запись
- генерится ид
- геренится путь до новости
- название новости (дублирующее поле)
- order дефолтный
- скрипт берется из таблицы объектов
в таблицу новостей добавляется вся инфа о новости
анонс
полный текст
путь до картинки
в шаблоне отображения новостей делаю запрос по двум таблицам
из главной и таблицы новостей
в итоге получаю всю информацию об объекте
пример запроса
SELECT * FROM news,main WHERE news.ElementID = main.ElementID AND main.isNode = '0' AND main.is_virtual = '2' ORDER BY main.ElementOrder ASC, main.ElementID ASC
Вопрос:
иногда возникает необходимость получать(отображать на сайте) дополнительную информацию о картинках (файлах)
например, знать размер закаченой картинки (высота, ширина), кол-во байт
при текущей реализации, в шаблоне отображения новостей для каждой картинки новости беру getimagesize()
и прописываю высоту и ширину
не нравится что при каждом отображении новости идет обращие к диску и вычисление размеров изобажения
видимые варианты решения:
хранить доп инфу о картинке либо
- в поле где хранится ссылка на картинку на диске
- создать вспомогательную таблицу, с произвольным набором полей для хранения любых параметров картинок
минусы решений
1. в админке писать обработчик который в одно поле будет запихивать всю инфу и в шаблонах для отображения вместо
<img src=$news['pic']>
придется писать обработчик который будет доставать нужное значение
2. дополнительный запрос к базе для отображения каждой картинки.
что думаете?