Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konstrukcja cms'a jak rozwiazac
Forum PHP.pl > Forum > PHP
Sh4dow
nie wiem czy pisac tutaj czy na Pro, ale tutaj wiecej ludzi zaglada :]

Mam problem, poszukuje rozwiazania, nie konkretnych skryptow.
pisze cms'a, niestety nie na obiektach, powodem jest niewystarczajaca wiedza i za malo czasu zeby sie nauczyc.
udalo mi sie zrobic zbiór przydatnych funkcji, konfiguracje, podpiolem smarty aby na koncu wyswietlal wszystko. Ale po drodze okazalo sie ze sposob, buforowania strony, aby ja przeniesc w zmiennej do smarty, okazal sie felerny. Jedynym powodem było to ze przy module logowania, ciastka nie byly zapisywane, jak pozniej przemyslalem, sesje takze nie byly zapisywane.
Przy proceduralnej strukturze skryptu, nie znalazłem sposobu na wykozystanie smarty lub jakiegos systemu szablonow, na ominiecie buforowania wyniku modulow, bo zawsze trzeba je przekazac jako zmienna do systemu szablonow.
Teraz szukam odpowiedzi, jak wykozystac system szablonow, nie kozystajac z bufora, miejac mozliwosc rejestracji sesji i ciastek, miec mozliwosc modolow, nie robiac tego na obiektach. i nie robic systemu szablonow jak w php nuke na funkcjach.
Wszystkie pomysly mile widziane. Moze w miedzy czasie cos naprowadzi mnie na trop dobrej motody, z gory dziekuje za wypowiedzi.

P.S. mam nadzieje ze nie za bardzo namieszalem biggrin.gif
Ace
hm... ja mialem podobny problem. Pisze aktualnie CMS'a obiektowo, czyli jedna klasa główna [ silnik ] a reszta jako moduły, tylko narazie nie wiem za bardzo jak mogl bym zrobic includowanie modulow automatycznie - czyli jak wrzuce do katalogu module/ plik mod.news.php to bede mogl urzywac modulu news, ale niewazne, jakos sobie poradze z tym. Mialem problem z tworzeniem zmiennych w sesji w obiekcie, ale rozwiazalem ten problem troche inaczej. Pewnie sa latwiejsze sposoby, ale ... napisalem klase ktora np: po zalogowaniu sie na strone - w obiekcie silnik, to dodaje mi wpis do bazy danych, w obiekcie jest wtedy zmienna pod postacia $this->username [ czyli nazwa urzytkownika ], a poza obiektem juz w index.php urzywam
[php:1:4fe36a64b4]<?php
$silnik = new silnik($db);
if ( $silnik->username )
$smarty->assign('USERNAME',$silnik->username);
?>[/php:1:4fe36a64b4]

pewnie da sie to zrobic jakos latwiej, ale ja nie potrafilem i tak ominolem ta bariere. Teraz sie mecze z zaprojektowaniem modulow, lecz wczesniej jeszcze panel konfiguracyjny zostaje do napisania i zaprojektowania. Ciezka sprawa ten CMS.
Sh4dow
właśnie o to chodzi ze nie dam razy napisać slinika w obiektach. Jesli chodzi o to jak zrobi moduły, administracje, to nie ma problemu, ale wyswietlanie komplikuje mi wszystko. Chcialbym pozostac przy smarty, lub jakims innym sysemie szablonow, z oczywistych powodów wygodu tworzenia owych layoutów. Ale z tego co na razie mysle to czeka mnie porazka w tym momencie.
Chyba ze ktoś mnie poratuje jakimś rozwiazaniem biggrin.gif
Ace
hm.. faktycznie, na obiektach troche latwiej napisac silnik... wiec moze sproboj tak... jak chcesz sprawdzic czy urzytkownik jest zarejestrowany to zrob baze danych
id|sid|login|time
gdzie :
sid = session_id
login = nazwa urzytkownika
time = czas zalogowania utworzony np : time()

