【问题标题】:Fancytree - Generate tree with phpFancytree - 用 php 生成树
【发布时间】:2021-09-17 09:21:08
【问题描述】:

我正在使用 Fancytree,我想生成一个文件/文件夹树,但不包括所有不是来自当前用户的文件夹。

例子:

UPPERCASE = FOLDER
lowercase = file

我想用用户“Peter”创建一个树形结构

我有几个问题:

  1. 我不懂listFolders函数,不能给它一个参数(比如$name_user),否则不起作用。
  2. 行 >> print_r ('TAKE THIS'. $ Dir); foreach 不起作用
  3. 我的代码重复了,因为我无法在函数内创建函数...

这是我的代码:

    <?php
    $name_user = 'Peter'; // actualy not user :-( 
    print_r(listFolders());
    
    function listFolders($dir = __DIR__ . '/datausers') {
        $dh = scandir($dir);
        $name_user = "Peter";
        $return = [];
    
        if (strpos($dir, "/datausers/PERSONNAL") !== false){ // PERSONNAL found !
            if ($dir === __DIR__ . '/datausers/PERSONNAL') {  
                print_r('TAKE THIS' . $dir);
                echo '</br>';
    
                foreach ($dh as $item) {
                    if ($item != '.' && $item != '..') {
                        if (is_dir($dir . '/' . $item)) { // it's a folder
                            $return[] = array(
                                'title' => $item,
                                'folder' => true,
                                'expanded'=> true,
                                'children' => listFolders($dir . '/' . $item, $key)
                            );
                        } else { // it's a file
                            $return[] = [
                                'title' => $item,
                            ];
                        }
                    }
                }
            }
    
            if (strpos($dir, "/datausers/PERSONNAL/" . $name_user) !== false){ // Peter found
                print_r('TAKE THIS' . $dir);
                echo '</br>';
    
                foreach ($dh as $item) {
                    if ($item != '.' && $item != '..') {
                        if (is_dir($dir . '/' . $item)) { // it's a folder
                            $return[] = array(
                                'title' => $item,
                                'folder' => true,
                                'expanded'=> true,
                                'children' => listFolders($dir . '/' . $item, $key)
                            );
                        } else { // it's a file
                            $return[] = [
                                'title' => $item,
                            ];
                        }
                    }
                }
            }
        } 
        else {
            print_r('TAKE THIS' . $dir);
            echo '</br>';
    
            foreach ($dh as $item) {
                if ($item != '.' && $item != '..') {
                    if (is_dir($dir . '/' . $item)) { // it's a folder
                        $return[] = array(
                            'title' => $item,
                            'folder' => true,
                            'expanded'=> true,
                            'children' => listFolders($dir . '/' . $item, $key)
                        );
                    } else { // it's a file
                        $return[] = [`enter code here`
                            'title' => $item,
                        ];
                    }
                }
            }
        }
        return $return;
    }
    ?>

