我编写了以下 PHP 代码来显示目录中的文件。它使用 JQuery 来展开文件夹。一切正常,但现在它按字母顺序混合文件类型显示所有文件。
我想保留字母顺序,但单独显示文件夹和文件。如何对显示的文件进行排序,以便文件夹显示在顶部,其他文件显示在下面。
换句话说,如何按文件类型对文件进行排序?
非常感谢!
<?php
$path = ROOT_PATH;
$dir_handle = @opendir($path) or die("Unable to open $path");
list_dir($dir_handle,$path);
function list_dir($dir_handle,$path)
{
echo "<ul class='treeview'>";
while (false !== ($file = readdir($dir_handle)))
{
$dir =$path.'/'.$file;
if(is_dir($dir) && $file != '.' && $file !='..' )
{
$handle = @opendir($dir) or die("undable to open file $file");
echo '<li class="folder"><a href="#" class="toggle">'.$file.'</a></li>';
list_dir($handle, $dir);
}
elseif($file != '.' && $file !='..')
{
echo '<li class="file"><a href="file-details.php?file='.$dir.'" class="arrow_icon modal">'.$file.'</a></li>';
}
}
echo "</ul>";
closedir($dir_handle);
}
?>
您应该做的第一件事是分离获取/排序文件并显示它们的逻辑,这将使定制变得更容易。
这是一个可行的解决方案(今天早上有一些空闲时间:)
list_dir(ROOT_PATH);
/* Rendering */
function list_dir($path)
{
$items = get_sorted_entries($path);
if (!$items)
return;
echo "<ul class='treeview'>";
foreach($items as $item)
{
if ($item->type=='dir')
{
echo '<li class="folder"><a href="#" class="toggle">'.$item->entry.'</a></li>';
list_dir($item->full_path);
}
else
{
echo '<li class="file"><a href="file-details.php?file='.urlencode($item->full_path).'" class="arrow_icon modal">'.$item->entry.'</a></li>';
}
}
echo "</ul>";
}
/* Finding */
function get_sorted_entries($path)
{
$dir_handle = @opendir($path) ;
$items = array();
while (false !== ($item = readdir($dir_handle)))
{
$dir =$path.'/'.$item;
if ( $item == '.' || $item =='..' )
continue;
if(is_dir($dir))
{
$items[] = (object) array('type'=>'dir','entry'=>$item, 'full_path'=>$dir);
}
else
{
$items[] = (object) array('type'=>'file','entry'=>$item, 'full_path'=>$dir);
}
}
closedir($dir_handle);
usort($items,'_sort_entries');
return $items;
}
/* Sorting */
function _sort_entries($a, $b)
{
return strcmp($a->entry,$b->entry);
}
Edit:如果你想先显示目录,请将排序函数更改为:
function _sort_entries($a, $b)
{
if ($a->type!=$b->type)
return strcmp($a->type,$b->type);
return strcmp($a->entry,$b->entry);
}
这会将目录放在顶部(Windows 风格)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)