Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Ścieżka względna - organizowanie skryptu w pliki i foldery
Malinaa
post 20.04.2010, 20:50:44
Post #1





Grupa: Zarejestrowani
Postów: 572
Pomógł: 6
Dołączył: 21.07.2008

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


Witam wszystkich,

już wcześniej zastanawiałem się nad problemem ścieżki do plików katalogów.
I chciałbym znaleźć z Waszą pomocą odpowiedź.

Pytanie na przykładzie.

Katalogi

www / include
www / uslugi
www / uslugi / masaz

mam strukturę katalogów strony (załóżmy, że strona znajduje się w katalogu o nazwie www)

w tym też katalogu znajduje się plik index.php (strona główna)

w katalogu www mamy katalog include, w którym są pliki (np. naglowek.php, menu_lewe.php) ładowane prze funkcje include() dla pliku index.php i innych plikach znajdujących się w katalogu www)

Wszystko jest ok do czasu kiedy potrzebuję dodać kolejny katalog np. uslugi
ponieważ wówczas dla nowego pliku znajdującego się w katalogu uslugi np. masaz.php
ścieżki "includowanych" plików nie zgadzaja się, ponieważ ustawione są dla katalogu www, a nie uslugi.

Jak napisać skrypt generujący ścieżkę dynamicznie dla plików katalogu, a nie określoną statycznie.

Tak, aby includowane pliki nie trzeba było kopiować i dodawać kolejne takie same tylko dlatego, że ścieżka się nie zgadza.

Tak, aby jeden plik (np. naglowek.php) z katalogu include mógł być używany nie zależnie czy znajduje się w katalogu www, czy uslugi, czy innym.

A najlepiej byłoby jak myślę, aby w każdym pliku ścieżki były tworzone dynamicznie, dla każdej lokalizacji elementów strony.

Zacząłem pisać funkcje, ale nie mam przekonania, że to jest najlepszy pomysł:

  1. function sciezka_katalogu($znak_podzialu, $element_biezacy) {
  2. $katalog = getcwd();
  3. $tablica = explode($znak_podzialu, $katalog);
  4. $element_nadrzedny = $element_biezacy + 1;
  5. if (isset($tablica[$element_biezacy])) {
  6. $katalog_strony = $katalog_biezacy;
  7. }
  8. elseif (isset($tablica[$element_nadrzedny])) {
  9. $katalog_strony = $katalog_nadrzedny;
  10. }
  11. return $katalog_strony;
  12. }


Szukam dobrego rozwiązania, a przedstawione powyżej działa, ale nie jest tak jak bym chciał.

sciana.gif

Potrzebna pomoc

Ten post edytował Malinaa 21.04.2010, 20:25:38


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
varez
post 20.04.2010, 23:05:12
Post #2





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 17.06.2007

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


źle się za to bierzesz.. poczytaj o mod_rewrite..

wtedy sciezki typu:
mojastrona.pl/uslugi/index.php
to tylko dodatkowa zmienna w GET, ktorą sobie pobierzesz i w/g niej zincludujesz..
Go to the top of the page
+Quote Post
Malinaa
post 21.04.2010, 20:13:19
Post #3





Grupa: Zarejestrowani
Postów: 572
Pomógł: 6
Dołączył: 21.07.2008

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


mod_rewrite jest mi po krótce znany i napewno będę chciał zrobić ładne linki w dalszej części projektu, ale obecnie pracuje nad stroną na localhost i nie mam tutaj zainstalowanego mod_rewrite (nie na każdym serwerze działa), ale obecnie nie w tym rzecz.

Potrzebuję $path (jesli tak mozna to określić), który będzie generowny dynamicznie dla każdego adresu.

Tak, aby wspomniame pliki z katalogu include można było użyć dla plików stron serwisu nie zależnie od tego czy są one w katalogu nadrzędnym, podrzędnym itp.

w pliku index.php

dla wszystkich adresów zaczynając od <head> po </body>

przykład:

<head>

<link href="<?php echo $path.'css/menu.css'; ?>" type="text/css" rel="stylesheet">

<body>

<?php
// Naglowek strony
include($path."include/naglowek.php");
?>

w pliku naglowek.php

<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td width="180" height="110"><a href="<?php echo $path.'index.php'; ?>"><img src="grafika/logo.jpg" width="180" height="110" border="0" alt=""></a></td>
<td width="580"><img src="<?php echo $path.'grafika/naglowek.jpg'; ?>" width="580" height="110" border="0" alt=""></td>
</tr>
</table>

Aby w zależności od katalogu $path = "./"; lub $path = "../"; lub $path = "../../"; itd. wówczas mógłbym używać jednego pliku naglowek.php niezależnie od tego w którym katalogu znajduje się plik główny includujący nagłowek strony i zawsze ścieżka będzie ok, a nie jak mam obecie gdzie jest statycznie określona i jeśli plik głowny będzie w innym katalogu to trzeba tworzyć kolejny plik naglowek_2.php tylko po to, aby w prezentowanej wyżej tabeli w miejsce $path wpisać inną ścieżkę.

Patrząc na funkcje wyżej zastanawiam się, czy nie byłoby dobrze w każdym pliku na początku dać:

$path = dirname(__FILE__);

Chyba najprościej, ale czy dobrze?

---

Zrobione,
jeżeli chcesz zrobić coś dobrze zrób to sam smile.gif , może być przydatne:

  1. function PathRoot() {
  2. $path_full = dirname($_SERVER['PHP_SELF']);
  3. $path_tab = explode("/", $path_full);
  4. $path_count = count($path_tab);
  5.  
  6. if ($path_count == 2) $path = './';
  7. else if ($path_count == 3) $path = '../';
  8. // itd. jesli zachodzi taka potrzeba
  9. return $path;
  10. }
  11.  
  12. $path = PathRoot();


W przypadku ciekawszego rozwiązania, dzięki za post.

See you

Ten post edytował Malinaa 21.04.2010, 20:14:22


--------------------
I welcome you on the Internet >>> Design by Malina
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: 24.04.2025 - 05:08