2

我想根据传递给 cfdirectory 的过滤条件吐出稍微不同的 html。

这是我的cfml:

<cfdirectory
    directory="#dirName#"
    name="fileList"
    action="list"
    type="file"
    filter="*.jpg|*.jpeg|*.png|*.gif|*.mp4"
>
<ul id="content">
    <cfoutput>
        <cfloop query="fileList">
            <cfif filter NEQ '*.mp4'> // I guess this is not possible and is throwing the error
                <li class="content image">
                    <img src="img/#name#" />
                </li>
            </cfif>
            <cfelse>
                <li class="video image">
                    <video controls="controls">
                        <source src="img/#name#" type="video/mp4">
                    </video>
                </li>
            </cfif>
        </cfloop>
    </cfoutput>
</ul>

我想我不能简单地访问filter内部cfif,但我不知道如何皮肤。它是否需要存储在循环外的变量中?

非常感谢任何帮助

4

3 回答 3

5

您可以简单地执行以下操作。

<cfif listLast(fileList.name, '.') NEQ 'mp4'>
于 2020-05-21T17:31:07.257 回答
4

您还没有告诉我们您实际遇到了什么错误,但是如果问题中的代码确实是您正在使用的代码,那么您的问题不是过滤器,而是:

        </cfif>
        <cfelse>

删除虚假</cfif>并重新运行,如果之后仍然出现错误,则将其添加到问题中。

编辑:您仍然会发现对过滤器的引用不起作用,但 RRK 的 listLast 答案会很好 - 如果您还没有,请确保您的目录实际上是正确的路径,例如:

<cfset dirName = expandPath('img')>
<cfdirectory
    directory="#dirName#"
    name="fileList"
    action="list"
    type="file"
    filter="*.jpg|*.jpeg|*.png|*.gif|*.mp4"
>
<ul id="content">
    <cfoutput>
        <cfloop query="fileList">
            <cfif listLast(fileList.name, '.') NEQ 'mp4'>
                <li class="content image">
                    <img src="img/#EncodeForUrl(name)#" />
                </li>
            <cfelse>
                <li class="video image">
                    <video controls="controls">
                        <source src="img/#EncodeForURL(name)#" type="video/mp4">
                    </video>
                </li>
            </cfif>
        </cfloop>
    </cfoutput>
</ul>
于 2020-05-21T22:15:29.057 回答
3

让我们一步一步来

<ul id="content">
   <!--- Normally you want to loop over query in a cfoutput. No need for both --->
    <cfoutput query="fileList">
            <cfif listlast(fileList.name, '.') NEQ 'mp4'>

                <li class="content image">
                    <img src="img/#name#" />
                </li>

            <cfelse>
                <li class="video image">
                    <video controls="controls">
                        <source src="img/#name#" type="video/mp4">
                    </video>
                </li>
            </cfif>

    </cfoutput>
</ul>

更多细节

 <cfif listLast(fileList.name, '.') NEQ 'mp4'>

fileList.name意思是:我们想看name。但不仅仅是可以存在于任何范围内的任何名称。我们想要与fileList

listLast()表示取字符串变量,用逗号分隔,然后告诉我最后一项是什么。将其作为字符串返回。

listLast(..., '.')你知道关于逗号的那部分,是的,让我们用句号代替。换句话说,文件名的最后一部分是什么.

如果那不是mp4,那么...

于 2020-05-21T22:28:27.187 回答