我有一个函数,可以扫描提供的目录并返回父目录中的所有文件和子目录。
public function show_image(){
$dir=FCPATH.'uploads/';
$files = scandir($dir);
$ret= array();
$result=array();
foreach($files as $file)
{
if($file == "." || $file == "..")
continue;
$filePath=$dir."/".$file;
$details = array();
$details['name']=$file;
$details['path']=$filePath;
$details['size']=filesize($filePath);
$ret[] = $details;
}
echo json_encode($ret);
//echo json_encode($result);
}
基本上我使用的是Ajax,所以我正在做的是打印该目录中的文件夹和文件。但这里的问题是我真的想过滤这个函数当前没有做的子目录和文件。我想在一开始打印出文件夹,而在文件夹之后打印其他文件。$ret按升序包含数据。在视图中,我遵循了Ajax onSucess函数。
onSuccess:function(files,data,xhr,pd)
{
var src = '<?php echo base_url("uploads"); ?>'+'/'+data.file_name;
var html = '<div class="col-sm-3 text-center"><div class="mid-folder">';
html+= '<div class="folder-content"><img src="'+src+'" class="img-container" style="max-height:100%; max-width:100%;"/></div>'
html+= '<a href="#" class="link-folder" title="link folder"><h3 class="title-folder">'+data.file_name.substr(0,10)+".."+' </h3></a> </div>';
$('.hello').append(html);
$('.ajax-file-upload-statusbar').fadeOut(1000, function(){
$('.ajax-file-upload-statusbar').show(1000).html('Your file successfully uploaded');
});
$('.ajax-file-upload-statusbar').hide('slow');
}
我应该做什么,以便我可以以不同的方式显示文件夹和文件。基本上是一种逻辑/方式,通过它我可以过滤$ret中的哪个对象应该被视为 dir,哪个对象应该被视为文件并彻底显示它。
我会在服务器端分离文件和目录,然后将 json 对象发送到数组。一个包含目录,一个包含文件。
$ret= array();
$result=array();
foreach($files as $file){
if($file == "." || $file == "..")
continue;
$filePath=$dir."/".$file;
$details = array();
$details['name']=$file;
$details['path']=$filePath;
$details['size']=filesize($filePath);
if(is_dir($filePath) {
$ret['directories'][] = $details;
}
else {
$ret['files'][] = $details;
}
}
接下来,在 ajax 成功回调函数中进行两个循环。一个用于data.directories
,一个用于data.files
.