Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne Menu oparte na strukturze plików
Forum PHP.pl > Forum > PHP
jaskooo
Witam,

Problem polega na tym, iż chciałbym aby na podstawie struktury na dysku tworzyło się menu katalogów w których są zdjęcia i po kliknięciu na link z danym folderem wyświetlała się jego zawartość.

Na razie zrobiłem i działa ale tylko na jednym poziomie czyli nie obsługuje zagnieżdżenia katalogów
oto kod
  1. <html>
  2. <head>
  3. <title>Obrazy</title>
  4. </head>
  5. <body style='background-color: #9a9a9a'>
  6.  
  7.  
  8. <div style='width: 100px; float:left; margin-top: 20px;'>
  9. <?php
  10.  
  11. $jaki = (!empty($_GET['kat']))$_GET['kat'] : 'lusowo';
  12.  
  13.  
  14. $folder = @opendir('.');
  15. if(!$folder){
  16. echo "Nie ma folderow:(";
  17. }
  18.  
  19.  
  20. while(($files = readdir($folder)) !== false){
  21.  
  22. if (is_dir($files) && $files != '.' && $files != '..'){
  23.  
  24. echo "<li style=' list-style-type: none;'><a style='text-decoration:none; border-bottom: 1px dashed gray; color: white;' href='index.php?kat=$files'>$files</a></li>";
  25. }
  26.  
  27. }
  28. echo "<br />";
  29.  
  30.  
  31. $bazazdj = @opendir($jaki);
  32. if(!$bazazdj){
  33. echo "Nie ma folderow:(";
  34. }
  35. ?>
  36. </div>
  37.  
  38. <div style='width: 1000px; margin-top: 20px; float: left; position: relative;'>
  39.  
  40. <?php
  41.  
  42. while(($file = readdir($bazazdj)) !== false){
  43.  
  44. if ($file != '.' && $file != '..' && $file != '.DS_Store' && !is_dir($file)){
  45.  
  46. echo "<a href='$jaki/$file'><img src='$jaki/$file' width='300px' style='border: 1px solid gray; margin-left: 10px; margin-bottom: 10px;'></img></a>";
  47. }
  48. }
  49.  
  50.  
  51.  
  52.  
  53.  
  54. ?>
  55. </div>
  56.  
  57. </body>
  58. </html>


Powyzsze skrypty powodują iż wyświetlają sie zdjęcia z danego folderu, ale chce żeby to było dynamiczne, czyli jak w katalogu stworze inny katalog to aby dodawał się do menu i tworzył się do niego automatycznie link do jego zawartości.

P.S. Na razie jest to napisane proceduralnie, ale jak mi sie uda tak to spróbuje obiektowo (jeszcze nic tak nie pisałem, ale trzeba zacząć).
sf
Po prostu musisz to zrobić rekurencyjnie. Przykład z opendir masz na stronie http://php.net/opendir w komentarzach. Jeśli chcesz to zrobić przy użyciu PHP5 to użyj klas RecursiveIteratorIterator i RecursiveDirectoryIterator. Przykład na moim blogu.. tyle, że tam jest zamiana treści każdego pliku.

rekurencyjna zamiana tekstu
mike
To i ja się pochwalę.
Spójrz jak można odczytac listę plików w bardziej "cywilizowany" sposób: Lista plików w folderze.

Pamiętaj każda chwila, która inwestujesz w prac z PHP4 i opmijasz PHP5 to chwila, w której się cofasz.
jaskooo
I znowu sie to stało sad.gif Czarna dziura smile.gif.

Potrzebuje z tego co mi powiedzieliście wyłuskać drzewo katalogów, które stanie się listą (w tym przypadku Menu ) linków do zawartości tychże katalogów wyświetlanych w div-e obok.


W przysłanym wcześniej przykładzie udałosię to zrobić tylko nie zagnieżdżone (tylko na jednym poziomie katalogów).

Jak te iteratory teraz przefiltrować aby powstało drzewo katalogów ?


P.S. Pewnie znowu się ośmieszam niewiedzą smile.gif
mike
Cytat(jaskooo @ 3.08.2007, 11:13:05 ) *
Jak te iteratory teraz przefiltrować aby powstało drzewo katalogów ?
Zadaj konkretne pytanie, bądź pokaż przykład o co dokładnie chodzi.
Bo przykład wyświetlania jest podany u mnie w tekście.
jaskooo
Chodzi dokladnie o Menu na stronie (pewnego typu przegladarka katalogów).

Na dysku jest struktura katalogów, w których znajdują się zdjęcia. Plan jest taki aby na podstawie struktury katalogów tworzyło się menu (dynamicznie) poprzez które można wybrać katalog ze zdjęciami.

W miare zrozumiałe smile.gif


Narazie to działa ale bardzo prymitywnie, ponieważ działa na jednym poziomie.


Pytanie: Jaki kod napisać aby strona działała jak przeglądarka folderów ze zdjęciami i wyświetlała zawartośc wybranego folderu.


pozdro i bardzo dzięki.

P.S. Artykuł na blog-u - rewelka.
FireFox
tutaj masz pokazane rekurencyjnie "latanie" po katalogach. Problem podobny z tym ze zamiast wyswietlac pliki zlicza ich wielkosci

wez sobie do serca slowa mike'a o php4

pozdrawiam
jaskooo
Wziąłem sobie do serca, teraz listowanie plików wyglada tak:

  1. <?php
  2. $handle_dir = '.';
  3.  $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($handle_dir));
  4.  
  5.  foreach ($iterator as $fileInfo) {
  6.  
  7.  echo $fileInfo->getFileInfo() . "<br />n";
  8.  
  9.  }
  10. ?>


Zastanawiam się jeszcze jak wyświetlić same katalogi i jak znich zrobi drzewo (wizualnie).


Ale rozumiem, że powinienem trochę sam pogłówkować inaczej się nic nie naucze.

Nabyłem już 3 księgi z PHP z czego jedna jest stricte o OOP.

Obiecuje, że będę próbował obiektować gdzie tylko się da (oczywiście jak się nauczę)


P.S. Jak ktoś by miał pomysł na wizualizację drzewka katalogów to prosze o pomoc.


No i znowu zonk!

Kod wyglada tak:
  1. <?php
  2.  
  3.  
  4. $path = 'Gallery';
  5.  
  6. foreach (new DirectoryIterator($path) as $DirInfo) {
  7.  
  8. if ($DirInfo->isDir() && $DirInfo != '.' && $DirInfo != '..') {
  9.  
  10. echo $DirInfo->getFilename() . "<br />n";
  11.  
  12. }
  13. }
  14.  
  15.  
  16. ?>


Ale caly czas wyswietla tylko katalogi I rzedu w katalogu Gallery, natomiast nie chce wyswietlac katalogow zagniezdzonych czyli podkatalogow.

Co robie zle questionmark.gif

DZIAŁA

Zrobiłem, oto kod:

  1. <?php
  2.  $path = 'Gallery';
  3.  
  4. $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
  5.  
  6. foreach ($iterator as $DirInfo) {
  7. if ($DirInfo->isDir() && $DirInfo != '.' && $DirInfo != '..') {
  8.  
  9. echo "<li><a href='index.php?kat=".$DirInfo->getPath()."/".$DirInfo->getFilename()."'>".$DirInfo->getFilename()."</a></li>";
  10.  
  11. }
  12. }
  13.  
  14.  
  15. ?>



Przede wszystkim wielkie dzieki dla @mike za pomoc i super artykuł na blogu exclamation.gif!! Dzieki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.