我有一个函数,它扫描提供的目录并返回父目录中的所有文件和子目录。
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,哪个作为文件并彻底显示。
答案 0 :(得分:1)
我会在服务器端使用separering文件和目录,然后将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
。