Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [funkcja] Prosty skrypt do szablonow, {varA} {var{varB}} {if(varC)} {fi()}
Bastion
post 18.02.2005, 21:57:02
Post #1





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


napisałem wstępną werjse funkcji do obsługi prostych szablonów obsługująca warunki
mam nadzieje na ostrą krytyke

funkcja :
  1. <?
  2.  
  3.  function tpl_parse(&$tpl_table, &$var_array)
  4.  {
  5. $parseLevel = 0;
  6. $parseArray[$parseLevel] = true;
  7. reset($tpl_table);
  8. while (list($line, $content) = each ($tpl_table))
  9. {
  10. $offset = 0; $new_line = &#092;"\";
  11. while(true)
  12. {
  13. $open_tag_pos = strpos($content, &#092;"{\", $offset);
  14. if ($open_tag_pos === false)
  15. {
  16. break;
  17. }
  18. $close_tag_pos = strpos($content, &#092;"}\", $open_tag_pos);
  19. if ($close_tag_pos === false)
  20. {
  21. break;
  22. }
  23. $temp_content = substr($content,0,$close_tag_pos);
  24. $open_tag_pos = strrpos($temp_content,&#092;"{\",$offset);
  25. $var = substr($content,$open_tag_pos+1,$close_tag_pos - $open_tag_pos-1);
  26. if ($parseArray[$parseLevel]) { $new_line.= substr($content, $offset,$open_tag_pos-$offset); }
  27. $function_pos = strpos($var,&#092;"(\");
  28. if ($function_pos<>0)
  29. {
  30. $function = substr($var,0,$function_pos);
  31. if ($function==&#092;"if\")
  32. {
  33. $var = substr($var,$function_pos+1,-1);
  34. $true = $parseArray[$parseLevel] && $var_array[$var];
  35. $parseLevel++;
  36. $parseArray[$parseLevel] = $true;
  37. } else
  38. if ($function==&#092;"fi\")
  39. {
  40. $parseLevel--;
  41. }
  42. } else
  43. if (isset($var_array[$var]))
  44. {
  45. if ($parseArray[$parseLevel]) { $new_line .= $var_array[$var]; }
  46. } else
  47. {
  48. if ($parseArray[$parseLevel]) { $new_line .= &#092;"{\".$var.\"}\"; }
  49. }
  50. $offset = $close_tag_pos + 1;
  51. }
  52. if ($parseArray[$parseLevel]) { $new_line.=substr($content, $offset); }
  53. $out .= $new_line;
  54. }
  55. return $out;
  56.  }
  57.  
  58. ?>


plik wykorzystujacy funkcje:
  1. <?
  2.  
  3. // Biblioteka : Kameleon
  4. include(&#092;"dna_kameleon.php\");
  5.  
  6. // Wczytanie szablonu TPL
  7. $TPL = file(&#092;"plik.tpl\");
  8.  
  9. // Definicja zmiennych dla szablonu
  10. $vars = Array (&#092;"varA\" => \"zmiennaA\", \"varB\" => \"A\", \"varC\" => true, \"varD\" => false);
  11.  
  12. // Parser
  13. echo tpl_parse($TPL, $vars);
  14.  
  15. ?>


plik.tpl:

Kod
{varA}

{var{varB}}

{if(varC)} C = True {fi()}

{if(varD)} D = True {fi()}

{if(varD)}

    {if(varC)} C i D = True {fi()}

{fi()}


Ten post edytował Bastion 18.02.2005, 21:58:31


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
hwao
post 18.02.2005, 22:32:48
Post #2


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




IMHO do tpl nie nadaje sie nic innego jak klasy :-)
Te sa takie proste w sam raz do malych rzeczy ksiegi gosci etc
Go to the top of the page
+Quote Post
Bastion
post 18.02.2005, 22:47:27
Post #3





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


widze ze jednak musze sie naumiec tych klas rolleyes.gif jak tylko sie dowiem jakie maja zalety i glownie po co je sie stosuje

Ten post edytował Bastion 18.02.2005, 22:48:25


--------------------
Go to the top of the page
+Quote Post
NuLL
post 18.02.2005, 22:51:16
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Po pierwsze będzie wiedzaił, że dana funkcja należy do silnika szablonów a nie do czego innego. Przydala by sie petla w tym - można by jużo czymś mówić.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Bastion
post 18.02.2005, 22:57:23
Post #5





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


jeszcze chce dorobic else() , operacje matemtayczne oraz zageszcozne zmienne np:

$varA = 10;
$varB = A;

i dajac {var{varB}} zamiast wyniku {varA} otrzymamy od razu 10,


--------------------
Go to the top of the page
+Quote Post
NuLL
post 18.02.2005, 23:12:10
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Może zagnieżdżone ify questionmark.gif rolleyes.gif - mówie Ci wtedy dowadujesz co umiesz w php winksmiley.jpg a tak szczerze - wtedy aczyna się jazda kiedy się pojawia zagniezdżanie czegokolwiek, gdyż trzeba mysleć rekurencyjnie winksmiley.jpg


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Bastion
post 20.02.2005, 15:15:35
Post #7





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


- poprawiono zagnieżdzone if()

- dodano zagnieżdzone zmienne , czyli jesli mamy $varA = "wynik" , $varB="A" to podajac {var{varB}} otrzymamy "wynik"

- operacje matematyczne {math(200*200)}

- program : http://www.dna.ltd.pl/.inc/dna_kameleon.php

przykladowy sposob uzycia:
  1. <?
  2.  
  3. // Biblioteka : Kameleon
  4. include(&#092;"dna_kameleon.php\");
  5.  
  6. // Wczytanie szablonu TPL
  7. $TPL = file(&#092;"plik.tpl\");
  8.  
  9. // Definicja zmiennych dla szablonu
  10. $vars = Array (&#092;"varA\" => \"zmiennaA\",
  11.  &#092;"varB\" => \"A\",
  12.  &#092;"varC\" => 5,
  13.  &#092;"varD\" => true,
  14.  &#092;"varE\" => true);
  15.  
  16. echo tpl_parse($TPL, $vars);
  17. ?>


przykładowy plik.tpl :
Kod
{varA}
{varB}
{var{varB}}
{varC}

{math(10)}
{math(10+10)}
{math({varC}*100)}

{if({varE})}
    VarE is true
{fi()}

{if({varD})}
    {if({varE})}
        VarE and VarF is true
    {fi()}
{fi()}


wynik parsowania :
Kod
zmiennaA
A
zmiennaA
5

10
20
500


    VarE is true



    
        VarE and VarF is true


--------------------
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:09