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がコメントで述べたように、結果がより正確であるため、一般的structKeyExistsに優先されます。IsDefinedパフォーマンスも優れていると主張する人もいるかもしれません。しかし、ほとんどの場合、違いは無視できます。精度の向上は、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)>

ファイル名は列の1つであると思いますか?クエリ オブジェクトでは、null は空の文字列で表されるため、機能しlen()ます。

于 2012-05-23T20:05:11.250 に答える