设置CFIF的问题

时间:2012-05-23 19:55:42

标签: coldfusion if-statement

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

任何提示?

由于

3 个答案:

答案 0 :(得分:16)

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

   <cfif IsDefined("variableName")>

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

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

修改:作为评论中提到的广告,通常structKeyExists优先于IsDefined,因为其结果更精确。有些人可能会说它也有更好的表现。但在大多数情况下,任何差异都可以忽略不计。提高准确度是IMO更令人信服的原因。

<cfif structKeyExists( scopeOrStruct, "variableName")>

答案 1 :(得分:1)

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

<cfif isdefined(filename)>

<cfif isdefined("filename")>

答案 2 :(得分:1)

使用<cfif len(filename)>

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