Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [funkcja] Prosty skrypt do szablonow
Forum PHP.pl > Inne > Oceny
Bastion
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()}
hwao
IMHO do tpl nie nadaje sie nic innego jak klasy :-)
Te sa takie proste w sam raz do malych rzeczy ksiegi gosci etc
Bastion
widze ze jednak musze sie naumiec tych klas rolleyes.gif jak tylko sie dowiem jakie maja zalety i glownie po co je sie stosuje
NuLL
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ć.
Bastion
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,
NuLL
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
Bastion
- 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
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-2024 Invision Power Services, Inc.