За последние 24 часа нас посетили 18602 программиста и 1563 робота. Сейчас ищут 1269 программистов ...

как мне реализовать рекурсивный вывод папок с помощью html+php списка select

Тема в разделе "Решения, алгоритмы", создана пользователем addmaster, 20 мар 2021.

  1. addmaster

    addmaster Новичок

    С нами с:
    20 мар 2021
    Сообщения:
    1
    Симпатии:
    0
    всем привет.

    хочу реализовать рекурсивный вывод папок с помощью html+php списка select

    т.е. на странице есть 1й список ТОЛЬКО папок корня каталога.
    При выборе в нем нужной папки ниже появлялся бы 2й список с ТОЛЬКО подкаталогами,
    если есть еще вложенные папки - ниже 3й список, ну и т.д.
    Если в папке есть еще и файлы, то они просто отобразятся ссылками ниже (ну или чем-нить).
    Соответственно, если меняем в 1ом списке что-то, то отобразятся только 1й список (корень) и 2й (с вложенными).
    вот с чего начал:

    2 файла. 1й работает на клиенте, 2й на сервере, пробовал зациклить - наверное глупо. Не пойму как/вернее где script обрабатывается,

    в общем - помогите.

    Geek Brains не предлагать!!!

    Вообще, именно такая реализация - чёто многа кода мне кажется)))

    так же не нашел ни чего путнего про onChange. в php его, как я понял, не обработать, т.е. скрипты. но вот рассираться из примеров в инете не хочется.
    во всем этом (php js html и т.д.)сижу 2 недели. и да - я читаю, читаю маны)) многое пока не понятно.

    по ходу кода немного вопросов. метод POST предпочтительнее

    php select-dir.php
    PHP:
    1. <?php
    2. global $x; // надо ли?
    3. $x = 0;// может использоваться как счетчик
    4. // запись в файл $x для out.txt
    5. $fopen = fopen('sel.txt', 'w');
    6. chmod("sel.txt", 0777); // ни чего не говорите про права )))
    7. fputs($fopen,'<?php $dir = $_POST[\''.$x.'\']; $x = '.$x.';?>');
    8. fclose($fopen);
    9.  
    10. $dir = 'images'; // корневая папка
    11.     $dir_out = @opendir($dir) or die("Ошибка при открытии папки !!!");
    12.     $files = scandir($dir, 0);
    13.    
    14.     $select = '<form id = "sel_dir'.$x.'">'; //привязка формы к скрипту
    15.     // name $x - для вывода в out.php // upIncome() имя функции для скрипта
    16.     $select .= '<SELECT name ="'.$x.'" onchange="upIncome()">';
    17.     $select .= '<option hidden="none">выбор '.$x.'</option>';
    18.     // не стал использовать WHILE, мне так яснее ситуация
    19.         for($i = 2; $i < count($files); $i++) {
    20.             $infiles = $files[$i];
    21.             $dir_out = $dir .'/'. $infiles;
    22.                 if (is_dir($dir_out)) { //проверяем что это папка
    23.    // на всякий случай колбасим все (вдруг где-то че-то проверять)
    24.                     $select .= '<option name ="'.$infiles.'" value="'.$infiles.'">' . $infiles .'</option>';
    25.                 }
    26.         }
    27.     $select .= '</select>';
    28.     $select .= '</form>';
    29.     echo $select;
    30. ?>
    31.  
    32. <!-- здесь вывод -->
    33. <div class="from-server"></div>
    34.  
    35. <script>
    36. async function upIncome(){
    37.         var x = <?php echo $x ?>;
    38.  <!-- как и что можно сюда добавить? -->
    39.         let response = await fetch('out.php',{
    40.         method: 'POST',
    41.         body: new FormData(document.querySelector('#sel_dir'+x)),
    42.         });
    43.     ;
    44.  <!-- querySelector - что это?-->
    45.     document.querySelector('.from-server').innerHTML = await response.text();
    46.     }
    47. </script>
    php out.php
    PHP:
    1. <?php
    2. global $x; // надо ли?
    3. include 'sel.txt';
    4. echo '<h1>
    5.        папка: '.$dir.'<br>
    6. // по идее - если б в 1ом файле был бы еще 2й список
    7. // в той же форме <form id = "sel_dir'.$x.'">
    8. // то можно было б вывести и его значение <select NAME=""
    9.     </h1>';
    10.  
    11. // нужно еще как-то $dir менять на $dir/вложенная_дир. массив может ?
    12. ?>
    От модератора: используйте кнопку </> для вставки кода
     
    #1 addmaster, 20 мар 2021
    Последнее редактирование модератором: 21 мар 2021