利用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 socket方式提交的post详解
Jul 19 PHP
PHP程序级守护进程的实现与优化的使用概述
May 02 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
PHP经典面试题集锦
Mar 19 PHP
PHP魔术方法的使用示例
Jun 23 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP读取Excel类文件
May 15 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
php写app用的框架整理
Sep 29 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
js实现双色球效果
2020/08/02 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
Python随机生成数模块random使用实例
2015/04/13 Python
python批量提取word内信息
2015/08/09 Python
python爬虫之百度API调用方法
2017/06/11 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
为什么会有内存对齐
2016/10/10 面试题
如何理解委托
2012/01/06 面试题
介绍一下linux文件系统分配策略
2013/02/25 面试题
大学四年个人自我小结
2014/03/05 职场文书
创先争优承诺书范文
2014/03/31 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
详解运行Python的神器Jupyter Notebook
2021/06/03 Python