如题,phpcms v9里多文件上传字段,获取的数据为一串字符,数组字符格式,如何才能取得多文件上传的文件地址?
论坛有几种解决方法:
1. 使用php的eval函数将字符转为数组,并赋值,当然因为这串字符有换行,而phpcms里的php标签,也就是{php ..... } 不允许换行,只能一行一句, 所以需要先将这串字符取出换行符,挺繁琐的,不建议使用这个方法"
- {pc:get sql="select * FROM v9_py_data " num="8" cache="3600" return="data"}
- {loop $data $r}
- {php eval("\$arr=" . $r[upload] . ";");echo $arr[0]['fileurl'];}
- {/loop}
- {/pc}
2. 方法二是正则匹配出url地址,感觉没必要,其实我们只需要拿到这个数组就行了,问题是现在他是这个数组的字符形式,相当扯淡,不建议使用此方法.
3. 正解:phpcms有个方法:string2array ,用来将数组字符串处理并返回为数组,所以这个方法才是正解,方法如下:
$a = string2array($b);
多文件上传字段,比如为 allfiles,那么一般循环出来就是 $r[allfiles],要获取地址 那就是:
$allfiles = string2array( $r[allfiles]);
然后循环(loop) $allfiles 逐个取出其文件地址,当然如果只限制为一个文件上传那么直接就 $allfiles[0][fileurl]就行了.
根据上面描述总结得出自建字段上传,获取地址或者描述:
- {pc:content action="lists" moreinfo="1" catid="$catid" num="1" order="id DESC"}
- {loop $data $r}
- {php eval("\$arr=" . $r[test] . ";");echo $arr[0]['fileurl'];}
- {/loop}
- {/pc}
- {pc:get sql="SELECT setting FROM phpcms_poster WHERE spaceid = 1 AND type='images' AND disabled=0 ORDER BY listorder ASC" num="20"}
- {loop $data $r}
- <?php eval("\$narry =$r[setting];"); ?>
- <a href="{$narry[1][linkurl]}">
- <img style="padding-bottom:12px" src="{$narry[1][imageurl]}" alt="{$narry[1][alt]}" width="390" height="260">
- </a>
- {/loop}
- {/pc}