Home  >  Article  >  Backend Development  >  PHP template function regular implementation code

PHP template function regular implementation code

高洛峰
高洛峰Original
2016-12-01 14:48:551081browse

I have seen the source code of phpcms and discuz, so there may be a lack of innovation. However, the principles are mostly the same, but the details may be slightly different.
Let’s get to the point, let’s start talking about the specific implementation process.
1. First of all, you need to decide where to put the template file? Where to put the converted php files? And how to name it? Go directly to the source code:
Copy the code The code is as follows:
function template($tpl = 'index',$dir = 'hello')
{
if(!file_exists($pd = TPL_PATH.$dir.'/'))@ mkdir($pd,0777) or die("$pd directory creation failed");//such as cache/tpl/hello/
if(!file_exists($td = TPL.$dir.'/'))@mkdir( $td,0777) or die("$td directory creation failed");//such as data/tpl/hello/

$t2p = $pd.$tpl.'.php';//The template file is formed after regular conversion php file, such as cache/tpl/hello/index.php
$t2h = $td.$tpl.'.html';//html template file, such as data/tpl/hello/index.html

2. What When do you need regular conversion? It can be that the php file after regularization does not exist, or the html file before regularization has changed. The filemtime(string $path) function is used here, which returns the latest modification time of the file.
Copy the code The code is as follows:
if(!file_exists($t2p) || @filemtime($t2p) < @filemtime($t2h) )//After the template file is changed, the regular php file will be updated accordingly
{
template_go( $t2p,$t2h);//Template conversion begins
}
return $t2p;//Return to the regularized php file, which can be called like this: include template('header','hello');
}

3 .Start the template conversion, first read it from the html file, then replace it with regular expressions, and finally write it into the php file.
Copy code The code is as follows:
function template_go($t2p,$t2h)
{
$str = @file_get_contents($t2h);//Read out
if($str === false) exit("The template file is missing, Please check! ");
$str = template_do($str);//Regular replacement
@chmod($t2p,0777);
return $str = file_put_contents($t2p, $str);//Write
}

4. Regular rules, several relatively simple regular replacement grammars.
Copy code The code is as follows:
function template_do($str)
{
$str = preg_replace('/([nr+])t+/s', '\1', $str);//Remove TAB tab character. The modifier /s does not ignore newlines
$str = preg_replace('/{$(.*)}/Us', '', $str);/*{$ Replace xx} with Note that the modifier /U must be added and can only match once. Lazy matching is also possible */
$str = preg_replace('/{php (.+)}/', '', $str);/*{php xxxx} replaced with < ?php xxxx ?> Note that you cannot add the modifier /s. You must consider the problem of line breaks when performing this regular rule multiple times*/
$str = preg_replace('/{template(.*)}/Us', '< ;?php include template\1; ?>', $str);
/*{template(xx,yy)} replaced with */
$str = preg_replace('/{include (.*)}/Us', '', $str);/*{include xx.php}replaced with */
$str = "".$str;
//$str = preg_replace(' /s+/', ' ', $str);//Check the source code of the webpage to see
return $str;
}

Of course, this function is still relatively simple now, and I look forward to improving it.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn