EllisLab text mark
Advanced Search
     
Tyds simple template parser php class
Posted: 29 June 2012 07:53 AM
Joined: 2012-06-29
3 posts

  Tyds simple template parser PHP class is a wrapper class / library. It is a lightweight but powerful tool used to isolate Web applications back-end business logic design and front-end page layout.

  Full code text file download Location:
https://skydrive.live.com/?cid=a29a583f77061234&resid=A29A583F77061234!872&id=A29A583F77061234!872


<?php
/*********************************************
* Application name:Tyds simple template parser php class
* version: v1.0.2
* Author:    tyds     msn:  .(JavaScript must be enabled to view this email address)
*                      email:  .(JavaScript must be enabled to view this email address)
***********************************************/

// use it with CodeIgniter , delete “//” at the left of the next line.
// if (! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);
class Tydsparser {
var $left_delimiter = ‘{’;
var $right_delimiter = ‘}’;
var $template_dir = ‘microtpl’;
var $compile_dir = ‘cache’;
var $html_dir = ‘cache/html’;
var $force_compile = false;
var $force_html =false;
var $exp_time = 0;
var $html_time = 0;
var $d_time=0;
var $ftpl_var = array();
  var $starttime =0.00;
var $char_code_re = ‘’;

public function   __construct($config = array()){

  $this->initialize($config);

  // use it with CodeIgniter , delete “//” at the left of the next line.
// log_message(‘debug’, “Tydsparser Class Initialized”);
}

private function initialize($config = array())
{
    $path_parts = pathinfo(__FILE__);
    $basedir = $path_parts[“dirname”] ;
    clearstatcache();


  if (count($config) > 0)
  {
  if(!empty($config[‘left_tag’])&&!empty($config[‘right_tag’])){
  $this->left_delimiter=$config[‘left_tag’];
  $this->right_delimiter=$config[‘right_tag’];
  }
  if (!empty($config[‘template_dir’])){
  $this->template_dir=THEROOT.$config[‘template_dir’];
  }else{$this->template_dir=THEROOT.$this->template_dir;}
  if (!empty($config[‘compile_dir’])&&!empty($config[‘html_dir’]))
  {
  $this->compile_dir=THEROOT.$config[‘compile_dir’];
  $this->html_dir=THEROOT.$config[‘html_dir’];
  }else{
  $this->compile_dir=THEROOT.$this->compile_dir;
  $this->html_dir=THEROOT.$this->html_dir;
  }
  if (!empty($config[‘exp_time’])&&preg;_match(’/\d+/’, $config[‘exp_time’]))
  {
  $this->exp_time=$config[‘exp_time’];
  }
  if (!empty($config[‘html_time’])&&preg;_match(’/\d+/’, $config[‘html_time’]))
  {
  $this->exp_time=$config[‘html_time’];
  }
  if (!empty($config[‘datestr’])){
date_default_timezone_set(PRC);
$Dstrp = ‘/^\s*([1-9]\d{3})\s*[\-]?\s*(0?[1-9]|1[0-2])?\s*[\-]?\s*([0-2]?\d|3[01])?\s*([0-1]?\d|2[0-3])?\s*[:]?\s*([0-5]?\d)?\s*[:]?\s*([0-5]?\d)?$/’;
if (preg_match($Dstrp,$config[‘datestr’],$time_arr)){
  list($all, $Y,$M,$d,$H,$m,$S) = $time_arr;
  $nowstr = date(“Y-m-d H:i:s”);
  preg_match($Dstrp ,$nowstr,$now_arr);
  list($alln, $Yn,$Mn,$dn,$Hn,$mn,$Sn) = $now_arr;
  $Y=is_null($Y)?$Yn:$Y;
  $M=is_null($M)?$Mn:$M;
  $d=is_null($d)?$dn:$d;
  $H=is_null($H)?$Hn:$H;
  $m=is_null($m)?$mn:$m;
  $S=is_null($S)?$Sn:$S;
$ms = mktime($H,$m,$S,$M,$d,$Y); 
  $this->d_time=$ms;
  }
  }
    }

  $re[“gbk”]    = “[\x20-\x7e]|[\x81-\xfe][\x40-\xfe]”;
  $re[“gb2312”]  = “[\x20-\x7e]|[\xb0-\xf7][\xa0-\xfe]”;
  $re[“utf8”]  = “[\x20-\x7e]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}”;
  $re[“big5”]  = “[\x20-\x7e]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])”;
  $this->char_code_re =  $re[“utf8”];

$this->create($this->compile_dir);
$this->create($this->html_dir);
  }

public function __destruct(){
  unset($this->_section,$this->ftpl_var);
}

private function mysubstr($str,  $strlen, $suffix=’‘) {
  preg_match_all( ‘/’.$this->char_code_re.’/’, $str, $match);
  if(count($match[0]) <= $strlen) return $str;
  $slice = join(”“,array_slice($match[0], 0, $strlen));
  $slice = $slice.$suffix;
  return $slice;
}

public function microtime_float()
{
  list($usec, $sec) = explode(” “, microtime());
  return ((float)$usec + (float)$sec);
}

private function var_or_value($equalvalue)
{
$equalvalue = trim($equalvalue);
  if(preg_match(’/^\$\w([\w\[\]\$]*[\w\]])*/’,$equalvalue))
  {return $this->parse_vars($equalvalue); }
  elseif(preg_match(’/^[\’](.+)[\’]$/’,$equalvalue,$matches))
  {return $equalvalue;  }
  elseif(preg_match(’/^[”](.+)[”]$/’,$equalvalue,$matches))
  { return $equalvalue;  }
  elseif(preg_match(’/^\d+$/’,$equalvalue,$matches))
  {return $equalvalue;  }
  elseif(strtolower($equalvalue) == “true” || strtolower($equalvalue) == “false” || strtolower($equalvalue) == “null”)
  {return $equalvalue;  }
  elseif(strlen($equalvalue) == 0)
  {return “‘’”;  }
  else{
  $equalvalue =str_replace(”\’”, “’”, $equalvalue);
  $equalvalue =”’”.str_replace(”’”, “\’”, $equalvalue).”’”;
  return $equalvalue;  }

}

protected function create($dir){
  if (!is_dir($dir))
  {
  $temp = explode(’/’,$dir);
  $cur_dir = ‘’;
  for($i=0;$i<count($temp);$i++)
  {
$cur_dir .= $temp[$i].'/';
if (!is_dir($cur_dir))
{
@mkdir($cur_dir,0777);
@fopen("$cur_dir/index.htm","a");
}
  }
  }
}

private function write_file($file_name,$content){
  $compiledfile_url = $this->get_compiledfile_url($file_name);
  if(!is_dir($this->compile_dir)){
  $this->create($this->compile_dir);
  }
  if(!is_writable($this->compile_dir)){
  $this->show_messages(“Please set read/write property of the compile directory:”.$this->compile_dir.” and files in it as 777。”);
  }
  $fp = fopen($compiledfile_url,‘wb’);
  fwrite($fp,$content);
  fclose($fp);
  chmod($compiledfile_url,0777);
}

public function show_messages($message){
  echo $message;
  exit;
}

......