Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> System szablonów i parsowanie kodu php, Prawie działa, ale nie do końca
Simson
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 25.05.2010

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


Witam serdecznie wszystkich użytkowników! Jest to mój pierwszy post, więc mam nadzieję, że wybrałem dobry dział. Mój problem polega na tym, iż korzystam z "innego" systemu szablonów - mam na myśli, że nie są to smarty, czy OPT, tylko mniej skomplikowany, a za razem zaawansowany system. I próbuję uruchomić na nim kod php, który includuje system newsów na stronie głównej. Obecnie wygląda to tak: http://irex-gliwice.pl/ Jak widać kod działa poprawnie, ale nie wyświetla się na przewidzianym dla niego miejscu oraz tle. Dosyć długo już próbuję rozwiązać ten problem, niestety bezskutecznie, dlatego też zwracam się do was z prośbą o pomoc. Załączam też plik z mojej www.

1) Klasa do obsługi szablonów
  1. <?
  2. class CTemplate
  3. {
  4. var $content;
  5. var $keywords;
  6. var $url;
  7.  
  8. function CTemplate($url='')
  9. {
  10. $this->url = $url;
  11. $this->keywords = array();
  12. if ($url)
  13. $this->code=file_get_contents($url);
  14.  
  15. }
  16.  
  17. function Load($url)
  18. {
  19. $this->code=file_get_contents($url);
  20. }
  21.  
  22. function Clear()
  23. {
  24. unset($this->keywords);
  25. $this->keywords = array();
  26. }
  27.  
  28. function Add($keyword, $text)
  29. {
  30. $this->keywords[$keyword] = $text;
  31. }
  32.  
  33. function Get()
  34. {
  35. reset($this->keywords);
  36. while (list ($key, $val) = each ($this->keywords))
  37. $this->code = str_replace($key, $val, $this->code);
  38. return $this->code;
  39. }
  40. }
  41. ?>


2)Plik index.php, dodałem w nim funkcję eval
  1. <?
  2. include('library/ctemplate.php');
  3.  
  4. $strona = new CTemplate('template/CSite.html');
  5.  
  6. switch($HTTP_GET_VARS['site'])
  7. {
  8. default:
  9. case 'start':
  10. $strona->Add('{SRODEK}', eval('?>' . file_get_contents('template/CSiteStronaGlowna.html'). '<?'));
  11. break;
  12. case 'galeria':
  13. $strona->Add('{SRODEK}', file_get_contents('template/CSiteGaleria.html'));
  14. break;
  15. case 'o_nas':
  16. $strona->Add('{SRODEK}', file_get_contents('template/CSiteONas.html'));
  17. break;
  18. case 'kontakt':
  19. $strona->Add('{SRODEK}', file_get_contents('template/CSiteKontakt.html'));
  20. break;
  21. }
  22. $strona->Add('{MENU}', file_get_contents('template/CSiteMenu.html'));
  23. $strona->Add('{INFO}', file_get_contents('template/CSiteInfo.html'));
  24.  
  25. echo $strona->Get();
  26. ?>
Go to the top of the page
+Quote Post
jaslanin
post
Post #2





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


eval nie przekazuje się przez wartość, wykonuje się dokładnie w miejscu jego wywołania. Czyli w Twoim przypadku na początku strony.

Musisz sobie to logicznie jakoś inaczej rozplanować, np. za pomocą include.


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Simson
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 25.05.2010

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


No, ale właśnie nie bardzo wiem co z tym zrobić, ponieważ nie mogę zaincludować bezpośrednio kodu php w pliku html, bo parser nie może go obsłużyć.
Go to the top of the page
+Quote Post
jaslanin
post
Post #4





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


Twoja klasa się nie nadaje do tego co chcesz zrobić, więc musisz ją przerobić, nie wiem co masz w tych wszystkich plikach które masz opisane w kodzie ale wg. mnie to mogło by wyglądać mniej więcej tak:

plik index.php
  1. <?php
  2.  
  3. class easyTemplate
  4. {
  5.  
  6. function setAktualnaStrona ($aktualnaStrona)
  7. {
  8.  
  9. $this->aktualnaStrona = $aktualnaStrona;
  10. }
  11.  
  12. function setDozwoloneStrony ($dozwoloneStronArr)
  13. {
  14.  
  15. $this->dozwoloneStrony = $dozwoloneStronArr;
  16. }
  17.  
  18. function add ($name, $value)
  19. {
  20.  
  21. $this->zmienne[$name] = $value;
  22. }
  23.  
  24. function make ()
  25. {
  26.  
  27. if (in_array($this->aktualnaStrona, $this->dozwoloneStrony))
  28. {
  29. if (count($this->zmienne)>0)
  30. {
  31. foreach ($this->zmienne as $klucz => $wartosc)
  32. {
  33. $$klucz = $wartosc;
  34. }
  35. }
  36. include "strony/$this->aktualnaStrona.php";
  37. }
  38. }
  39. }
  40.  
  41. $easyTemplate = new easyTemplate();
  42.  
  43. $easyTemplate->setDozwoloneStrony(array('index' , 'galeria' , 'kontakt'));
  44. $easyTemplate->setAktualnaStrona($_GET['strona']);
  45. $easyTemplate->add('test', 'bbbbbbb');
  46. $easyTemplate->make();
  47.  
  48. ?>



plik strony/index.php
  1. sdasdasd
  2.  
  3. <?= $test ?>


To taki przykład, do bardziej zaawansowanych rzeczy polecam się z zapoznaniem z jakimś frameworkiem np. Kohana (proty do nauki, najlepiej w wersji 2.3.4 bo wersja 3 ma jeszcze kiepską dokumentacje)


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Zyx
post
Post #5





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Simson -> właśnie od tego są gotowe systemy szablonów, byś nie musiał wynajdować koła od zera tym bardziej, że nie radzisz sobie z tym. Po pierwsze, dlaczego piszesz pod PHP4, kiedy od 6 lat jest PHP5, po drugie szablony z samym podstawianiem bloków na wartości nie mają absolutnie żadnego sensu, po trzecie bardziej wykonanie bardziej zaawansowanych rzeczy umożliwia kompilacja szablonów do postaci kodu PHP i uruchamianie tego kodu, ale żeby pisanie kompilatora miało sens, to trzeba naprawdę wiedzieć, co się robi. Inaczej nic nie polepszysz, a jedynie pogorszysz sprawę, ponieważ zaprojektowanie sensownego języka szablonów nie jest takie proste, jak się większości ludzi wydaje. Z obiektówką u Ciebie średnio, z tego co widzę, więc może na początek pobaw się jakimś systemem z PHP jako językiem szablonów, a później czymś przyzwoitym, np. OPT lub PHPTAL.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
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: 20.08.2025 - 12:30