環境,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的本地系統,但基于文件系統;后來放棄了,因為不方便做更新提醒及篩選。