利用php+mcDropdown实现文件路径可在下拉框选择


Posted in PHP onAugust 07, 2013

最近用php进行文件目录信息读取,在网上弄到下面一段代码:
//获取指定目录下的文件列表
//$path 指定的目录,默认为当前目录
//$ifchild 是否显示子目录文件列表,默认不显示
//$curpath 显示当前的路径,默认为从当前目录开始;这个主要是为了显示确定href路径

    function openpath($path=".",$ifchild=false,$curpath=".")  
    {          $handle = opendir($path);  
        if($handle)  
        {  
           while(false !== ($file = readdir($handle)))  
           {  
               if ($file != "." && $file != "..")   
               {  
                    $fullPath = $path.DIRECTORY_SEPARATOR.$file;  
                    if(is_dir($fullPath))//如果是目录文件  
                    {  
                         if($ifchild)//如果设置了显示子目录  
                         {  
                            //递归  
                            openpath($path.DIRECTORY_SEPARATOR.$file,$ifchild,$curpath.DIRECTORY_SEPARATOR.$file);  
                         }  
                         else  
                         {  
                            echo "<li><a href=\"$curpath/$file \" target=\"_blank\">$file</a></li>\n";  
                         }  
                    }  
                    else if($file != basename(__FILE__))//排除当前执行脚本  
                    {  
                        echo "<li><a href=\"$curpath/$file \" target=\"_blank\">$file</a></li>\n";  
                    }  
                    else  
                    {  
                        echo $file;  
                    }  
               }  
           }  
        }  
        closedir($handle);  
    } 

因为自己要提供路径选择的功能,最好是有一个下拉菜单,里面有待选路径的显示,这样方便很多,于是自己改了改,把路径输出成一个无序列表。
下面是一个取得当前文件下所有子文件路径的代码:
/*获取指定目录文件路径列表
 *$path 指定的目录,默认为当前目录
 *$ifchild 是否获取子目录文件列表,默认不获取
 *$curpath 显示当前的路径,默认为从当前目录开始
 *&$pach_html_srt 传递一个外部变量的引用进来,因为此方法有可能被递归调用,所以以这样的方式来保存
 *      一些信息,也可以用全局变量来实现,在函数内部变量改变也影响到外部。
 *&$path_ref_count 原理同上,一个计数标志,如果递归,计数器从上一次保存的值开始自增
 */
function openpath($path=".",$ifchild=false,&$path_html_str,&$path_ref_count)
{ 
    $handle = opendir($path);
 if($handle)
 { 
    while(false !== ($file = readdir($handle)))
    {
     if ($file != "." && $file != "..") 
     {
    $fullPath = $path.DIRECTORY_SEPARATOR.$file;
    if(is_dir($fullPath))//如果文件是目录
    {
     $path_html_str.='<li rel="'.$path_ref_count++.'">';
     $path_html_str.=$file.'<ul>';
      if($ifchild)
      {
      //递归
      openpath($path.DIRECTORY_SEPARATOR.$file,$ifchild,&$path_html_str,&$path_ref_count);
      }
      $path_html_str.='</ul></li>';
    }
     }
    }
 }
 closedir($handle);
}

有了上面的方法,我就可以在前台用jquery mcDropdown插件来让用户可以通过下拉菜单选择想进入的目录,所以需要封装成指定格式:
$path_ref_count = 1;
$path_html_str ='';
openpath(".",true,&$path_html_str,&$path_ref_count);
$path_html_str = '<ul id="categorymenu" class="mcdropdown_menu">'.$path_html_str.'</ul>';
$path_html_str = str_replace ( "<ul></ul>", '', $path_html_str );

这样我把$path_html_str传到前台,显示出来的就是一个符合mcDropdown要求的无序列表,就可以显示相应的待选列表了。
完整代码如下:
test.html
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8" />
 <title>test</title>
