loopfile标签
loopfile的作用是将文件夹中的文件或目录进行循环展示
举例
```brush:html
文件名 | 修改日期 |
[@name] | [@DateLastModified] |
```
上例中从POPASP框架目录中中取出文件属性(包含字段:文件名、最后修改日期),并进行循环展示。上例如果写成asp代码的话,如下
```brush:html
<%
sub filelist(file)
%>
<%=file.name%> | <%=file.DateLastModified%> |
<%
end sub
%>
文件名 | 修改日期 |
<%
Call P_("file").file_map(POP_MVC.mvc_dir,"filelist")
%>
```
在上例中,不管是模板引擎还是asp原生代码都是将POPASP根目录下的文件进行循环展示,两者其实都是使用了POP_MVC.file.file_map这个强大的回调函数。模板引擎代码中
```brush:html
```
可以改写为
```brush:html
```
### loopfile格式
```brush:html
循环块
```
file_map是默认采用的回调函数,其实还有几个。
### loopfile可采用的文件回调函数
| 方法名 | 说明 |
| ---- | ---- |
| file_map | 仅对文件夹下的文件(不递归子文件夹)进行回调函数处理,只处理文件,不处理目录 |
| files_map | 对文件夹(递归查找子文件夹)的所有文件进行回调函数处理,只处理文件,不处理目录 |
| file_page_map | 对文件夹(不递归查找子文件夹)的所有文件进行回调函数处理,并进行分页,只处理目录,不处理文件 |
| folder_map | 仅对文件夹下的目录(不递归子目录)进行回调函数处理,只处理目录,不处理文件 |
| folders_map | 对文件夹(递归查找子目录)的所有目录进行回调函数处理,只处理目录,不处理文件 |
| folder_page_map | 对文件夹(不递归查找子目录)的所有目录进行回调函数处理,并进行分页,只处理目录,不处理文件 |
| all_map | 对文件夹(递归查找子文件夹)的所有文件与目录进行回调函数处理,既处理目录,又处理文件,不进行分页 |
上面这几个方法,参数个数与参数类型都一致。比如all_map
```brush:vb
Sub all_map(path,callback)
'内码省略
End Sub
```
第一个参数是要遍历的文件夹路径,第二个参数callback是回调函数名称。模板引擎中的loopfile标签对这些方法进行了包装,可以方便在html中使用。
### loopfile分页
loopfile将分页也写进了代码,使用起来非常方便,可以使用的方法有file_page_map、folder_page_map,目前POPASP还不能做到将文件名与目录放到一块进行分页展示。
```brush:html
文件名 | 修改日期 |
[@name] | [@DateLastModified] |
{=P_("page").show} |
```
### loopfile的参数详解
```brush:html
```
前两个参数我们已经讲过了,第三个参数跟loopdb的标识符一样,如果我们从控制器或者loopfile循环之前的模板页面进行了数据分配
```brush:html
{:$dirPath=POP_MVC.mvc_dir & "Tpl/"}
文件名 | 修改日期 |
[@name] | [@DateLastModified] |
```
此时会忽略第一个参数的路径,而会采用第三个参数的路径。
第一个参数,可以是具体的路径,比如
```brush:hmtl
```
也可以是分配的变量,如果是分配的变量需要添加$
```brush:hmtl
```
### $__index输出序号
有时候我们需要在循环体内输出序号,那么这时候就要用到`$__index`,它是从0开始编号的。
举例:
```brush:html
序号 | 文件名 | 修改日期 |
133 | [@name] | [@DateLastModified] |
```
### loopfile的嵌套
loopfile可以跟if、select等其它块标签嵌套,但是不能跟自身相互嵌套。由于loopfile使用的方法如files_map、folders_map、all_map本身对文件或文件夹进行了递归循环,所以也没有必要再进行相互嵌套。如果跟自身相互嵌套,并不报错,但是不会得到正确的结果,这一点要牢记。
比如,下面的代码想先展现目录,再嵌套展现文件,但是嵌套使用不会得到想要的结果。
```brush:hmtl
{:$dirPath = POP_MVC.mvc_dir & "Tpl/"}
-
[@name]
```
### File文件对象的属性
为了方便大家使用,下面列出File文件对象的属性。
| 属性 | 说明 |
|----|----|
|Attributes|设置或返回指定文件的属性|
|DateCreated|返回指定文件创建的日期和时间。|
|DateLastAccessed|返回指定文件最后被访问的日期和时间|
|DateLastModified|返回指定文件最后被修改的日期和时间|
|Drive|返回指定文件或文件夹所在的驱动器的驱动器字母|
|Name|设置或返回指定文件的名称|
|ParentFolder|返回指定文件或文件夹的父文件夹对象|
|Path|返回指定文件的路径|
|ShortName|返回指定文件的短名称|
|ShortPath|返回指定文件的短路径|
|Size|返回指定文件的尺寸(字节)|
|Type|返回指定文件的类型。|
### Folder目录对象的属性
为了方便大家使用,下面列出Folder目录对象的属性。
| 属性 | 说明 |
|----|----|
|Attributes|设置或返回指定文件夹的属性|
|DateCreated|返回指定文件夹被创建的日期和时间|
|DateLastAccessed|返回指定文件夹最后被访问的日期和时间|
|DateLastModified|返回指定文件夹最后被修改的日期和时间|
|Drive|返回指定文件夹所在的驱动器的驱动器字母|
|IsRootFolder|假如文件夹是根文件夹,则返回 ture,否则返回 false|
|Name|设置或返回指定文件夹的名称|
|ParentFolder|返回指定文件夹的父文件夹|
|Path|返回指定文件的路径
|ShortName|返回指定文件夹的短名称|
|ShortPath|返回指定文件夹的短路径|
|Size|返回指定文件夹的大小
|Type|返回指定文件夹的类型|
Folder对象比File对象的属性多了一个IsRootFolder,其他没有区分。