Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rozpoznanie ścieżki do katalogu
Forum PHP.pl > Forum > Przedszkole
Malinaa
Witam, szukam sposobu na rozpoznanie ścieżki do katalogu.

Jak zrobić dynamiczne generowaną ścieżkę do katalogu?

Przykład:
Mamy katalog główny, w którym znajduje się plik index.php, w katalogu głównym znajduje się katalog include, w którym jest plik menu.php strony z linkami o stałej ścieżce.
Dla stron znajdujących się w katalogu głównym wszystko jest ok, ale mamy kolejny element strony ogłoszenia, w katalogu głównym ogloszenia/index.php i tu zaczyna się problem, ponieważ jeśli wczytamy za pomocą funkcji include(); menu.php w katalogu ogloszenia/index.php śieżka musi być inna dla wszystkich linków, grafiki niż dla pliku w katalogu głównym index.php.
Potrzebny jest plik menu.php z dynamicznie generowaną ścieżką w zależności od tego, w którym kalalogu zostanie wczytany. Dla katalogu ogloszenia/index.php ścieżka powinna być ../, gdybyśmy mieli kolejne katalogi o poziom wyżej np. ogloszenia/drobne/plik.php ścieżka powinna mieć postać ../../ itd.
Chciałbym zapewnić prawidłowe wyświetlanie wszystkich elementów strony, bez konieczności kopiowanie tych samych plików np. menu tylko dlatego, że ścieżka musi być inna, w zależności od umieszczenia pliku w katalogu bieżącym, nadrzędnym, podrzędnym.
Ach, piszę i nie bardzo wiem jak przedstawić problem. Może ktoś miał podobny, proszę o rozwiązanie.
Pozdrawiam
b4x
dirname(__FILE__);
pEbE
Użyj instrukcji warunkowej np:
  1. <?php
  2. if( $dir = 'ogloszenia/drobne/' )
  3. {
  4.  $a = '../../';
  5. }
  6. include( $a.$plik );
  7. ?>


chyba, że (nie wiem czy dobrze zrozumialem Twoj problem) wyciagasz sciezke do pliku ze $_SESSION, dzielisz ja za pomoca explode i liczysz ile jest katalogów
b4x
A po co się bawić w "../../".

Lepiej np. w pliku konfiguracyjnym dać np:

  1. <?php
  2. define ('ROOT', dirname(__FILE__).'/');
  3. ?>


I później:

  1. <?php
  2. include(ROOT.'jakiskatalog/jakisplik.php');
  3. ?>


I 0 bawienia się z "../../".
Malinaa
dirname jest mi znane, ale nie jest to rozwiązanie jakiego szukam.

Potrzebuję nie tyle co rozpoznać ścieżkę (chociaż takie rozwiązanie może okazać się najlepsze), a rozpozać, który to katalog: główny, nadrzędny, podrzędny?

Napisałem funkcje, która to realizuje, ale myślę, że można to zrobić bardziej mądrze, potrzebuję szanowni użytkownicy rady fachowca.

Funkcja:
  1. <?php
  2. function sciezka_katalogu($znak_podzilu, $element_biezacy) {
  3.    $katalog = getcwd();
  4.    $tablica = explode($znak_podzilu, $katalog);
  5.    $element_nadrzedny = $element_biezacy + 1;
  6.    if (isset($tablica[$element_biezacy])) {
  7.        $katalog_strony = $katalog_biezacy;
  8.    }
  9.    elseif (isset($tablica[$element_nadrzedny])) {
  10.        $katalog_strony = $katalog_nadrzedny;
  11.    }
  12.    return $katalog_strony;
  13. }
  14. ?>
erix
Cytat
Potrzebuję nie tyle co rozpoznać ścieżkę (chociaż takie rozwiązanie może okazać się najlepsze), a rozpozać, który to katalog: główny, nadrzędny, podrzędny?

No to coś w stylu Twojej funkcji.

  1. <?php
  2. $znak_podzilu
  3. ?>

A stała DIRECTORY_SEPARATOR? tongue.gif

Cytat
Potrzebny jest plik menu.php z dynamicznie generowaną ścieżką w zależności od tego, w którym kalalogu zostanie wczytany. Dla katalogu ogloszenia/index.php ścieżka powinna być ../, gdybyśmy mieli kolejne katalogi o poziom wyżej np. ogloszenia/drobne/plik.php ścieżka powinna mieć postać ../../ itd.

To wystarczy prosty explode" title="Zobacz w manualu PHP" target="_manual ze sprawdzeniem ilości elementów...
kefirek
  1. <?php
  2. $folder = ""; $i = 0;
  3. while (!file_exists($folder."index.php")) {
  4.    $folder .= "../"; $i++;
  5.    if ($i == 5) { die("nie znaleziono pliku"); }
  6. }
  7.  
  8. define("GLOWNY", $folder);
  9. ?>


Potem robisz tak

  1. <?php
  2. <a href='".GLOWNY."plik.php'>test</a>
  3. ?>
Malinaa
Poprawiłem moją funkcje i jest OK.
$znak_podzilu - przeliterowanie którego nie zmieniłem, bo nie nie miało znaczenia w działaniu funkcji.

Zobaczę jeszcze Twoje rozwiązanie kefirek.

Thank's
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.