Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dynamiczne Menu oparte na strukturze plików
jaskooo
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.04.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ąć).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
sf
post
Post #2





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


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

Ten post edytował sf 3.08.2007, 08:01:50
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
jaskooo
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.04.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


I znowu sie to stało (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Czarna dziura (IMG:http://forum.php.pl/style_emoticons/default/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ą (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
jaskooo
post
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.04.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
FireFox
post
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 26.01.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
jaskooo
post
Post #8





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.04.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !! Dzieki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 16:57