我正在尝试编写一个函数,通过遍历与缺少图像的产品共享标题的任何产品来从产品的替代版本中查找图像(这些是书籍,因此任何具有相同“标题”的产品都可以使用) .
我首先运行查询以获取将在页面上显示的产品(我知道这部分工作正常,所以我不关心它)。当需要显示图像时,我首先检查是否有用于所选产品的图像。
如果没有可用的图像,我想对具有相同“标题”或“完整标题”的任何产品运行第二次查询,并查看它们是否有可用的图像。(这将是#SKU#.jpg,正如您在代码中看到的那样)如果找到其中一个替代版本的图像,我将其保存到一个变量中,一旦循环完成,我就会显示该选择的图像。
如果我仍然没有找到产品图片,它会显示我们默认的“图片不可用”图片。
<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 管理员通过或访问我正在开发的站点的错误日志(是的,我知道那是多么愚蠢)所以我不知道具体的错误我越来越。
编辑:错误已解决。这与我的第二个查询的格式和我已修复的错字有关。结果和我担心的一样低效,所以我仍然希望以某种方式简化它。
编辑:从每个请求的第一个查询中添加了代码。“产品”是一个绝对庞大的表格,包含我们公司销售的大约 20k 条产品记录,每个记录大约 35-40 列。Productmarket 是一个包含大约 40 列的关联表。
第一个查询按产品类型和发布日期搜索以定义页面内容。当给定产品不存在名称为#SKU#.jpg 的图像时,会触发第二个查询;它会搜索具有完全相同标题的任何其他产品(因为它是错误的产品类型,所以在第一次搜索中会被忽略)。如果存在这样的产品,它会检查#SKU#.jpg 是否存在。如果是,则将其分配给一个变量并代替原始变量使用。