carry0987/template-engine

轻量且快速的PHP模板引擎,使用Composer

1.3.10 2024-09-23 13:59 UTC

README

Packagist
这是一个轻量且快速的PHP模板引擎,使用Composer,具有缓存能力,可定制缓存寿命,模板继承,以及支持Redis和MySQL。

这个功能强大且简单的模板引擎提供了存储和缓存模板的灵活性。无论是想要本地保存模板、考虑长期缓存、嵌套模板文件以实现复杂设计、使用Redis进行持久化存储,还是通过MySQL数据库管理模板,此引擎都能高效且轻松地满足您的需求。

安装

composer require carry0987/template-engine

功能

  • 支持纯HTML作为模板
  • 支持CSS、JS文件缓存
  • 支持CSS模型缓存
  • 自动最小化CSS缓存
  • 缓存寿命

用法

您可以选择将模板文件版本保存到数据库或Redis

保存到数据库

// Database configuration
$config = array(
    'host' => 'localhost',
    'port' => 3306,
    'database' => 'template',
    'username' => 'root',
    'password' => ''
);
$database = new DBController($config);

保存到Redis

// Redis configuration
$redisConfig = array(
    'host' => 'redis',
    'port' => 6379,
    'password' => '',
    'database' => 1
);
$redis = new RedisController($redisConfig);

缓存CSS & JS文件

CSS缓存

缓存CSS的特定部分
html

<link href="{loadcss common.css index}" rel="stylesheet" type="text/css">

您可以使用变量作为特定部分

<!--{eval $current_page = 'index'}-->
<link href="{loadcss model.css $current_page}" rel="stylesheet" type="text/css">

CSS

/*[index]*/
.header {
    display: block;
}

.link {
    color: blue;
}
/*[/index]*/

输出: HTML

<link href="cache/model_index.css?v=Ad0Dwf8" rel="stylesheet" type="text/css">

cache/model_index.css

/* index */
.header{display:block}.link{color:blue}
/* END index */

此外,使用array

<!--{eval $current_page = array('index','test')}-->
<link href="{loadcss model.css $current_page}" rel="stylesheet" type="text/css">

或者string,用,分隔

<link href="{loadcss model.css index,test}" rel="stylesheet" type="text/css">

CSS

/*[index]*/
.header {
    display: block;
}

.link {
    color: blue;
}
/*[/index]*/

/*[test]*/
.header {
    display: inline-block;
}

.link {
    color: red;
}
/*[/test]*/

输出: HTML

<link href="cache/model_MULTIPLE.css?v=Ad0Dwf8" rel="stylesheet" type="text/css">

cache/model_MULTIPLE.css

/* index */
.header{display:block}.link{color:blue}
/* END index */
/* test */
.header{display:inline-block}.link{color:red}
/* END test */

直接缓存CSS文件
html

<link href="{loadcss common.css}" rel="stylesheet" type="text/css">

输出

<link href="static/css/common.css?v=Ad0Dwf8" rel="stylesheet" type="text/css">

JS缓存

html

<script src="{loadjs jquery.min.js}" type="text/javascript"></script>

输出

<script src="static/js/jquery.min.js?v=B22PE8W" type="text/javascript"></script>

静态文件

html

<img src="{static img/logo.png}" alt="logo">

输出

<img src="static/img/logo.png" alt="logo">

函数

echo函数

html

<span>{$value}</span>

PHP

<span><?php echo $value; ?></span>

assign variable函数

注意:不要在block标签中放置任何PHP脚本

html

<!--{block test}-->
<span>html content</span>
<!--{/block}-->

PHP

<?php
$test = <<<EOF

<span>html content</span>

EOF;
?>

if函数

html

<!--{if expr1}-->
    statement1
<!--{elseif expr2}-->
    statement2
<!--{else}-->
    statement3
<!--{/if}-->

PHP

<?php if(expr1) { ?>
    statement1
<?php } elseif(expr2) { ?>
    statement2
<?php } else { ?>
    statement3
<?php } ?>

loop函数(不带key)

html

<!--{loop $array $value}-->
    <span>username</span>
<!--{/loop}-->

PHP

<?php foreach($array as $value) {?>
    <span>username</span>
<?php } ?>

loop函数(带key)

html

<!--{loop $array $key $value}-->
    <span>{$key} = {$value}</span>
<!--{/loop}-->

PHP

<?php foreach($array as $key => $value) {?>
    <span><?php echo $key; ?> = <?php echo $value; ?></span>
<?php } ?>

eval函数

html

<!--{eval $value = 1+2}-->
<span>{$value}</span>

PHP

<?php eval $value = 1+2;?>
<span><?php echo $value; ?></span>

PRESERVE标记

html

<!--{PRESERVE}-->
<span>html content</span>
<!--{/PRESERVE}-->
/*{PRESERVE}*/
<script>
const value = 1+2;
document.querySelector('span').innerHTML = `Value: ${value}`;
</script>
/*{/PRESERVE}*/

PHP

<span>html content</span>
<script>
const value = 1+2;
document.querySelector('span').innerHTML = `Value: ${value}`;
</script>