【问题标题】:cfdirectory output different html based on filtercfdirectory 根据过滤器输出不同的 html
【发布时间】:2020-05-21 17:19:34
【问题描述】:

我想根据传递给 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>

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

非常感谢任何帮助

【问题讨论】:

    标签: html coldfusion cfml cfloop cfdirectory


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

            </cfif>
            <cfelse>
    

    删除虚假的&lt;/cfif&gt; 并重新运行,如果之后仍然出现错误,请将其添加到问题中。

    编辑:您仍然会发现对过滤器的引用不起作用,但 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>
    

    【讨论】:

    • 我喜欢encodeforURL()。它应该包括在内。我的文件名称中有空格,需要注意。
    • 好地方,幸运的是我所有的文件都是小写的,没有空格,但我会更新脚本来捕捉这个,谢谢。
    【解决方案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,那么...

    【讨论】:

    • 太棒了。谢谢你。我通常发现这是一个我经常忽略的愚蠢错误(偶然的&lt;/cfif&gt;)。
    • 我没有包含它应该包含的EncodeForHTMLURL()
    猜你喜欢
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2012-05-10
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多