| 
<?php
 require_once(dirname(__FILE__).'/hierarchy.class.php');
 
 $list = get_directory_list();
 $list_hierarchicaly = hierarchy::print_list($list);
 
 header('Content-type: text/html; charset=UTF-8');
 echo <<<HTML
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
 <title>Example</title>
 <link rel="stylesheet" type="text/css" media="all" href="hierarchy.css.php" />
 <style><!--
 img { border: 0; }
 a { text-decoration: none; }
 --></style>
 </head>
 <body>
 <h1>Directory List</h1>
 <div style="border: 1px solid red; padding: 0 1em;">
 {$list_hierarchicaly}
 </div>
 <p>You can print a directory content hierarchicaly.</p>
 </body>
 </html>
 HTML;
 
 
 /**
 * Example of function that create a list dinamicaly.
 *
 * @return array[string => (bool || type)]
 */
 function get_directory_list() {
 
 // Save opened items in session
 session_start();
 if (!isset($_SESSION['opened'])) {
 $_SESSION['opened'] = array();
 }
 
 $dirname = dirname(__FILE__);
 $location = '';
 
 // If open action was requested
 if (isset($_GET['open'])) {
 $open = urldecode($_GET['open']);
 $open = realpath($dirname.'/'.str_replace('.', '', $open));
 if (is_dir($open)) {
 if (isset($_SESSION['opened'][$open])) {
 unset($_SESSION['opened'][$open]);
 } else {
 $_SESSION['opened'][$open] = true;
 }
 }
 }
 
 return get_directory_list_recursion($dirname, $location);
 }
 
 
 /**
 * Function recursion.
 *
 * @param string $dirname Directory to be opened
 * @param string $location Short directory name
 * @return array[string => (bool || type)]
 */
 function get_directory_list_recursion($dirname, $location) {
 $dirname = realpath($dirname);
 $dir = scandir($dirname);
 $list = array();
 $has_content = false;
 foreach ($dir as $item) {
 if ($item == '.' || $item == '..') {
 continue;
 }
 $has_content = true;
 
 // Directory
 if (is_dir($dirname.'/'.$item)) {
 $open = urlencode($location.'/'.$item);
 
 // If it is open
 if (isset($_SESSION['opened'][$dirname.'/'.$item])) {
 $img = '<img src="imgs/dir_opened.gif" alt="opened directory" />';
 $content = '<a href="example_directory.php?open='.$open.'">'.$img.' '.$item.'</a>';
 $list[$content] = get_directory_list_recursion($dirname.'/'.$item, $location.'/'.$item);
 
 // If it is close
 } else {
 $img = '<img src="imgs/dir_closed.gif" alt="closed directory" />';
 $content = '<a href="example_directory.php?open='.$open.'">'.$img.' '.$item.'</a>';
 $list[$content] = false;
 }
 
 // File
 } else {
 $list[$item] = false;
 }
 }
 
 if (!$has_content) {
 $list['empty'] = false;
 }
 return $list;
 }
 
 |