画像が欠落している製品とタイトルを共有する製品をループすることにより、製品の代替バージョン(これらは本であるため、同じ「タイトル」を持つすべての製品が機能します)から画像を検索する関数を作成しようとしています。 。
最初にクエリを実行して、ページに表示される製品を取得します(この部分は正常に機能することがわかっているので、関係ありません)。画像を表示するときは、まず選択した商品に画像があるかどうかを確認します。
利用可能な画像がない場合は、同じ「タイトル」または「フルタイトル」の商品に対して2番目のクエリを実行し、利用可能な画像があるかどうかを確認します。(コードでわかるように、これは#SKU#.jpgになります)代替バージョンの1つで画像が見つかった場合は、それを変数に保存し、ループが終了したら、選択した画像を表示します。
それでも商品画像が見つからない場合は、代わりにデフォルトの「画像が利用できません」画像が表示されます。
<cfquery name="GetProductBasicInfo" datasource="#Request.Application.DataApp.datasource#" dbtype="odbc">
SELECT product.Title, product.FullTitle, product.SKU, product.series, product.pubdate, productmarket.binding, product.productid, productmarket.productid
FROM Product, productmarket
WHERE product.productid = productmarket.productid
AND productmarket.Binding LIKE '#FORM.formFormat#'
AND product.series NOT IN ('Young Adult','childrens')
AND product.PubDate
BETWEEN '<cfoutput>#DatePart("m", FORM.formDate)#</cfoutput>/01/<cfoutput>#DatePart("yyyy", FORM.formDate)#</cfoutput>'
AND '<cfoutput>#DatePart("m", FORM.formDate)#</cfoutput>/28/<cfoutput>#DatePart("yyyy", FORM.formDate)#</cfoutput>'
</cfquery>
<cfoutput query="GetProductBasicInfo">
<!-- set of CFIF statements that determine if the current product has an image. If not, the following code is executed -->
<cfquery name="altImages" datasource="#Request.Application.DataApp.datasource#" dbtype="odbc">
SELECT product.SKU
FROM Product
WHERE product.title = '#Title#' OR product.fulltitle = '#FullTitle#'
</cfquery>
<cfset altPic = "">
<cfloop query="altImages">
<cfset altPicLocation = '#application.site.PWROOT#/client/products/prodimagetmb/#altImages.sku#.jpg'>
<cfif FileExists(ExpandPath(altPicLocation)) eq 'true'>
<cfset altPic = altPicLocation>
</cfif>
</cfloop>
<cfif altPic NEQ "">
<img src = "#altPic#" border = "0"> </a>
<cfelse>
<img src = "<cfoutput>#application.site.PWROOT#</cfoutput>/client/Products/prodimagedefault/tmbdefault/defaulttmb.jpg" border="0"> </a>
</cfif>
</cfoutput>
上記のコードを実行すると、エラー応答が返されます。「セキュリティ上の懸念」のため、Coldfusion管理者にパスしたり、開発中のサイトのエラーログにアクセスしたりすることは許可されていません(そうです、それがどれほど愚かであるかはわかります)。そのため、特定のエラーが何であるかわかりません。取得しています。
編集:エラーは解決されました。それは私の2番目のクエリのフォーマットと私が修正したタイプミスと関係がありました。結果は私が恐れていたほど非効率的であるため、私はまだそれを何らかの形で合理化することを望んでいます。
編集:リクエストごとの最初のクエリからのコードを追加しました。「Product」は、当社が販売する約2万件の商品レコードと、それぞれ約35〜40列の膨大なテーブルです。Productmarketは、さらに約40列を含む関連テーブルです。
最初のクエリは、製品タイプと発行日で検索して、ページのコンテンツを定義します。2番目のクエリは、特定の製品に#SKU#.jpgという名前の画像が存在しない場合にトリガーされます。まったく同じタイトルの他の製品を検索します(これは、間違ったタイプの製品であったため、最初の検索から省略されていました)。そのような製品が存在する場合は、その#SKU#.jpgが存在するかどうかを確認します。含まれている場合は、変数に割り当てられ、元の変数の代わりに使用されます。