利用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 相关文章推荐
再次研究下cache_lite
Feb 14 PHP
PHP学习笔记之数组篇
Jun 28 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
详解提高使用Java反射的效率方法
Apr 29 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
PHP对字符串的递增运算分析
2010/08/08 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
Python连接mysql数据库的正确姿势
2016/02/03 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
python中的字符串内部换行方法
2018/07/19 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
Python里面search()和match()的区别
2016/09/21 面试题
医疗器械售后服务承诺书
2014/05/21 职场文书
中国梦读书活动总结
2014/07/10 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
个人安全生产责任书
2014/07/28 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
golang中的空slice案例
2021/04/27 Golang