Question

I am using jQuery File Tree to display a directory listing, toghether with the standard PHP connector provided with the File Tree code.

Everything works fine, but I need to filter the listing to avoid the inclusion of hiden files and not desired folders. My skills in PHP or JS doesn't allow me to go futher than pasting here the code, with the hope I can get some extra lines to hide unwanted files according to certain pattern/s.

Thanks!

The HTML code:

<html>
<head>
<link rel="stylesheet" href="../../js/ft/jqueryFileTree.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="../../js/ft/jqueryFileTree.js"></script>
<script type="text/javascript">
function openFile(file) {
    window.location = file;
}
$(document).ready (function() {
$('.filetree').fileTree({
root: '../../../est/dir/',
script: '../../js/ft/connectors/jqueryFileTree.php',
function(file) {
window.open(file);
});
});
</script>

</head>
<body>
   <div class="filetree"></div>
</body>
</html>

And the PHP code:

<?php
$_POST['dir'] = urldecode($_POST['dir']);

if( file_exists($_POST['dir']) ) {
   $files = scandir($_POST['dir']);
   natcasesort($files);
   if( count($files) > 2 ) { // The 2 accounts for . and .. 
      echo "<ul class=\"jqueryFileTree\" style=\"display: none;\">";
      // All dirs
      foreach( $files as $file ) {
         if( file_exists($_POST['dir'] . $file) && $file != '.' && $file != '..' && is_dir($_POST['dir'] . $file) ) {
            echo "<li class=\"directory collapsed\"><a href=\"#\" rel=\"" . htmlentities($_POST['dir'] . $file) . "/\">" . htmlentities($file) . "</a></li>";
         }
      }
      // All files
      foreach( $files as $file ) {
         if( file_exists($_POST['dir'] . $file) && $file != '.' && $file != '..' && !is_dir($_POST['dir'] . $file) ) {
            $ext = preg_replace('/^.*\./', '', $file);
            echo "<li class=\"file ext_$ext\"><a href=\"#\" rel=\"" . htmlentities($_POST['dir'] . $file) . "\">" . htmlentities($file) . "</a></li>";
         }
      }
      echo "</ul>"; 
   }
}

?>

PS: original source comming from here

Was it helpful?

Solution

I am not familiar with jQuery File Tree but I believe that the key to your issue lies inside the loops.

The only thing you need to do is create a blacklist, an array with the name of the folders/files you dont want to show.

$blacklist = array('namefile1', 'namefolder1', 'namefile2');

And then implement a check inside the loop, so that it skips the name if the file/folder name matches one that is inside the blacklist (case sensitive).

foreach( $files as $file ) 
{
     if (in_array($file, $blacklist))
         continue;

     .... the rest of the code ...
     .... goes here ..............
}

That is basically what you need to do. You could also use regular expressions and the preg_match function, to make it more flexible..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top