<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,现在(文件路径到图像),必须是语法上有效的变量名。”
任何提示?
由于
答案 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()
可以工作。