Обработка нескольких изображений с ColdFusion и MySQL - PullRequest
1 голос
/ 19 февраля 2010

Это вопрос архитектуры, но его решение заключается в структуре ColdFusion и MySQL - или, по крайней мере, я так считаю.

В моей базе данных есть таблица товаров, и у каждого товара может быть любое количество снимков экрана. Мой текущий метод отображения скриншотов продукта следующий:

У меня есть одна папка, в которой содержатся все снимки экрана, связанные со всеми продуктами. Все скриншоты названы точно так же, как их productID в базе данных, плюс префикс.

Например: снимки экрана продукта, для которого productID равен 15, находятся в папке images с именем 15_screen1.jpg, 15_screen2.jpg и т. Д ...

На моей странице ColdFusion я жестко закодировал путь к изображению в HTML (images /); название изображения разбито на две части; первая часть генерируется динамически с использованием productID из запроса; и часть вторая является префиксом и жестко закодирована. Например:

<img src"/images/#QueryName.productID#_screen1.jpg">
<img src"/images/#QueryName.productID#_screen2.jpg"> etc...

Этот метод работает, но имеет несколько ограничений, самый большой из которых приведен ниже:

  1. Мне нужно жестко закодировать точное количество снимков экрана в моем HTML-шаблоне. Это означает, что количество отображаемых снимков экрана всегда будет одинаковым. Это не работает, если у одного продукта есть 10 снимков экрана, а у другого - 5.
  2. Мне нужно жестко закодировать префиксы изображений в моем HTML. Например, у меня может быть до пяти типов снимков экрана, связанных с одним продуктом: productID = 15 может иметь 15_screen1.jpg, 15_screen2.jpg и 15_FrontCover.jpg, 15_BackCover.jpg и 15_Backthumb.jpg и т. Д.

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

Есть ли у кого-нибудь какие-либо предложения или идеи относительно правильного метода решения этой проблемы?

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 19 февраля 2010

Как насчет ...

использовать таблицу изображений, один продукт на множество изображений (с необязательным столбцом sortOrder?) И использовать imageID в качестве имени файла jpeg?

обновление:

Есть таблица ImageClass, множество изображений для одного ImageClass.

Image
-----
ID
productID
imageClassID (FK to ImageClass)

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

Или ... , если вы действительно хотите применить некоторые классыможет только одно изображение, а затем может пойти на более сложный дизайн:

Product
------
ID
name
...
frontCoverImageID
backCoverImageID
frontThumbImageID
backThumbImageID

Image
-----
ID
productID
isScreenShot (bit)    // optional, but easier to query later...

Однако первое мне больше нравится, так как вы можете иметь столько классов, сколько считаете нужным позже, без рефакторинга БД.

1 голос
/ 20 февраля 2010

используйте теги cfdirectory для проверки файловой системы:

<!--- get a query resultset of images in filesystem --->
<cfdirectory action="list" name="images" directory="images">

<!--- get images for specific product --->
<cfquery name="productImages" dbtype="query">
select *
from images
where name like '#productid#%'
</cfquery>

<cfoutput query="productImages">
    <img src="#productimages.directory#/#productimages.name#" />
</cfoutput>

Вы можете даже попробовать использовать атрибут filter для cfdirectory, чтобы попытаться опустить QoQ

1 голос
/ 19 февраля 2010

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

За исключением того, что если вы хотите использовать соглашения об именах для связи изображений с продуктами, а количество изображений является произвольным, то, вероятно, лучше создать одну папку для продукта:

/images/products/{SKU1}/frontview.jpg
/images/products/{SKU1}/sideview.jpg
/images/products/{SKU2}/frontview.jpg

и пр.Затем используйте <cfdirectory>, чтобы собрать изображения для данного продукта.Вы можете также назвать ваши изображения 00_frontview.jpg, 01_sideview.jpg и т. Д., Чтобы вы могли сортировать и контролировать порядок их отображения на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...