2012-05-23 60 views
0
<cfoutput query="allOutcomes" maxrows="10"> 
    <div class="galleryOutcome"> 
    <cfset thisPhoto = uploads.listPhotobyOutcomeID(#outcomeID#)> 
    <h3>#lastname#, #firstname#</h3> 
    <cfloop query="thisPhoto" > 
     <cfif isdefined(filename)> 

     <div class="gallerythumb"> 
      <a href="javascript: thumbExpand('#fileName#')"><img src="documents/uploads/PHOTOS/#filename#" alt="#filename#" border="0" width="200"/></a> 
     </div> 

     <cfelse> 
     <p> NO PHOTOS </p> 
     </cfif> 
    </cfloop> 

    </div><div class="clear"></div><br /><br /> 
    <div onClick="javascript: thumbHide()" id="thumbexpand" style="display:none; left:670px;; height:0px; position:fixed; top:100px;">      
    </div> 

</cfoutput> 

我一直在努力讓#lastname#和#firstname#在沒有與之相關聯的照片時不顯示。我試圖做一個cfif來檢查文件名是否被定義,但它似乎沒有工作。它返回一個錯誤說:「參數IsDefined的功能1,也就是現在的(文件路徑圖像),必須是語法上有效的變量名」設置CFIF的問題

任何提示嗎?

感謝

+0

可以有多張照片嗎?是否有可能重新編寫代碼以消除嵌套查詢? – Leigh

回答

16

首先,IsDefined預計名稱的一個變量。當您省略引號或使用#號時,您將傳遞變量替代值。正確的語法是:

<cfif IsDefined("variableName")> 

但是,查詢列總是存在。所以無論如何它都不會產生正確的結果。相反,你應該測試如果FileExists。如果需要,使用expandPath以生成絕對物理路徑

<cfif FileExists(ExpandPath("/path/to/images/"& thisPhoto.fileName))> 
     it exists. do something ... 
    <cfelse> 
     no photo 
    </cfif> 

編輯:作爲Busches評價所提到的,通常structKeyExists優於IsDefined因爲其結果是更精確的。有人可能會認爲它也有更好的表現。但在大多數情況下,任何差異都可以忽略不計。更高的準確性是IMO更有說服力的原因。

<cfif structKeyExists(scopeOrStruct, "variableName")> 
+0

你是如此有幫助。很好的答案! –

+0

謝謝!但我只注意到了嵌套查詢。所以他可能需要另外一兩步,如果可以有多張照片。 – Leigh

+2

範圍的查詢太請了!做你的未來自我一個忙。此外,開始交易是StructKeyExists()的Defined()。 – Busches

1

isDefined取變量的名字作爲一個字符串,而不是變量本身。改變

<cfif isdefined(filename)> 

<cfif isdefined("filename")> 
+1

是的,但如果它是查詢列,它將始終存在。 – Leigh

+0

它回答了他的問題,但它並沒有解決他的問題 – Yisroel

1

使用<cfif len(filename)>

我猜文件名是其中一列?在查詢對象中,null用空字符串表示,所以len()可以工作。