【问题讨论】:

    标签: php file directory directory-structure fancytree


    【解决方案1】:

    好的,我找到了解决方案。 昨天我在这个问题上花了一天时间,这太疯狂了。 今天我终于找到了解决方案。感谢 requinix 回复我。

    我把我的解决方案放在这里(不完美),但它有效。

    <?php
    if(session_status() != 2) { session_start(); } else { header('Location: deco.php'); } // (2 = session active) if don't active session
    if (!isset($_SESSION['username']) || empty($_SESSION['username'])) {header('Location: deco.php');} // redirection si pas de session ouverte
    if (time() > $_SESSION['expire']) {
        session_destroy();
        header('Location: deco.php');
    }
    $e1 = isset($_POST['e1']) ? $_POST['e1'] : null;
    $e2 = isset($_POST['e2']) ? $_POST['e2'] : null;
    if (empty($e1) || empty($e2)) {
        $return_data['key1'] = 'error';
        echo json_encode($return_data);
        return;
    }
    
    if ($e1 == 'read'){
        $e2 = str_replace('<','',$e2); // just for prevent html injection
        $e2 = str_replace('?','',$e2); // just for prevent php injection
        $return_data['key1'] = 'read';
        $return_data['key2'] = $e2;
        echo json_encode($return_data);
        return;
    
        $e2 = str_replace('}','',$e2); 
        $e2 = str_replace('"','',$e2); 
        $e2 = explode(":", $e2);        // take only name node 
    }
    
    if ($e1 == 'tree'){ 
        if ($_SESSION['username'] !== $e2){ // verification right name user
            $return_data['key1'] = 'error';
            $return_data['key2'] = ' tree authentication problem';
            echo json_encode($return_data);
            return;
        }
        echo json_encode(listFolders($e2, __DIR__ . '/datausers')); // $e2 = name user
        return ;
    }
    
    function listFolders($path_user, $dir) {
        $dh = scandir($dir);
        $name_user = $path_user;
        $return_data = [];
    
        if (strpos($dir, "/datausers/PERSONNAL") !== false){ // PERSONNAL found !
            if ($dir === __DIR__ . '/datausers/PERSONNAL') {  
                foreach ($dh as $item) {
                    if ($item != '.' && $item != '..') {
                        if ($item === $name_user){ // Take only a user
                            if (is_dir($dir . '/' . $item)) { // it's a folder
                                $return_data[] = array(
                                    'title' => $item,
                                    'folder' => true,
                                    'expanded'=> true,
                                    'children' => listFolders($name_user, $dir . '/' . $item, $key) 
                                );
                            } else { // it's a file
                                $return_data[] = [
                                    'title' => $item,
                                ];
                            }
                        }
                    }
                }
            }
    
            if (strpos($dir, "/datausers/PERSONNAL/" . $name_user) !== false){ // Peter found
                foreach ($dh as $item) {
                    if ($item != '.' && $item != '..') {
                        if (is_dir($dir . '/' . $item)) { // it's a folder
                            $return_data[] = array(
                                'title' => $item,
                                'folder' => true,
                                'expanded'=> true,
                                'children' => listFolders($name_user, $dir . '/' . $item, $key) 
                            );
                        } else { // it's a file
                            $return_data[] = [
                                'title' => $item,
                            ];
                        }
                    }
                }
            }
        } 
        else {
            foreach ($dh as $item) {
                if ($item != '.' && $item != '..') {
                    if (is_dir($dir . '/' . $item)) { // it's a folder
                        $return_data[] = array(
                            'title' => $item,
                            'folder' => true,
                            'expanded'=> true,
                            'children' => listFolders($name_user, $dir . '/' . $item, $key)
                        );
                    } else { // it's a file
                        $return_data[] = [
                            'title' => $item,
                        ];
                    }
                }
            }
        }
        return $return_data;
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      否则,构建具有不同目录级别的树结构和要使用的目录的过滤器。
      如果它可以帮助某人:)


      --Admin [这里是 PHP 脚本]
      --datauser [这里要取的树形结构]

      $e2 = "name folder";
      $path_array = explode('/', __DIR__); // put path to array
      $path_shortcut_array = array_slice($path_array,0,(count($path_array)-1)); // rebuild array path without the last 
      $path_base_string = implode("/", $path_shortcut_array); // rebuild with '/'
      
      echo json_encode(listFolders($e2, $path_base_string . '/datausers')); // $e2 = name user
      
      function listFolders($path_user, $dir) {
          $dh = scandir($dir);
          $name_user = $path_user;
          $return_data = [];
      
          if (strpos($dir, "/datausers/PERSONNAL") !== false){ // PERSONNAL found !
              $path_array = explode('/', __DIR__);
              $path_shortcut_array = array_slice($path_array,0,(count($path_array)-1));
              $path_base_string = implode("/", $path_shortcut_array);
              
              if ($dir === $path_base_string . '/datausers/PERSONNAL') {  
                  foreach ($dh as $item) {
                      if ($item != '.' && $item != '..') {
                          if ($item === $name_user){ // Take only a user
                              if (is_dir($dir . '/' . $item)) { // it's a folder
                                  $return_data[] = array(
                                      'title' => $item,
                                      'folder' => true,
                                      'expanded'=> true,
                                      'children' => listFolders($name_user, $dir . '/' . $item, $key) 
                                  );
                              } 
                          }
                      }
                  }
              }
      
              if (strpos($dir, "/datausers/PERSONNAL/" . $name_user) !== false){ // user found
                  foreach ($dh as $item) {
                      if ($item != '.' && $item != '..') {
                          if (is_dir($dir . '/' . $item)) { // it's a folder
                              $return_data[] = array(
                                  'title' => $item,
                                  'folder' => true,
                                  'expanded'=> true,
                                  'children' => listFolders($name_user, $dir . '/' . $item, $key) 
                              );
                          } else { // it's a file
                              $return_data[] = [
                                  'title' => $item,
                              ];
                          }
                      }
                  }
              }
          } 
          else {
              foreach ($dh as $item) {
                  if ($item != '.' && $item != '..') {
                      if (is_dir($dir . '/' . $item)) { // it's a folder
                          $return_data[] = array(
                              'title' => $item,
                              'folder' => true,
                              'expanded'=> true,
                              'children' => listFolders($name_user, $dir . '/' . $item, $key)
                          );
                      } else { // it's a file
                          $return_data[] = [
                              'title' => $item,
                          ];
                      }
                  }
              }
          }
          return $return_data;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多