• Meist
  • Programmeerimine
  • Kontakt
  • ET
    • EN
    • ET
  • Koodijupid

Väike HTML/PHP parser

11.09.2019 / mast / 0 Comments

Parser ise

function parse($file, $section, $vars = null) {
	
        // clear file status cache
        clearstatcache();
        
        $basename = basename($file);
        
        // if the section is stored in $GLOBALS, use section that was stored 
        // so that we do not need to find the section again from the template file 
        if (isset($GLOBALS['parser'][$basename][$section])) {
            $result = $GLOBALS['parser'][$basename][$section];
        }
        
        // read template file and find $section
        if (!isset($result)) {
            $fileLines = file($file);
            $file_i = implode('<@>', $fileLines);
            $start_i = strpos($file_i, '['.$section.']');
            $start = sizeof(explode('<@>', substr($file_i, 0, $start_i))) - 1;
            $end_i = strpos($file_i, '[/'.$section.']');
            $end = sizeof(explode('<@>', substr($file_i, 0, $end_i))) - 1;

            for ($i=$start+1; $i<=$end-1; $i++) {
                    $result .= $fileLines[$i];
            }
        }
        
        // if template does not contain the section 
        if (empty($result)) {
                return 'source: '.$file. ' is empty ('.$section.')';
        }

        // store the section
        $GLOBALS['parser'][$basename][$section] = $result;

        // remove comments
        $result = preg_replace('![comment].+[/comment]!s', '', $result);

        // place values  into section
        if (is_array($vars)) {
                foreach($vars as $key => $value) { 
                        $tag = "{VAR:" . $key . "}";
                        $result = str_replace($tag, $value, $result);
                }
        }

        // remove VAR tags that had no mathing replacement in $vars
        $result = preg_replace("/{VAR:(.*)}/U", "", $result);

        return $result;
}

Mida see funktsioon teeb

Tühjendab file status cache‘i, et kasutada värsket versiooni templeidist:

        clearstatcache();

Kui sektsioon on eelnevalt salvestatud, siis kasutab salvestatud versiooni, et vältida selle uut otsingut templeidi failist:

        $basename = basename($file);
  
        if (isset($GLOBALS['parser'][$basename][$section])) {
            $result = $GLOBALS['parser'][$basename][$section];
        }

Loeb templeidi faili ja otsib $section’it:


        if (!isset($result)) {
            $fileLines = file($file);
            $file_i = implode('<@>', $fileLines);
            $start_i = strpos($file_i, '['.$section.']');
            $start = sizeof(explode('<@>', substr($file_i, 0, $start_i))) - 1;
            $end_i = strpos($file_i, '[/'.$section.']');
            $end = sizeof(explode('<@>', substr($file_i, 0, $end_i))) - 1;

            for ($i=$start+1; $i<=$end-1; $i++) {
                    $result .= $fileLines[$i];
            }
        }

Kui templeit ei sisalda otsitud sektsiooni, siis tagastab veateate:

        if (empty($result)) {
                return 'source: '.$file. ' is empty ('.$section.')';
        }

Salvestab sektsiooni võimalikuks taaskasutamiseks sama laadimise jooksul:

        $GLOBALS['parser'][$basename][$section] = $result;

Eemaldab kommentaarid:

        $result = preg_replace('![comment].+[/comment]!s', '', $result);

Asetab väärtused sektsiooni:

        if (is_array($vars)) {
                foreach($vars as $key => $value) { 
                        $tag = "{VAR:" . $key . "}";
                        $result = str_replace($tag, $value, $result);
                }
        }

Eemaldab VAR tagid, millele vastavad asendusväärtused puudusid $vars muutujas:

        $result = preg_replace("/{VAR:(.*)}/U", "", $result);

Kasutamine

HTML templeit:

[section1]
The number is: "{VAR:number}"
[/section1]

PHP skript:

$params['number'] = '1000';

$html = parse('templates/test1.tpl', 'section1', $params);

echo $html;

Demo .zip failina

Lae zipitud failid alla siit.

lightweight parser

« HTML & Javascript ennetava sisestusega tekstiväljad

© Webwise