迅睿cms读取zip压缩包文件目录结构配合jsTree展示文件树列表

本文教程最终实现的效果是通过后台自定义字段,上传Zip文件压缩包不解压缩的前提下,读取zip的文件目录配合jsTree展示文件树列表。教程主要分2个部分,前面为压缩包上传在网站服务器本地的教程。如果压缩包使用的云存储例如阿里云oss ,则可以参考后半部分把云存储挂载到本地硬盘。

本地压缩包读取方式

新建内容字段

登录后台-模块管理-模块内容字段-添加-字段类别(单文件File)-本文字段名称以down示例

二次开发代码

复制下方代码粘贴到 站点根目录/config/custom.php 代码功能可参考注释(这个是开发者自定义函数文件,不影响系统后续升级)

 ['timeout' => 5]]));
    } else {
        // 打开 zip 文件并获取文件结构
        $zip = new ZipArchive();
        if ($zip->open($zipName) === true) {
           // 初始化文件树结构
			$tree = [];
			for ($i = 0; $i < $zip->numFiles; $i++) {
			// 获取文件名
			$filename = $zip->getNameIndex($i);
			// 分割路径为数组
			$path = explode('/', $filename);
			$node = &$tree;
			foreach ($path as $dir) {
            if (!isset($node[$dir])) {
                $node[$dir] = [];
                }
                    $node = &$node[$dir];
			}
		}
            $zip->close();
            $html = treeToHtml($tree);
            file_put_contents($cacheFile, $html);
        }
    }
    // 输出 HTML 树
    echo '' . $html . '
'; }  // 生成 HTML 树 function treeToHtml($tree) {             $html = '
    ';             // 先输出文件夹             foreach ($tree as $name => $subtree) {                 if (!empty($name) && empty(pathinfo($name, PATHINFO_EXTENSION))) {                     $html .= '' . htmlentities($name);                     if (!empty($subtree)) {                         $html .= treeToHtml($subtree);                     }                     $html .= '';                 }             }         // 再输出文件         foreach ($tree as $name => $subtree) {             if (!empty($name) && !empty(pathinfo($name, PATHINFO_EXTENSION))) {                 $ext = pathinfo($name, PATHINFO_EXTENSION);                 $html .= '' . htmlentities($name);                 if (!empty($subtree)) {                     $html .= treeToHtml($subtree);                 }                 $html .= '';             }         }     $html .= '
';     return $html;  }

前端调用代码

前端使用jstree.js 请自行官方下载 或 在本文章结尾下载。教程提供的下载包,包括了我自己用的一些图标素材。

前端调用代码

 {generateHtmlTree($down)}
 // down改成你的自定义字段

前端引用jstree

我这里是把dist文件夹放到了网站根目录/static/模板风格文件夹中,引用示例代码如下:


前端图标代码

配合jstree.js 给各种文件图标,示例代码如下:

如果需要默认节点展开的话,可以在上方代码结尾部分处做修改,在数组中添加 'state' 然后设置 state:{opened:true} 即可,需要修改的代码部分如下:

    $('#jstree-basic').jstree({
      'plugins': ['types','state'],
      'types': generateIconObject(),
      'state': {"opened":true},
    });

OSS压缩包读取方式

安装ossfs 

这里以阿里云OSS做示例,首先服务器安装 ossfs 挂在到本地硬盘(需要注意的是目录权限的问题)

此操作需一点运维知识,可参考阿里云教程 https://help.aliyun.com/document_detail/32195.html 

温馨提示:腾讯云COSFS 宝塔有免费的官方插件。

压缩包目录

根据自己挂载路径,自行修改custom.php二次开发代码中的tmp目录名。

教程说明

以上教程代码可以直接拿走复制黏贴直接使用,需要注意的点是文件路径和缓存路径要修改。另外jstree图标引用样式需自己根据实际情况修改完善。

教程附件

教程附件仅限 高级/渠道 会员下载,请先登录平台账号

立即登录

标签:

上一篇迅睿cms模块表单制作在线预约报名付款(支持游客免登录支付)
下一篇用jQuery替换文章编辑器里的图片样式及alt标签 实现自定义图片样式

相关文章