首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
cPlusPlus
shell
email
c语言
stream
subset
python3
split
erlang
nodejs
ascii
timestamp
callback
regex
match
function
perl
filter
version
usb
javascript
heap
grid
runtime
list
process
future
uml
merge
lua
cmd
foreach
web3
yaml
ip
range
cpython
blob
php7
hook
text
metadata
scala
search
window
bash
solr
object
heatmap
case
hashtable
datetime
keyword
join
substring
plugins
go
string
header
dagger
php
hashset
fetch
frameworks
flutter
httpclient
main
tags
import
format
byte
hashcode
sum
iostream
get
bytecode
default
buffer
vbscript
当前位置:
开发笔记
>
编程语言
> 正文
一个PHP模板,主要想体现一下思路
作者:Metoo婧婧 | 来源:互联网 | 2018-03-18 01:11
一个PHP模板,主要想体现一下思路
思路:
欲在速度和易用(主要指的是美工设计的方便性)之间取得一个平衡点.于是采用了由html文件生成php文件的办法(编译?)
也想在分离显示逻辑和分离html代码之间平衡一下
例如一个论坛首页(index.php):
代码:
require('./template.php');
//由html生成的php文件的前缀,区别使用多种风格.
$tpl_prefix = 'default';
//模板文件名
$tpl_index = 'index';
$tpl = new Template($tpl_prefix);
$cats = array(
array('forum_id'=>'1','forum_cat_id'=>'0','forum_name'=>'PHP学习'),
array('forum_id'=>'2','forum_cat_id'=>'0','forum_name'=>'MYSQL学习')
);
$forums = array(
array('forum_id'=>'3','forum_cat_id'=>'1','forum_name'=>'PHP高级教程'),
array('forum_id'=>'4','forum_cat_id'=>'1','forum_name'=>'PHP初级教程'),
array('forum_id'=>'5','forum_cat_id'=>'2','forum_name'=>'MYSQL相关资料')
);
if ($cats)
{
if ($tpl->chk_cache($tpl_index))//检查判断是否需要重新生产PHP模板文件.
{
$tpl->load_tpl($tpl_index);//加载html模板文件.
//替换PHP语句
$tpl->assign_block("{block_cat}","");
$tpl->assign_block("{/block_cat}","}?>");
$tpl->assign_block("{block_forum}","
\nif(\$forum['forum_cat_id'] == \$cat['forum_id']) {?>");
$tpl->assign_block("{/block_forum}","}\n}?>");
//生产PHP模板文件.
$tpl->write_cache($tpl_index);
}
}
//包含PHP模板文件.
include($tpl->parse_tpl($tpl_index));
?>
对应的html模板文件(index.html):
代码:
{block_cat}
{=$cat['forum_name']}
{block_forum}
{=$forum['forum_name']}
{/block_forum}
{/block_cat}
经过处理,里面的{block_forum}{block_cat}标签被替换成PHP循环语句,用于显示数组种所有元素.
生成的PHP模板文件(default_index.php):
代码:
=$cat['forum_name']?>
if($forum['forum_cat_id'] == $cat['forum_id']) {?>
=$forum['forum_name']?>
}
}?>
}?>
default_index.php被包含在index.php,这样就可以正常显示了.
这样,HTML模板文件可以用dw来进行修改美化,美工人员应该会方便一些.
template.php
代码:
/*********************************************************************************
* 模板类(Template)
* 最后修改时间:2004.4.07 本论坛使用
*
*
*
**********************************************************************************/
class Template {
//$this->$template,储存模板数据.
var $template = '';
//模板路径.
var $tpl_path = '';
//模板前缀(风格名称).
var $tpl_prefix = '';
//cache路径(编译后的路径).
var $cache_path = '';
//css文件路径.
var $css_path = '';
//header文件路径.
var $header_path = '';
//footer文件路径
var $footer_path = '';
/**
* 初始化模板路径.
*/
function Template($root = 'default')
{
//模板前缀(风格名称).
$this->tpl_prefix = $root;
//模板文件路径.
$this->tpl_path = './templates/' . $root . '/';
//生成的PHP文件存放路径.
$this->cache_path = './template_data/' .$this->tpl_prefix . '_';
return true;
}
/**
* chk_cache,检查"编译"后的模板是否需要更新,判断依据:最后修改时间,"编译"文件是否存在.
*/
function chk_cache($tpl_index)
{
$tpl_file = $this->tpl_path . $tpl_index . '.html';
$cache_file = $this->cache_path . $tpl_index . '.php';
//判断是否需要更新.
if(!file_exists($cache_file))
{
return true;
}
elseif(filemtime($tpl_file) > filemtime($cache_file))
{
return true;
}
}
/**
* 输出模板文件.
*/
function parse_tpl($tpl_index,$message='')
{
return $this->cache_path . $tpl_index . '.php';
}
/**
* 加载模板文件.
*/
function load_tpl($tpl_index)
{
$tpl_file = $this->tpl_path . $tpl_index . '.html';
$fp = fopen($tpl_file, 'r');
$this->template = fread($fp, filesize($tpl_file));
fclose($fp);
}
/**
* 替换变量,并且"编译"模板.
*/
function write_cache($tpl_index)
{
$cache_file = $this->cache_path . $tpl_index . '.php';
//变量显示.
$this->template = preg_replace("/(\{=)(.+?)(\})/is", "=\\2?>", $this->template);
//界面语言替换.
$this->template = preg_replace("/\{lang +(.+?)\}/ies", "\$lang['main']['\\1']", $this->template);
$fp = fopen($cache_file, 'w');
flock($fp, 3);
fwrite($fp, $this->template);
fclose($fp);
}
/**
* 替换block.
*/
function assign_block($search,$replace)
{
$this->template = str_replace($search,$replace,$this->template);
}
}
?>
html
php
mysql
css
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
css
SpringBoot集成前端模版(thymeleaf)的配置步骤
本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ...
[详细]
蜡笔小新 2023-12-14 10:11:46
css
Hibernate基础映射
在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ...
[详细]
蜡笔小新 2023-12-14 10:57:47
lua
lua语言闭包、模式匹配、日期、编译、模块的特性及应用
本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ...
[详细]
蜡笔小新 2023-12-14 18:18:21
lua
Java实战之电影在线观看系统的实现
本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ...
[详细]
蜡笔小新 2023-12-14 15:52:03
lua
Java实现大数乘法(分治算法)
本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ...
[详细]
蜡笔小新 2023-12-14 15:43:50
lua
HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ...
[详细]
蜡笔小新 2023-12-14 15:08:18
version
Alink回归预测的不完善问题及期待
本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ...
[详细]
蜡笔小新 2023-12-14 14:25:33
version
求解hdu 1003 java题目的动态规划优化方法
本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ...
[详细]
蜡笔小新 2023-12-14 13:11:00
merge
C#之数据集:DataSet对象的使用及相关方法详解
本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ...
[详细]
蜡笔小新 2023-12-14 12:09:13
merge
OC学习笔记之@property和@synthesize
本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ...
[详细]
蜡笔小新 2023-12-14 12:05:06
list
Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ...
[详细]
蜡笔小新 2023-12-14 12:01:13
list
知识图谱——机器大脑中的知识库
本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ...
[详细]
蜡笔小新 2023-12-14 10:06:19
list
测试人的性格,点火让他着急,考验婚姻问题的善意玩人
本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ...
[详细]
蜡笔小新 2023-12-14 09:10:09
process
Linux进程控制块PCBtask_struct结构体结构及作用详解
本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ...
[详细]
蜡笔小新 2023-12-13 21:31:18
function
Voicewo在线语音识别转换jQuery插件的特点和示例
本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ...
[详细]
蜡笔小新 2023-12-13 20:01:16
Metoo婧婧
这个家伙很懒,什么也没留下!
Tags | 热门标签
cPlusPlus
shell
email
c语言
stream
subset
python3
split
erlang
nodejs
ascii
timestamp
callback
regex
match
function
perl
filter
version
usb
javascript
heap
grid
runtime
list
process
future
uml
merge
lua
RankList | 热门文章
1
怎么用iPhone设置Foxmail?
2
linux-0.11调试教程 minix文件系统1.0 下篇(2)inode_table内存i节点表和目录 /etc/tty0
3
java word文档生成_java生成word文档
4
vc设置窗口在另一个窗口前面_Vim 8.2 发布 带来弹出窗口与文本属性两大新功能...
5
8.1.2 区域Area
6
看我如何检测密码抓取神器Mimikatz的执行
7
c++实现linux socket 文件传输服务器
8
2022 年,把 Python 学得跟 Java 一样熟练——04 matplotlib 绘制概率图
9
axios跨域携带的cookie是客户端域下的还是服务端域下的?
10
Windows系统安装nginx及配置
11
探讨Web组件化实现
12
华为机考108题(c++)(4151)
13
oracle 数据文件,控制文件和参数文件全部丢失恢复
14
Decoration5:引入Actuator进行站点监控
15
JVM学习笔记|垃圾回收相关算法
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有