Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Parser
Forum PHP.pl > Forum > PHP
gorky_park
Do rzeczy, kod parsera:
  1. <?php
  2. DEFINE ('D_TPL', 'template/');
  3.    
  4.    class Parser {
  5.        
  6.        public $UnparsedHtmlCode = array();
  7.        public $ParsedTpl = array();
  8.        public $TplBlocks = array();
  9.        public $LastLoadedTpl;
  10.        
  11.        public function LoadTemplate($file) {
  12.            if(!file_exists(D_TPL.$file.'.tpl')) {
  13.                echo "Couldn't load followed file to parse:<b> ".D_TPL.$file.'.tpl'."</b>< br/>";
  14.            }
  15.            else {
  16.                $FileHandle = fopen(D_TPL.$file.'.tpl', "r");
  17.                    flock($FileHandle, 2);
  18.                            $this -> UnparsedHtmlCode[] = fread($FileHandle, filesize(D_TPL.$file.'.tpl'));
  19.                    flock($FileHandle, 3);
  20.            }
  21.        foreach($this -> UnparsedHtmlCode AS $HtmlCode) {
  22.            echo $HtmlCode;
  23.        }
  24.        }
  25.            
  26.  
  27.    }
  28. ?>

w ten sposob go uruchamiam:
  1. <?php
  2. $objParse = new Parser();
  3.    $objParse -> LoadTemplate('head');
  4.    $objParse -> LoadTemplate('single_entry');
  5.    $objParse -> LoadTemplate('tail');
  6. ?>


problem polega w tym, że funkcja w pierwszym kroku ładuje plik "head", potem "head" oraz "single_entry" a w kroku ostatnim "head", "single_entry", "tail". Co otrzymuje w rezultacie? "Wypluty" kod html z 3 x powtorzonym kodem "head", 2 x "single_entry" i jeden raz "tail".

Pytanie: co poprawić, aby tablica UnparsedHtmlCode zawierała finalnie załadowane dane pliki tyle razy, ile nastepuje wywołanie metody dla konkretnego pliku .tpl?
PUPI
Kod działa dokładnie tak jak powinien. Możesz zrobić to np. tak:
  1. <?php
  2. DEFINE ('D_TPL', 'template/');
  3.  
  4.   class Parser {
  5.      
  6.       public $UnparsedHtmlCode = array();
  7.       public $ParsedTpl = array();
  8.       public $TplBlocks = array();
  9.       public $LastLoadedTpl;
  10.      
  11.       public function LoadTemplate($file) {
  12.           if(!file_exists(D_TPL.$file.'.tpl')) {
  13.               echo "Couldn't load followed file to parse:<b> ".D_TPL.$file.'.tpl'."</b>< br/>";
  14.           }
  15.           else {
  16.               $FileHandle = fopen(D_TPL.$file.'.tpl', "r");
  17.                   flock($FileHandle, 2);
  18.                           $this -> UnparsedHtmlCode[] = fread($FileHandle, filesize(D_TPL.$file.'.tpl'));
  19.                   flock($FileHandle, 3);
  20.           }
  21.       }
  22.       public function Display(){
  23.           foreach($this -> UnparsedHtmlCode AS $HtmlCode) {
  24.           echo $HtmlCode;
  25.       }
  26.       }
  27.  
  28.   }
  29. ?>

i użycie
  1. <?php
  2. $objParse = new Parser();
  3.   $objParse -> LoadTemplate('head');
  4.   $objParse -> LoadTemplate('single_entry');
  5.   $objParse -> LoadTemplate('tail');
  6.   $objParse -> Display();
  7. ?>
gorky_park
ałaaaałała... smile.gif no jasne to takie oczywiste. Wyswietlanie tablicy $UnparsedHtmlCode umiesciłem tylko po to, aby zobaczyc czy we własciwy sposo bedzie sie wyswietlac. Zamiast oczywiscie zrobic to w pliku gdzie includowana jest klasa zrobiłem to jako krok przy kazdym wywolaniu funkcji. No ale najwazniejsze to dostrzec swój błąd i go więcej nie powtarzac. Zwykłe gapiostwo.
Dzięki chłopie wielkie smile.gif Pomogłes.
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-2025 Invision Power Services, Inc.