a potem robisz funkcje ktora sprawdza czy w bazie danych jest taki wpis tzn:
[sql:1:09f876d845]
SELECT login FROM urzytkownicy WHERE sid="$session_id"
[/sql:1:09f876d845]
gdzie $session_id musi byc identyfikatorem sesji urzytkownika...
i masz wtedy login urzytkownika ktory zarejestrowales inna funkcja wczesniej w trakcie logowania...

to jest praktycznie to co ja napisalem w poprzednim poscie, ale przerobione na funkcje... musisz jeszcze za kazdym otworzeniem strony sprawdzic czy urzytkownik z dana sesja istnieje, jak nie to tworzysz wpis, jak istnieje to zmieniasz time... i funkcje czyszczaca baze danych piszesz, zeby nie zostawiac smieci.. sprobuj w ten sposob
Sh4dow
ace zrobilem obejscie chyba mojego problemu, lecz przez to tworzenie modolow bedzie duzo trudniejsze, a raczej bardziej skomplikowane. Poprostu oddziele warstwe wyswietlania od warstwy rejestracji sesji, tworzenia ciastek i wszystkiego co moze byc pochloniete i nie oddane przez bufor.
modul bedzie skladac sie z plikow:
index.php - wyswietlanie modulu
admin.php - panel administracyjny
pre_index.php - funckje do wykonania przed wyswietleniem modulu
pre_admin.php - funkcje do wykonania przed wyswietleniem panelu administracyjnego

tutaj teraz trzeba uwarzac, bo odpowiedznie pary plików (index pre_index oraz admin pre_admin) nie kozystaja z siebie nawzajem ale musza sie uzupelniac. to takie moje rozwiazanie. Nastepne bedzie napisaniem nowego silnika na obiektach biggrin.gif
seaquest
a ja zrobilbym to tak:

[php:1:9fddb35bc3]<?php
// kod php strony
ob_start();
include("/modules/news.php");
$content = ob_get_clean();
// dalsza czesc strony
$smarty->assign("CONTENT",$content);
?>[/php:1:9fddb35bc3]

moze to zadziala
Sh4dow
seaquest właśnie dlatego musialem zrobic podzial. mialem prawie tak samo. Sproboj w includowanym pliku dodac sobie funkcje setcookie i zobacz czy utworzylo ci sie ciastko z watoscia. gdyby nie to to bym pozostawil to tak jak mialem
seaquest
No mi się tworzy, bo po prostu niczego wcześniej nie wyświetlam. Wszystko co ma zobaczyć user jest najpierw zbierane przez klasę Template (mojej własnej roboty) i wyświetlane dopiero na samym końcu po wykonaniu WSZYSTKICH operacji.
Cudi
A ja pozwalam modułowi korzystać z systemu szablonów, tak więc jedyne echo pojawia sie w metodzie print_output() klasy template winksmiley.jpg Na początek robie podstawowy szablon, page.tpl, i w nim tylko includuje header i footer jeśli dyrektywa standalone nie jest ustawiona na 1 a między nimi szablon modułu. Nazwa pliku nie jest określona, ponieważ w szablnie odwołuje sie do plików przez handlery, a ich ustawieniam zajmuje sie już silnik. Co dzieki temu zyskuje? Mam bardzo dużą dowolność, bo w momencie kiedy wykonuje sie kod modułu jeszcze nic nie zostało wyświetlone, więc moge ingerować w ustawione wcześniej zmienne szablonów, moge pozbyć sie nagłowka i stopki jeśli zajdzie taka potrzeba itd. I chyba o to chodzi. Po wykonaniu kodu modułu ustawiane są jeszcze zmienne szablonu których moduł nie powinien zmieniać, leci sobie parse i print_output i strona wygenerowana smile.gif
seaquest
No czyli, ze cookies powinny ci działać.... bo ja mam dokładnie tak samo i wydaje mi się, że działają. A poza tym ja mam też klasę Cookie i jej metodę Set. Ona sprawdza czy headery zostały już wysłane. Jak nie, to ustawia cookie za pomocą php'a, a w przeciwnym wypadku za pomocą JS.
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.