利用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 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
一次编写,随处运行
Oct 09 PHP
php生成WAP页面
Oct 09 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
php生成QRcode实例
Sep 22 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
Jan 08 PHP
php短信接口代码
May 13 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP自动识别当前使用移动终端
May 21 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
PHP 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
深入理解vue中的$set
2017/06/01 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
python实现ping的方法
2015/07/06 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python中hashlib模块用法示例
2017/10/30 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
django 模版关闭转义方式
2020/05/14 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
环境工程求职简历的自我评价范文
2013/10/24 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
人事科岗位职责范本
2014/03/02 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
电话客服工作职责
2014/07/27 职场文书
年终晚会活动方案
2014/08/21 职场文书
音乐教师求职信范文
2015/03/20 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
地球上的星星观后感
2015/06/02 职场文书
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python