Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dołączanie szablonów z innych ścieżek, Komplikacje i zależności - jak rozwiązać problem?
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Klasa Content: http://www.unit1.pl/pb-904
Front Kontroler: http://www.unit1.pl/pb-905
Rozszerzenie (dołączone przez Front Kontroler): http://www.unit1.pl/pb-906

W klasie Content zdefiniowałem 2 zmienne. Są to:
* $content->dir - z szablonami źródłowymi (HTML + pseudokod szablonowy)
* $content->cacheDir - z szablonami skompilowanymi do PHP

Doskonale zdają egzamin, gdy całkowicie zmieniam środowisko (np. panel admina, instalator). Wtedy wszystkie szablony są ładowane z określonych w tych zmiennych katalogów (oprócz kilku ładowanych z VIEW_DIR).

Do tej pory wszystko funkcjonowało poprawnie. Teraz pojawił się problem. Zacząłem tworzyć rozszerzenie do systemu CMS. Nie wypada, by szablony wtyczek były przechowywane w katalogu domyślnej skórki (bo skórek może być więcej - wtedy admin może nie wiedzieć, która jest tą domyślną). biggrin.gif Lepiej, aby rozszerzenia miały własne katalogi z szablonami.

Pojawia się problem. W pliku rozszerzenia zmieniam katalog, w którym znajdują się rozszerzenia. Niestety, wyświetla się błąd:
Kod
Warning: filemtime() [function.filemtime]: stat failed for ./style/chat/body.html in [...]lib\content.php on line 100
Teraz popatrzmy na Front Kontroler (na sam koniec). Tam sprawdzam, czy główny szablon (layout) jest skompilowany, wywołując metodę compile(), która wykorzystuje te 2 zmienne $content->dir i $content->cacheDir.

Jak rozwiązać problem, aby móc trzymać szablony rozszerzeń w osobnych katalogach? Może w ogóle inaczej zorganizować cały proces dołączania szablonów?

Jest jeszcze drugi, trochę mniej istotny problem. W domyślnym katalogu znajdują się szablony współdzielone (np. dla komentarzy). Gdyby tak rozszerzenia chciały je wykorzystywać? Chociaż mogą je też skopiować do własnego katalogu...


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Hmmm wedlug mnie masz tam troche zbednych rzeczy np takie cos jak dodawanie styli css i plikow js i w sumie funkcja info() tez nie wiem po co jest.

Nie rozumiem zabardzo co ci nie dziala ja to robie tak mam takie foldery w glownym folderze cms(sam pisze nowego):
-grafiki/
-system/
-theme/

Potem katalog system/ przechowywuje plik konfiguracyjny bazy danych,klase do systemu szablonow i ogolne funkcje cms'a, potem jest w niej podkatalog /modules/ gdzie sa glowne pliki z zawartoscia moduly i pliki z funkcjami kazdego moduly i tutaj mam jeszcze podkatalog gdzie sa pliki konfiguracyjne kazdego modulu.

POtem jest magiczny katalog /theme/ ktory dochodzi do czegos takiego /theme/new/styl/ i teraz w podkatallogu styl/ sa inne katalogi ktore maja nazwe kazdego stylu czy theme czy jak to tam mozna nazwac jakie mozna miec na stronie a w kazdym z nich mam pliki:
-styl.css
-tpl1.tpl

Ktory sa potem wypelniane poprzez system szablonow i wyswietlane i teraz moglbys zrobic tak jak ja w bazie przechowywujesz nazwe stylu i wtedy dajesz taka sama sciezke z takimi samymi plikami tylko zmienasz nazwe katalogu ze stylem ktory jest w bazie, no chyba ze cie zle zrozumialem.

EDIT:
Chodzi mi o cos takiego gdy robisz include() lub wypelniasz szablon
  1. <?php
  2. include('./theme/new/styl/'.$tab['zmienna_z_bazy_z_nazwa_podkatalogu'].'/plik_tpl.tpl');
  3. ?>


Ten post edytował marcio 19.10.2008, 11:20:11


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
WebCM
post
Post #3





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Rozwiązałem problem poprzez dodatkową funkcję Content :: path. Jeśli nie ma szablonu pliku w katalogu $content->dir, system szuka go w domyślnym katalogu skórki. Niestety, po dodaniu obsługi rozszerzeń pojawia się kolejny problem ze ścieżkami. Kod: http://pastebin.pl/6835

Przykładowa zawartość folderu STYLE:
* admin - szablony panelu admina
* default - szablony wortalu

Opis problemu
Panel admina ustawia zmienne:
Kod
$content->dir = './style/admin/';
$content->cache = './cache/admin/';
Następnie na podstawie adresu URL ładuje moduł rozszerzenia plugins/chat/admin.php. Chat trzyma swoje szablony w swoim własnym katalogu, więc ustawia zmienne:
Kod
$content->dir = './plugins/chat/style/';
$content->cache = './cache/chat/';
W efekcie główny szablon panelu admina nie wyświetli się, bo została zmieniona ścieżka! System szuka go w plugins/chat/style, a następnie style/default, zaś znajduje się on w style/admin.

Może źle, że rozdzielam szablony panelu admina od szablonów witryny, ale rozwiązanie ma też plusy.

Które wyjście z tej sytuacji jest najkorzystniejsze? Dodać jeszcze jeden warunek, aby szukał plików w katalogu 'admin'? Tylko nie będzie to zbyt elastyczne. Może dodatkowe zmienne ze ścieżką do plików i ich cache? A jeśli potem będzie ich więcej? Może po prostu umieszczać szablony rozszerzeń wyświetlane w PA w katalogu admin?

Ten post edytował WebCM 8.04.2009, 21:44:15


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
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 Aktualny czas: 19.08.2025 - 06:55