利用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转成EXE文件
Oct 09 PHP
php在字符串中查找另一个字符串
Nov 19 PHP
PHP 分页原理分析,大家可以看看
Dec 21 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
PHP Switch 语句之学习笔记
Sep 21 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 PHP
PHP异常处理浅析
May 12 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
php探针不显示内存解决方法
Sep 17 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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 eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
php生成curl命令行的方法
2015/12/14 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
React组件的三种写法总结
2017/01/12 Javascript
javascript表单正则应用
2017/02/04 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
用友笔试题目
2016/10/25 面试题
甜品店创业计划书
2014/09/21 职场文书
大学教师个人总结
2015/02/10 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android