Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [Szablony] Pobieranie zmiennych
Asmox
post
Post #1





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Witam,
wpadłem na oryginalną koncepcję średniej strony internetowej jednocześnie wykorzystując szablon, a w plikach dołączeniowych nadawać zmiennym odpowiednie wartości. Niestety mam pewien problem, mianowicie mając taki kod:
  1. <!DOCTYPE
  2. html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  3. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  4. <!--DOCTYPE-->
  5. <html>
  6. <head>
  7. <title><?php echo "Zmienna $title"; ?></title>
  8. </head>
  9. <body>
  10. <?php
  11. if (!empty($_GET['page'])) {
  12. include ($_GET['page'].".html");
  13. }
  14. ?>
  15. </body>
  16. </html>

Dużym problemem jest to, że zmienna $title jest w plikach dołączanych i w związku z tym zanim się ona załaduje, tytuł jest już gotowy ale bez tej zmiennej. Czy ma ktoś z was pomysł na rozwiązanie tego problemu ?
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #2





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Eee, jak zmienna może być ustawiana w .html ? Chyba, że źle zrozumiałem. Popraw bezpieczeństwo - takie coś jak include ($_GET['page'].".html"); to spora dziura w kodzie.
PS. Po co wyświetlasz napis "Zmienna ..."? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
marcio
post
Post #3





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

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