<script type="text/javascript" src="./lib/jquery.js"></script> 
<script type="text/javascript" src="./lib/jquery.mcdropdown.js"></script> 
<script type="text/javascript" src="./lib/jquery.bgiframe.js"></script> <!---// load the mcDropdown CSS stylesheet //---> 
<link type="text/css" href="./css/jquery.mcdropdown.css" rel="stylesheet" media="all" />
<script type="text/javascript">
$(document).ready(function (){
 var delim = "#delim#";
    dd= $("#category").mcDropdown("#categorymenu",{
    allowParentSelect:true,
    delim:delim
    }); 
}); 
</script>
</head>
<body>
 <p>
  Please select a category:<br />
  <input type="text" name="category" id="category" value="" />
 </p>
 #categorymenu#
</body>
</html>

test.php
<?php
//目录信息处理
$path_ref_count = 1;
$path_html_str ='';
openpath(".",true,&$path_html_str,&$path_ref_count);
$path_html_str = '<ul id="categorymenu" class="mcdropdown_menu">'.$path_html_str.'</ul>';
$path_html_str = str_replace ( "<ul></ul>", '', $path_html_str );
//var_dump($path_info);
//var_dump($path_html_str);
$str_buffer = file_get_contents (dirname(__FILE__).DIRECTORY_SEPARATOR.'test.html');
$str_buffer = str_replace ( "#categorymenu#", $path_html_str, $str_buffer );
$str_buffer = str_replace ( "#delim#", DIRECTORY_SEPARATOR, $str_buffer );
echo $str_buffer;
/*获取指定目录文件路径列表
 *$path 指定的目录,默认为当前目录
 *$ifchild 是否获取子目录文件列表,默认不获取
 *$curpath 显示当前的路径,默认为从当前目录开始
 *&$pach_html_srt 传递一个外部变量的引用进来,因为此方法有可能被递归调用,所以以这样的方式来保存
 *      一些信息,也可以用全局变量来实现,在函数内部变量改变也影响到外部。
 *&$path_ref_count 原理同上,一个计数标志,如果递归,计数器从上一次保存的值开始自增
 */
function openpath($path=".",$ifchild=false,&$path_html_str,&$path_ref_count)
{ 
    $handle = opendir($path);
 if($handle)
 { 
    while(false !== ($file = readdir($handle)))
    {
     if ($file != "." && $file != "..") 
     {
    $fullPath = $path.DIRECTORY_SEPARATOR.$file;
    if(is_dir($fullPath))//如果文件是目录
    {
     $path_html_str.='<li rel="'.$path_ref_count++.'">';
     $path_html_str.=$file.'<ul>';
      if($ifchild)
      {
      //递归
      openpath($path.DIRECTORY_SEPARATOR.$file,$ifchild,&$path_html_str,&$path_ref_count);
      }
      $path_html_str.='</ul></li>';
    }
     }
    }
 }
 closedir($handle);
}
?>

jquery mcDropdown 插件可以在这里下载:http://www.givainc.com/labs/mcdropdown_jquery_plugin.htm
PHP 相关文章推荐
php XPath对XML文件查找及修改实现代码
Jul 27 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
php遍历目录方法小结
Mar 10 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 PHP
PHP书写格式详解(必看)
May 23 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
php学习笔记之mb_strstr的基本使用
Feb 03 PHP
PHP http请求超时问题解决方案
Nov 13 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 #PHP
对于PHP 5.4 你必须要知道的
Aug 07 #PHP
php缓存技术详细总结
Aug 07 #PHP
IIS6.0中配置php服务全过程解析
Aug 07 #PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 #PHP
Win下如何安装PHP的APC拓展
Aug 07 #PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 #PHP
You might like
php pdo连接数据库操作示例
2019/11/18 PHP
JScript的条件编译
2007/05/29 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
python实现清屏的方法
2015/04/30 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
把pandas转换int型为str型的方法
2019/01/29 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
详解Python3定时器任务代码
2019/09/23 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
三好学生自我鉴定
2013/12/17 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
顶岗实习计划书
2015/01/16 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
python绘制云雨图raincloud plot
2022/08/05 Python