Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dynamiczne Menu oparte na strukturze plików
jaskooo
post 3.08.2007, 07:23:13
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ąć).


--------------------
to tylko ja jaskooo :)
Go to the top of the page
+Quote Post
sf
post 3.08.2007, 08:01:26
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


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
mike
post 3.08.2007, 08:54:19
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 3.08.2007, 10:13:05
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 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


--------------------
to tylko ja jaskooo :)
Go to the top of the page
+Quote Post
mike
post 3.08.2007, 10:26:03
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 3.08.2007, 10:35:55
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 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.


--------------------
to tylko ja jaskooo :)
Go to the top of the page
+Quote Post
FireFox
post 3.08.2007, 11:57:26
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 4.08.2007, 12:41:39
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 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 tylko ja jaskooo :)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 01:34