Nom daj tam jakis basename() chociaz albo statyczna tablice plikow do include() a jak ci sie nie chce podaj adres www strony to zawsze jak mi sie bedzie nudzic mozna cos pokombinowac (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Asmox
post
Post #4





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Znaczy jeśli chodzi o includowanie plików, to te linijki miały po prostu oznaczać, że ten kod ma się tam pojawić (zastosowałem już mechanizmy zabezpieczające i tak dalej, tylko wpisałem taki prosty kod, aby wszystko było przejrzyście). Więc o to się nie musicie martwić. Bardziej mnie martwi jak wyciągnąć tą zmienną.
Ten napis Zmienna wpisałem, ponieważ na początku myślałem, że nic się w ogóle nie chce pojawić. Nie wiem, czy dobrze mnie zrozumieliście, więc może wytłumaczę jeszcze raz:
Każdy plik, którego mogę wrzucić treść do szablonu ma na samym początku zmienną z opisem tytułu. Nie mogę jednak go wgrać, ponieważ najpierw jest pobierana zmienna z tytułem (której jeszcze tak naprawdę nie ma), a potem jest includowana treść razem ze zmienną.

Mephistofeles o .html też się nie martw - w konfiguracji serwera dopisałem linijkę przetwarzającą kod php także w plikach z rozszerzeniem .html

Sorry, że odświeżam, ale jakoś nikt mi nie odpowiedział, a problem został :/ . Żeby nie było, że chcę gotowca, wymyśliłem parę rozwiązań.

ROZWIĄZANIE I
Utworzenie pliku na przykład strona.phtml, w którym są zmienne, używane w szablonie:
1. Przez zmienne:
  1. <?php
  2. $strona_title = "Przykładowy tytuł strony";
  3. $strona_meta_content = "cośtam cośtam cośtam";
  4. $strona_content = "Tekst, linijka 1
  5. Linijka 2
  6. Linijka 3";
  7. # Albo jeśli tak nie można to
  8. # $strona_content = "Tekst, linijka 1 "
  9. # . "Linijka 2 "
  10. # . "Linijka 3 ";
  11. ?>

2. Przez tablice asocjacyjne
3. Przez utworzenie klasy page, i różnych fajnych pól/metod

ROZWIĄZANIE II
Polegałoby na tym, aby wszystkie potrzebne rzeczy, które mogą się różnić, trzymać w bazie danych, na przykład tabeli pages
Kod
|page_id|page_title|page_content|
itd...
1. Dzięki klasie pobierać te dane i potem je wrzucać w odpowiednie miejsca.
2. Używać statycznych funkcji zwracających dane. albo wypisujących je w odpowiedniej postaci.

Które rozwiązanie by nie było najlepsze, najchętniej (nie koniecznie) zrobiłbym to używając OOP, ponieważ wydaje mi się to dobrym rozwiązaniem.

A może wy macie jakiś sposób ?

Ten post edytował Asmox 12.03.2009, 22:22:37
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie możesz po prostu wdrożyć modelu MVC?
Go to the top of the page
+Quote Post
Asmox
post
Post #6





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


ok tylko nie wiem za bardzo jak to zrobić. Nie mów mi co to mvc, bo to już akurat wiem, nie wiem tylko jak wykorzystać ten model w moim przykładzie
@EDIT:
Nie chcę być niemiły, ale jeżeli w końcu niewiadomo jak z tym MVC, to powiedzcie coś o moich pomysłach (te, co napisałem wyżej).
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
ok tylko nie wiem za bardzo jak to zrobić. Nie mów mi co to mvc, bo to już akurat wiem

Jedno przeczy drugiemu...

Cytat
Nie chcę być niemiły, ale jeżeli w końcu niewiadomo jak z tym MVC

A nie pomyślałeś, że są Święta i nie każdy siedzi przed PC? Poza tym, mogłeś za ten czas spokojnie liznąć podstaw, co to jest ten "MVC" w praktyce. A właśnie on jest rozwiązaniem Twojego problemu. Podpowiem: właściwie, to próbujesz go zrealizować, ale najpierw poczytaj co nieco.
Go to the top of the page
+Quote Post
MWL
post
Post #8





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

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


MVC jest proste, najlepiej przyjrzyj się istniejącym frameworkom.
Go to the top of the page
+Quote Post
Asmox
post
Post #9





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Powiem tak: Wiem co to jest model MVC, jak działa i gdzie się przydaje, wiem co to jest Zend Framework, ale nie wiem jak wykorzystać te narzędzia w praktyce. Czy moglibyście mi podpowiedzieć, jak można by było to zrobić, albo podali jakiś tutorial do FW?
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czy moglibyście mi podpowiedzieć, jak można by było to zrobić, albo podali jakiś tutorial do FW?

Cytat
najlepiej przyjrzyj się istniejącym frameworkom.
Go to the top of the page
+Quote Post
guitarnet.pl
post
Post #11





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

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


na poczatek przeklep linijka po linijce i zobacz jak dziala potem stanie sie jasnosc

http://wortal.php.pl/phppl/wortal/artykuly...e_aplikacji/mvc
Go to the top of the page
+Quote Post
Asmox
post
Post #12





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


No już coś kojarzę coraz lepiej z tym MVC, ale na razie próbuję jeszcze robić to po swojemu, chociaż niektórzy mówią, że moje "dzieła", upodabniają się do MVC. Tak więc jestem chyba na dobrej drodze. Wiem, że zaraz ktoś znowu wyskoczy z pomysłem "daruj sobie, obejrzyj ZF/Symfony/KOHANA/(tu wstaw nazwę swojego ulubionego frameworka)", ale na razie jakoś nie potrafię.
Ostatnio doznałem pewnego olśnienia, mianowicie coś takiego:
(1) Tworzymy plik szablonu, dając ewentualne zmienne w nawiasy klamrowe, na przykład: <title>{title}</title>.
(2) Tworzymy plik tekstowy/htmlowy/inny według zasady, że pierwsza linijka będzie traktowana jako tytuł strony, pozostała jako treść
(3) W pliku głównym includowany jest plik treści i renderowany, czy coś takiego, z plikiem szablonu, zamieniając zmienne {var} w tekst z pliku.

Chciałbym usłyszeć, co o tym twierdzicie, jakie są wady tego rozwiązania itd... chociaż mam wrażenie, że będzie ich dużo :|
P.S. Właśnie sobie poczytałem coś o Smarty, z którego zaczerpnąłem szablony: http://wortal.php.pl/phppl/wortal/artykuly...y_szablonowania
Wygląda na to, że mój pomysł nie był w ogóle dobry. Może spróbowałbym te strony zrobić podejściem obiektowym...? Sorry, że marudzę, ale na razie jakoś mnie odpycha od frameworków.

Ten post edytował Asmox 1.06.2009, 19:26:00
Go to the top of the page
+Quote Post
erix
post
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Sorry, że marudzę, ale na razie jakoś mnie odpycha od frameworków.

Prędzej czy później MVC/frameworki Cię po prostu czekają...

Cytat
"daruj sobie, obejrzyj ZF/Symfony/KOHANA/(tu wstaw nazwę swojego ulubionego frameworka)", ale na razie jakoś nie potrafię.

To poszukaj jakichś prostych implementacji MVC typu TinyMVC, etc.
Go to the top of the page
+Quote Post
Asmox
post
Post #14





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Już żeby nie zakładać nowego tematu to będę dalej pisał tutaj:
W ogóle nie rozumiem podejścia MVC dlatego, że nie umiem stworzyć kontrolera. Gdzie bym nie szukał, to albo piszą jak zrobić MVC dla newsów albo łączą niektóre elementy tego wzorca ze sobą (na przykład na php.pl). Bardzo chciałbym sobie jakoś z tym poradzić, ale nie wiem paru rzeczy:
1. Na czym polega ta cała "wymienność widoków i kontrolerów"?
2. Skąd kontroler ma wiedzieć, którego modelu użyć do pobrania danych dla widoku?
3. Czy jedynym zadaniem akcji zainkludowanie widoku i wyświetlenie go na stronie?
Go to the top of the page
+Quote Post
erix
post
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
1. Na czym polega ta cała "wymienność widoków i kontrolerów"?

Masz model, który wyciąga dane z pliku. Ale masz inny kaprys i zmieniasz na taki model, który wyciąga z bazy. Co do widoków - jeden generuje Ci HTML, chcesz RSS? Zostawiasz kontroler i modele te same, zmieniasz widok na generujący XML.

Cytat
2. Skąd kontroler ma wiedzieć, którego modelu użyć do pobrania danych dla widoku?

To piszesz w kodzie kontrolera. [;

Cytat
3. Czy jedynym zadaniem akcji zainkludowanie widoku i wyświetlenie go na stronie?

Nie - załadowanie modeli, przetworzenie parametrów zapytania, przygotowanie zmiennych dla widoku. To w takim skrócie. [;
Go to the top of the page
+Quote Post
MWL
post
Post #16





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

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


Kiedyś też miałem z tym straszne problemy (każdy kiedyś zaczynał). Więc polecam Ci odwiedzić stronę http://framework.zend.com i obejrzeć sobie video tutorial, od razu zrozumiesz jak to działa. Dodatkowo odwieź phpedię, jest tam to całkiem banalnie wyjaśnione.

A najprosciej.

Zacznij od pliku php który za pomocą odpowiednich parametrów adresu, czy to GET czy ścieżka php (index.php/sraka), wywołaj odpowiedni kontroller - czyli to czym się zajmuje aplikacja i tym co przetwarza ci zadania, czyli pobiera ci modele (po prostu includuje klasy modelu i używa je), i rysuje odpowiednią stronę za pomocą pliku z kodem html i tym co każde napisać konrtoller. Proste? mam nadzieję że zrozumiałeś (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Asmox
post
Post #17





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Jeszcze mam pytanie w sprawie tego co napisał erix.
Cytat
Masz model, który wyciąga dane z pliku. Ale masz inny kaprys i zmieniasz na taki model, który wyciąga z bazy. Co do widoków - jeden generuje Ci HTML, chcesz RSS? Zostawiasz kontroler i modele te same, zmieniasz widok na generujący XML.

Czyli jeden kontroler może obsługiwać tylko jeden model i tylko jeden widok ?

Cytat
Zacznij od pliku php który za pomocą odpowiednich parametrów adresu, czy to GET czy ścieżka php (index.php/sraka), wywołaj odpowiedni kontroller - czyli to czym się zajmuje aplikacja i tym co przetwarza ci zadania, czyli pobiera ci modele (po prostu includuje klasy modelu i używa je), i rysuje odpowiednią stronę za pomocą pliku z kodem html i tym co każde napisać konrtoller. Proste? mam nadzieję że zrozumiałeś (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Wybacz, ale nic nie zrozumiałem. Załóżmy że mam stronę i chcę zastosować na niej MVC.
Ponieważ nagłówek i stopka mają być w każdym przypadku takie same, chciałbym je przenieść do innego pliku, na przykład zrobić taki nagłówek:
  1. <title><?php print ($this->view->title) ?></title>
  2. </head>

Wtedy w widoku miałbym coś takiego:
  1. <?php require_once("header.phtml") ?>
  2. <h1>Witamy na stronie głównej</h1>


Nie wiem, czy model miałby się zajmować załączaniem plików, czy nie, ale mógłby mi ktoś pokazać w jaki mniej więcej sposób to zrobić? (W sensie pokazać co ma być w modelu co w kontrolerze i jakie funkcje) Bo ja sam już się w tym pogubiłem

Ten post edytował Asmox 20.06.2009, 21:04:14
Go to the top of the page
+Quote Post
erix
post
Post #18





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czyli jeden kontroler może obsługiwać tylko jeden model

Nie - masz np. kontroler strony głównej - wczytujesz model newsów, użytkownika, itp.

Cytat
i tylko jeden widok ?

Generalnie jeden, ale można również stosować zagnieżdżenia; wszystko zależy od implementacji.
Go to the top of the page
+Quote Post
Asmox
post
Post #19





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Zobaczcie jeszcze na mój edit

Ten post edytował Asmox 20.06.2009, 21:05:24
Go to the top of the page
+Quote Post
erix
post
Post #20





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Nie wiem, czy model miałby się zajmować załączaniem plików, czy nie, ale mógłby mi ktoś pokazać w jaki mniej więcej sposób to zrobić? (W sensie pokazać co ma być w modelu co w kontrolerze i jakie funkcje) Bo ja sam już się w tym pogubiłem

No to przecież tytuł jest globalny dla strony, nie?

Tak w ogóle, to możesz stosować coś takiego w akcji kontrolera:
  1. <?php
  2. $this->view['title'] = config::$pageTitle.' - podstrona';
  3. ?>


A jeśli chodzi o nagłówki, itp - to już zależy od widoku; możesz dołączać.

PS. Do widoku przydaje się extract" title="Zobacz w manualu PHP" target="_manual pod warunkiem, że działa w trybie tworzenia referencji. [;
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 16:43