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,现在是(图像的文件路径),必须是语法上有效的变量名。”

有小费吗?

谢谢

4

3 回答 3

16

首先,IsDefined需要一个变量的名称。当您省略引号或使用 # 符号时,您正在传递变量。正确的语法是:

   <cfif IsDefined("variableName")>

但是,查询列始终存在。所以无论如何它都不会产生正确的结果。相反,您应该测试FileExists. 如果需要,使用 expandPath 生成绝对物理路径

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

编辑:正如 Busches 在评论中提到的那样,通常structKeyExistsIsDefined它的结果更精确。有些人可能会争辩说它也有更好的性能。但在大多数情况下,任何差异都可以忽略不计。提高准确性是 IMO 更令人信服的原因。

<cfif structKeyExists( scopeOrStruct, "variableName")>
于 2012-05-23T20:05:16.140 回答
1

isDefined将变量的名称作为字符串,而不是变量本身。改变

<cfif isdefined(filename)>

<cfif isdefined("filename")>
于 2012-05-23T20:05:02.180 回答
1

采用<cfif len(filename)>

我猜文件名是列之一?在查询对象中,null 用空字符串表示,所以len()可以。

于 2012-05-23T20:05:11.250 回答