![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 265 Pomógł: 4 Dołączył: 30.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam mniej więcej taka strukturę katalogów: smart/libs/Smarty.class.php smarty/page/index.php smarty/page/template/index.tpl w index.php mam wczytanie klasy Smarty i odwołanie się do index.tpl. Wszystko działa ładnie ale jak przeniosę plik index.php do np. smart/page/modules/index.php i oczywiścię zmienie ścieżkę do klasy Smarty to już mi nie czyta pliku index.tpl :/ dlaczego tak jest ? Z góry dzięki za pomoc, pozdrawiam. Ten post edytował GreenGo 25.03.2008, 18:41:15 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dodatkowo musisz zmienić ścieżki do odpowiednich katalogów. Najlepiej jeśli rozszerzysz klasę Smarty np. w ten sposób:
http://www.smarty.net/manual/en/installing...ty.extended.php |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 265 Pomógł: 4 Dołączył: 30.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
Coś chyba robie źle :/
Oto drzewko katalogów: ![]() Plik index.php mam w klatlogu smarty/alko/modules/index.php plik setup.php mam w smart/alko/setup.php index.php
setup.php
No i nie działa. Byłbym wdzięczny za pomoc ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 789 Pomógł: 41 Dołączył: 30.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze, zdecyduj się. Katalog ze Smarty to smart, smarty czy Smarty?
Po drugie, zarówno require jak i include dołącza kod PHP. Dla przykładu: Kod - Directory -- Subdirectory ---- index.php -- setup.php - Directory2 -- config.php Jeśli w pliku setup.php ustawisz: include('../Directory2/config.php') i otworzysz w przeglądarce http://localhost/Directory/setup.php, to poprawnie załaduje się plik config.php. Jeśli potem plik setup.php dołączysz do index.php z Directory/Subdirectory, to PHP będzie szukało config.php w Directory/config.php, czyli ../ względem Subdirectory. Te dwie kropeczki oznaczają katalog wyżej, tak jak w linii komend (tudzież w konsoli) wpisujesz cd .., aby przejść do foldera wyżej. Najlepszym rozwiązaniem jest zastosowanie takiego myku: Directory/Subdirectory/index.php
Directory/setup.php
Directory2/config.php
Teraz zadziała, zarówno jak w przeglądarce wywołasz http://localhost/Directory/setup.php jak i http://localhost/Directory/Subdirectory/index.php. Wynikiem powinno być Hello World!. Pisane z palca, powinno działać. Jak pomogło zrozumieć - jest taki przycisk obok posta... |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 265 Pomógł: 4 Dołączył: 30.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki tiraeth, sie napracowałeś ale to to ja już doskonale wiem
![]() Dlatego właśnie nie wiem co jest źle w tym co ja robie, niby wszystkie pliki i klasa smart się odnajdują czyli ścieżki do plików są ok, ale informacje się nie przekazują do .tpl :/ nie za bardzo rozumiem po co jest w setup.php to
i nie wiem czy te lokalizacje są dobrze podane
Pozdrawiam ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Nie przekazują się, ponieważ nie utworzyłeś jeszcze obiektu parsera. Zobacz: masz linijkę:
Kod include "admin_mod/admin_$name.php"; A teraz popatrz, w którym miejscu wywołujesz to: Kod $smarty = new Smarty_Setup; Jest to parę linijek niżej, zatem najpierw dołączasz i wykonujesz szablon, który próbuje dodać dane do nieistniejącego parsera, który tworzysz dopiero po fakcie. Zasada jest prosta: wszelkie inicjacje, setupy itd., które ustawiają rzeczy niezbędne modułowi do pracy, muszą wykonać się przed jego uruchomieniem, a nie po nim ![]() Jeszcze ad. zarządzania ścieżkami w skrypcie. Kodując je na sztywno, bardzo szybko się w nich pogubisz. Ja stosuję bardzo proste i skuteczne rozwiązanie. Obieram sobie zawsze pewien katalog i podaję wszystkie ścieżki względem niego. Katalogiem tym jest najczęściej katalog główny projektu. W Twoim przypadku wyglądałoby to następująco: Twoim katalogiem głównym jest Smarty. Jeżeli masz skrypt w katalogu smarty/alko/modules/index.php i chcesz z jego poziomu dołączyć smart/alko/setup.php, nie piszesz ../setup.php, tylko ../../../alko/setup.php (najpierw wyskakujemy do wnętrza głównego katalogu i dopiero z niego schodzimy z powrotem w głą ![]() ![]() Ścieżek nigdy nie koduję w skrypcie bezpośrednio. Zawsze tworzę jeden plik zwany common.php albo bootstrap.php, który na początku tworzy stałe ze wszystkimi ścieżkami względem głównego katalogu, ładuje wszystkie potrzebne pliki i tworzy obiekty. Dopiero po jego wykonaniu sterowanie wraca do modułu czy czego tam chcesz. Przykładzik. Mamy główny katalog w /projekt, zaś z przeglądarki jest dostęp do katalogu /projekt/www. Bezpośrednio w katalogu głównym mamy bootstrap.php: Kod <?php define('DIR_WWW', DIR_MAIN.'www/'); define('DIR_LIBS', DIR_MAIN.'libs/'); define('DIR_SMARTY', DIR_LIBS.'smarty/'); define('DIR_TEMPLATES', DIR_MAIN.'templates/'); // i tak jeszcze trochę require(DIR_LIBS.'biblioteka1.php'); require(DIR_LIBS.'biblioteka2.php'); require(DIR_SMARTY.'smarty.class.php'); // tworzymy obiekty $tpl = new Smarty_Setup; $costaminnego = new CosTamInnego; ?> Teraz w projekt/www/ mamy index.php: Kod <?php // Pokazujemy, jak z pliku index.php trafić do katalogu głównego define('DIR_MAIN', '../'); require(DIR_MAIN.'bootstrap.php'); // W tym momencie mamy zainicjowane wszystkie biblioteki // Oraz mamy stałe dające nam łatwy dostęp do wszystkich katalogów. // mozemy wiec przystapic do generowania zawartosci strony require(DIR_MODULES.'jakis_modul.php'); $tpl -> display('o_matko_to_dziala.tpl'); ?> Tak więc podsumowując: 1. Plik index.php oraz każdy inny uruchamiany z przeglądarki musi wiedzieć dwie rzeczy: gdzie jest bootstrap.php oraz jak trafić do katalogu głównego. 2. Bootstrap.php musi wiedzieć, gdzie leżą wszystkie pliki, patrząc z głównego katalogu. 3. Index.php uruchamia bootstrapa i mówi mu, gdzie się znajduje. 3. Bootstrap.php w odpowiedzi przekazuje mu informacje o położeniu wszystkich innych plików uwzględniające lokalizację index.php, a także tworzy środowisko do pracy. Są też inne techniki, np. z wykorzystaniem include_path. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:03 |