1

画像が欠落している製品とタイトルを共有する製品をループすることにより、製品の代替バージョン(これらは本であるため、同じ「タイトル」を持つすべての製品が機能します)から画像を検索する関数を作成しようとしています。 。

最初にクエリを実行して、ページに表示される製品を取得します(この部分は正常に機能することがわかっているので、関係ありません)。画像を表示するときは、まず選択した商品に画像があるかどうかを確認します。

利用可能な画像がない場合は、同じ「タイトル」または「フルタイトル」の商品に対して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が存在するかどうかを確認します。含まれている場合は、変数に割り当てられ、元の変数の代わりに使用されます。

4

0 に答える 0