环境,windows10,xampp(php7),codeigniter4,zui.sexy
直接读取文件夹并生成树状目录方案
得益于php7对GBK中文目录的支持,codeigniter的File Helper,zui.sexy的树状目录,干这件事情只需要一个函数,就能得到全部目录(包含子目录)的Array:
directory_map()
前端用框架zui.sexy的方案;
直接读取文件夹、生成树状目录方案、带文件夹选择、文件下载
下方做的是有多个项目的文件夹,及查看每个项目的文件夹里面有什么文件夹、文件。
data
--20171015\
---- a.txt
---- b.txt
---- c.txt
--20171016\
---- a.txt
---- b.txt
---- c.txt
--20171017\
---- a.txt
---- b.txt
---- c.txt
--20171018\
---- a.txt
---- b.txt
---- c.txt
Controller中:
public function project($project){
$this->data["left_data"] = $this->get_all_projects();
$this->data["url_floder"] = urldecode($project);
$this->data["right_data"] = directory_map('data/' . urldecode($project));
return view('welcome_message',$this->data);
}
然后在view中作了判断,是否显示具体文件夹:
if(!is_array($right_data)){
echo $right_data;
}else{
$url_project = urldecode('http://127.0.0.1/data/' . $url_floder . '/');
echo array2ul($url_project,$right_data);
}
调用了这个自定义函数:
function array2ul($path,$array,$ul_first_times=0,$ul_get_color=0) {
if ($ul_first_times == 0){
$out = '<ul class="tree tree-lines tree-folders" data-ride="tree" data-animate="true">';
}else{
$out = '<ul>';
}
foreach($array as $key => $elem){
if(!is_array($elem)){
$download_url = $path . $elem;
$out .= '<li><a target="_blank" href="' . $download_url . '">' . $elem . '</a></li>';
}else{
$ul_first_times += 1;
$ul_get_color = count(explode('\\', $path));
$out .= '<li><a title="Level ' . $ul_get_color . ' Title" href="#">' . $key . '</a>' . array2ul($path . $key,$elem,$ul_first_times,$ul_get_color) . "</li>";
$file_path = './data/' . $key . 'readme.txt';
if ($ul_get_color == 1 && is_file($file_path)){
$out .= '<p>Thing!</p>';
}else{
$out .= $path . $key . 'readme.txt';
};
}
}
$out .= '</ul>';
return $out;
}
文章信息:
写作日期:2017年10月18日
写作地点:广东·江门
写作背景:想做类似于teambition的本地系统,但基于文件系统;后来放弃了,因为不方便做更新提醒及筛选。