我仍然试图让我在Coldfusion上的握手...如何使用Coldfusion cfdirectory和randRange函数输出随机文件?
我需要创建一个直接的文件(说有10个文件),并输出5个随机文件。获取和输出文件是好的,但我不知道在哪里适合randrange。这里是我的代码:
<cfdirectory action="list" directory="#expandpath("img/")#" filter="some*.*" name="dir">
<!--- imgID --->
<CFSET imgID= #RandRange(1, #dir.allRecords#)#>
<!--- this only grabs the first 5 files --->
<cfoutput query="dir" maxrows="5">
<cfif FileExists("#expandpath("img/#name#")#")>
<cfimage source="#expandpath("img/#name#")#" name="myImage"> <cfif IsImage(myImage) is true>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset ImageScaleToFit(myImage,"highestQuality")>
<!--- append to a list --->
<li><cfimage source="#myImage#" action="writeToBrowser"></li>
</cfif>
</cfif>
</cfoutput>
这可以在显示前5个图像时正常工作。不过,我想要有5张的随机图片。
感谢您的一些见解!
编辑:
这是我最后只是 - 一个问题没有解决 -
<!-- get the directy, listinfo="name" because I only need filenames --->
<cfdirectory action="list" LISTINFO="name" directory="#expandpath(" logos/")#" filter="marke*.*" name="dir">
<cfset images=[ ]>
<!-- since dir is not indexable, like dir[pos], I need another array!-->
<cfset dirArr=[ ]>
<cfset blocker="false">
<cfset maxLogos=5>
<!-- fill new dirArr(ay) -->
<cfoutput query="dir">
<cfset #ArrayAppend(dirArr, #expandpath("logos/#name#")#)#>
</cfoutput>
<!-- loop -->
<cfloop condition="blocker eq false">
<-- random position -->
<cfset pos=R andRange(1, #dir.recordcount#)>
<cfif #dir.recordcount# eq 0 OR #ArrayLen(images)# gte #maxLogos#>
<-- STOP loop -->
<cfset blocker="true">
</cfif>
<cfset ArrayAppend(images, #dirArr[pos]#)>
<!-- BROKEN unknown ARRAYDELETE -->
<!--- <cfset ArrayDelete(dirArr, #dirArr[pos]#)> --->
<!-- IMG -->
<cfimage source="#dirArr[pos]#" name="myImage">
<cfif IsImage(myImage) is true>
<cfoutput>
<li data-icon="false">
<cfimage source="#myImage#" action="writeToBrowser">
</li>
</cfoutput>
</cfif>
</cfloop>
问题是ArrayDelete不起作用变量ARRAYDELETE未定义,ColdFusion的(8)告诉我。任何想法我做错了什么?
你想用'ArrayDeleteAt()'还引用您的ArrayDeleteAt变量时不需要输出迹象。 ''cfset ArrayDeleteAt(dirArr,dirArr [pos])>'除非您直接输出变量,否则几乎不需要使用#。 – 2012-04-23 11:54:32
hm。那个错误:“值C:\ path \ logos \ marke1111111111114_test.png.png不能被转换为一个数字。” – frequent 2012-04-23 11:57:00
关于代码风格的说明。只有当你需要围绕##中的变量或函数时,才打算输出结果。是不必要的。 更具可读性。函数的参数也是如此myfunc(#varname#)是不好的做法,myfunc(varname)更可取 –
2012-04-23 12:03:19