ďťż

[php] problem z systemem szablonów

       

Podstrony


telcocafe

znalazłem sobie taki parser:
<?php class simpleTemplate { var $toChange; var $str; function simpleTemplate() { $this -> toChange = array(); $this -> str = ''; } function setTemplate($ATemplate) { $this -> str = $ATemplate; } function loadFromFile($AFileName) { $this -> str = file_get_contents($AFileName); } function addChange($AKey, $AValue) { $this -> toChange[$AKey] = $AValue; } function executeChanges() { if (count($this -> toChange) > 0) { $tmpKeys = array_keys($this -> toChange); foreach ($tmpKeys as $currentKey) { $this -> str = str_replace($currentKey, $this -> toChange[$currentKey], $this -> str); } } return $this -> str; } } ?>

teraz daje to:
include_once('parser.php'); $st = new simpleTemplate(); $st -> loadFromFile('templates/template/szablon.tpl'); $st -> addChange('{title}', page_title); $st -> addChange('{login_form}', login_form"); $st -> addChange('{banner}', page_banner); $st -> addChange('{content}', page_content); $st -> addChange('{menu_left}', page_menu_r); $st -> addChange('{menu_right}', page_menu_l); $st -> addChange('{footer}', page_footer); echo $st -> executeChanges();

wszystko jest ok oprócz tego ze znaczniki php są pokazywane jako html
tzn jezeli dam przykładowo stałej login_form wartość <? include("loginform.php") ?> to na stronie pojawi mi się napis <? include("loginform.php") ?> (kiedy sie podejrzy zrodło to jest to samo)
Co mam robić?



skąd ty masz ten parser?


znalazłem sobie taki parser:
Co mam robić?

Uzywać <?php zamiast <? .


Uzywać <?php zamiast <? .

to samo

marines:
z google ;]
z jakiegoś forum



to logiczne że nie z drzewa :> ale własnie chodzi o konkretne źródło

Jak chcesz zrobić w ten sposób musisz zwrócić:

return eval($this->str);

ale jakoś nie polecam tej opcji


Jak chcesz zrobić w ten sposób musisz zwrócić:

return eval($this->str);

ale jakoś nie polecam tej opcji


jak tak robie to wywala mi błąd:
Parse error: parse error, unexpected '<' in C:\Program Files\WebServ\httpd\v\parser.php(40) : eval()'d code on line 2

Niedokładnie przepisałeś. Ma być return eval($this->str).
Użytkownik pbnan edytował ten post 31 październik 2006, 18:43

Niedokładnie przepisałeś. Ma być return eval($this->str).

dobrze przepisałem omg:
twoje: return eval($this->str);
kodie: return eval($this->str);

widzisz jakąś różnice? bo ja nie

Tak, widzę to, co Ci zwraca parser...
Jeśli nie tu, to w innym miejscu.

@down: teraz sprawdziłem, właśnie w tym miejscu, w miejscu zwracania masz coś pokombinowane. Tak mówi parser.
Użytkownik pbnan edytował ten post 31 październik 2006, 19:31

Tak, widzę to, co Ci zwraca parser...
Jeśli nie tu, to w innym miejscu.


no to w którym?

Parser sie wywala bo znowu jest otwarcie tagów <?php.
Po prostu - nie jest to potrzebne. Zostaw samo include. (i podobnie rób w innych miejscach).

ew. zamiast eval użyj:
ob_start(); include($this->tpl); $contents = ob_get_contents(); ob_end_clean();


Parser sie wywala bo znowu jest otwarcie tagów <?php.
Po prostu - nie jest to potrzebne. Zostaw samo include. (i podobnie rób w innych miejscach).


teraz jest taki problem:
mam taki szablon:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <HEAD> <TITLE>{title}</TITLE> <META http-equiv="Content-Type" content="text/html; charset=windows-1250"> </HEAD> <BODY> <table border="0"> <tr><td width="25%">{login_form}</td><td>{content}<td></tr> </table> </BODY> </HTML>

a jak wyświetlam strone to mam coś takiego:

FORMULARZ LOGOWANIABANNERTRESCMENU PRAWEMENU LEWESTOPKA
1 1


żródło:
FORMULARZ LOGOWANIABANNERTRESCMENU PRAWEMENU LEWESTOPKA<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <HEAD> <TITLE>Kochan Company</TITLE> <META http-equiv="Content-Type" content="text/html; charset=windows-1250"> </HEAD> <BODY> <table border="0"> <tr><td width="25%">1</td><td>1<td></tr> </table> </BODY> </HTML>
Użytkownik PiKey edytował ten post 01 listopad 2006, 09:23
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.