1

これはアーキテクチャの質問ですが、その解決策はColdFusionとMySQLの構造にあります。少なくとも私はそう信じています。

データベースに製品テーブルがあり、各製品には任意の数のスクリーンショットを含めることができます。製品のスクリーンショットを表示する現在の方法は次のとおりです。

すべての製品に関連するすべてのスクリーンショットが含まれている単一のフォルダーがあります。すべてのスクリーンショットには、データベース内のproductIDとまったく同じ名前に、プレフィックスを付けた名前が付けられています。

例:productIDが15の製品のスクリーンショットは、15_screen1.jpg、15_screen2.jpgなどの名前のフォルダーimagesにあります。

私のColdFusionページでは、画像パスをHTML(images /)にハードコーディングしました。画像名は2つの部分に分かれています。パート1は、クエリのproductIDを使用して動的に生成されます。パート2はプレフィックスであり、ハードコーディングされています。例えば:

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

この方法は機能しますが、以下にリストされている最大の制限がいくつかあります。

  1. HTMLテンプレートにスクリーンショットの正確な数をハードコーディングする必要があります。つまり、表示できるスクリーンショットの数は常に同じになります。これは、1つの製品に10個のスクリーンショットがあり、別の製品に5個のスクリーンショットがある場合は機能しません。
  2. 画像のプレフィックスをHTMLにハードコーディングする必要があります。たとえば、1つの製品に最大5種類のスクリーンショットを関連付けることができます。productID= 15には15_screen1.jpg、15_screen2.jpg、15_FrontCover.jpg、15_BackCover.jpg、15_Backthumb.jpgなどがあります。

製品テーブルにパス列を作成することを考えましたが、それは製品ごとに数百のフォルダーを作成することを意味し、これも効率的ではないようです。

この問題に取り組むための正しい方法について誰かが提案やアイデアを持っていますか?

どうもありがとう!

4

3 に答える 3

2

どうですか...

画像テーブル、1つの製品から多くの画像(オプションのsortOrder列?)を使用し、画像IDをjpegファイル名として使用しますか?

アップデート:

ImageClassテーブルがあり、1つのImageClassに多くの画像があります。

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

バックエンドのビジネスロジックを使用して、一部のクラスが1つのイメージのみを持つことができるようにします。

または...本当に一部のクラスを強制したい場合は、1つの画像しか使用できない場合は、より複雑な設計を行うことができます。

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

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

ただし、DBをリファクタリングしなくても、後で適切と思われるクラスをいくつでも持つことができるので、最初のクラスの方が好きです。

于 2010-02-19T19:51:21.167 に答える
1

データベース内の画像の数と種類に関する情報を保持することは、間違いなく進むべき道です。

それを除けば、命名規則を使用して画像を製品に関連付ける場合、画像の数が任意である場合は、製品ごとに1つのフォルダーを作成することをお勧めします。

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

などなど。次に、を使用<cfdirectory>して特定の製品の画像を収集します。00_frontview.jpgまた、画像などに名前を付けて01_sideview.jpg、ページに表示される順序を並べ替えて制御できるようにすることもできます。

于 2010-02-19T20:31:01.923 に答える
1

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>

filtercfdirectoryの属性を使用して、QoQを省略してみることもできます。

于 2010-02-19T23:19:08.250 に答える