Forum forum.webPC.pl Strona Główna  
  forum.webPC.pl
FAQ  FAQ   Szukaj  Szukaj   Użytkownicy  Użytkownicy   Grupy  Grupy
 
Rejestracja  ::  Zaloguj Zaloguj się, by sprawdzić wiadomości
 
Forum forum.webPC.pl Strona Główna --> PHP, MySQL oraz inne bazy danych --> Parser szablonów

Napisz nowy temat  Odpowiedz do tematu
 Parser szablonów Zobacz poprzedni temat :: Zobacz następny temat --> 
Autor Wiadomość
Qba_23
PostWysłany: Pon Gru 31, 2007 9:25 pm    Temat postu: Parser szablonów Odpowiedz z cytatem

Nowy

Dołączył: 19 Gru 2007
Posty: 2

Mam parser szablonów znaleziony na necie:
Kod:
<?php
   class Templates
   {

      var $unparsed = array ();

      var $parsed = array ();

      var $blocks = array();

      var $last_loaded;

      function load($plik)
      {
         if($plik == $last_loaded)
         {
            $this->unparsed[] = end($this->unparsed);
         }
         elseif(file_exists(F_TPL.$plik.'.tpl'))
         {
            $file = @fopen(F_TPL.$plik.'.tpl',r);
            flock($file, 2);
            $this -> unparsed[] = fread($file,filesize(F_TPL.$plik.'.tpl'));
            flock($file, 3);
            $this->last_loaded = $plik;
         }
         else
            echo 'Plik ' .$plik. ' nie istnieje.';
      } #end function load()

      function parse()
      {
         $i=0;
         foreach ($this->unparsed as $template)
         {
            $found = array();
            if(preg_match_all("#\{(.+?)\}#is", $template, $found))
            {
               foreach($found[1] as $block)
               {
                  $block_name = '{'.$block.'}';
                  $block_values = $this -> blocks[$i][$block];
                  $template = str_replace($block_name, $block_values, $template);
               }
            }
            $this -> parsed[] = $template;
            $i++;
         }
      } #end function parse()

      function show_result($which="all",$to=0)
      {
         if($which >= 0 && $to >= 0 && $to <= count($this->parsed) && $which != 'all')
         {
            if($which < $to)
            {
               while($which <= $to)
               {
                  echo $this->parsed[$which];
                  $which++;
               }
            }
            else
            {
               while($which >= $to)
               {
                  echo $this->parsed[$which];
                  $which--;
               }
            }
         }
         elseif($which != 'all')
         {
            echo $this->parsed[2];
         }
         else
         {
            foreach($this->parsed as $parsed)
            {
               echo $parsed;
            }
         }
      } #end function show_result()
   } #end class Templates
   define('F_TPL','templates/');
?>

A potem mam index.php, który wygląda tak(fragment, ale więcej nie trzeba)
Kod:
include('parser.PHP');
   $templates = new Templates;
   $templates->load('header');
   $templates->blocks[] = array ('LOGO' => $logo, 'INFO' => $informacja, 'NICK' => $_SESSION['user']);
   $templates->load('menu_lewe');
   $templates->blocks[] = array ('GLOWNA' => $glowna, 'REJESTR' => $rejestracja, 'LOGOWANIE' => $logowanie, 'KONTAKT' => $menu_lewe['kontakt'], 'USERS' => $menu_lewe['users'], 'ONLY_ADMIN' => $only_admin);
   $templates->parse();
   $templates->show_result();

Potem w pliku index.tpl do konretnej komórki w tabeli chcę zaincludować stronę pobraną za pomocą funkcji $_GET, do czego miała służyć ta funkcja:
Kod:
function wczytaj(){
    $glowna = 'page/glowna.php'; //lokalizacja strony głównej
    $str = $_GET['str'];
    if(!empty($str)) {
        if(is_file("page/".$str.".php")) include 'page/'.$str.'.php';
        elseif(is_file("page/".$str.".html")) include 'page/'.$str.'.html';
        else echo "Nie ma takiej strony";
    }
    else include($glowna);
}

chciałem funkcję przypisać do zmiennej 'LOAD' w taki sposób:
Kod:
$templates->blocks[] = array('LOAD' => wczytaj())

no i tu pojawia sie problem, bo funkcja wykonuje się poprawnie, ale strona includuje się na samej górze, a nie w komórce tabeli, w której znajduje się {LOAD} :/ Czy jest jakiś inny sposób na zapisanie funkcji, niekoniecznie w ten sam sposób, ale żeby działała na tej samej zasadzie? Proszę o szybką odpowiedź, z góry dzięki Smile
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
guitarnet_pl
PostWysłany: Sro Kwi 09, 2008 2:10 am    Temat postu: Odpowiedz z cytatem

Nieśmiały

Dołączył: 09 Kwi 2008
Posty: 7

zanim utoniesz w systemach jak smarty czy klasach do template poczytaj o alternatywnych systemach szablonow

http://skrypta.pl/porada/jak_zbudowac_strone_oparta_na_szablonach/66

o wiele szybciej dziala w oparciu o php i xhtml
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy temat  Odpowiedz do tematu Strona 1 z 1

Forum forum.webPC.pl Strona Główna --> PHP, MySQL oraz inne bazy danych --> Parser szablonów
Skocz do:  



Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


gabloty aluminiowe, wiaty kroll, aquai
Powered by phpBB © 2001, 2005 phpBB Group.