Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dołączanie szablonów z innych ścieżek
Forum PHP.pl > Forum > PHP
WebCM
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...
marcio
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. ?>
WebCM
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?
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.