php生成静态页面并实现预览功能


Posted in PHP onJune 27, 2019

一、前言

这篇文章主要是记录一下php生成静态页面的大致步骤,关于页面静态化,大家想必都听说过,但是真正用的时候反而不是很多。有些页面考虑到访问量比较大,页面结构又不常改动的,比如新闻公告等,可以考虑做成静态页面放在服务器上,这样第一是能抗住大流量的访问,第二也是更加安全一些,打开速度上有保证。

二、正文

1、什么是静态化

就比如我们平时写项目的时候,大部分的页面都是会传参数进去,通过php标签把这些参数展示出来。因为我们的参数随时可以变化,所以页面上的内容也跟着参数变化,这就是动态化的页面。与之相反,静态化就是纯粹的html,页面上的内容不需要通过php或者java等编程语言来改变。

关于静态化的优点,网上也都说的很清楚了,这边不再一一赘述,总之就是打开速度够快,能抗住大流量访问。

2、静态化写法

(1)第一种写法是通过ob_start()缓存来输出

在php文件中编写html代码,然后用bo_get_content获取到,然后输出到html文件,类似于:

<?php
 //打开输出控制缓存
 ob_start();
 echo "<html><head><title>test页面</title></head><body>Hello world</body></html>";
 //获取缓冲区的内容
 $out = ob_get_contents();
 //关闭输出缓存
 ob_end_clean();
 //打开test.html文件开启写入权限
 $fp = fopen("test.html", "w");
 if (!$fp) {
 echo "Fail";die;
 } else {
 //写入文件
 fwrite($fp, $out);
 //关闭文件
 fclose($fp);
 echo "Success";
 }

参考:php输出控制函数和输出函数生成静态页面

这种写法个人感觉会稍微乱一点,而且如果页面复杂的话,写出来的php+html代码会有些杂乱,所以博主选用的是第二种方法。

(2)提前写好模板页,然后进行替换

先准备好静态文件,然后把要替换的部分标出来,如{title},在php程序中用file_get_content获取html文件的内容,然后进行替换,替换之后保存为文件。

模板页:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>{top_title}</title>
 <link rel="stylesheet" href=" " rel="external nofollow" >
</head>
<body>
<div class="news-details-template">
 <h1>{title}</h1>
 <div class="author">{author}</div>

 <div class="date">{show_time}</div>
 <div class="line"></div>
 <div>
 {content}
 </div>
</div>
</body>
</html>

我们先编写好模板页面,包括都有哪部分需要替换,基本的样式等,提前写好

php替换:

$path = \Yii::getAlias('@xxx').'/views/site/notice-detail.php';
$content = file_get_contents($path); //引入模板
 //获取要替换的值进行字符串的替换
 $content = str_replace('{top_title}',$title,$content);
 $content = str_replace('{title}',$title,$content);
 .......
 $dir = $path ."/html/";
 if (!file_exists($dir)) {
 mkdir($dir);
 }
$filename=$dir.'/'.$filename; //这里就不判断html是否存在了,因为写入会覆盖
$result = file_put_contents($filename,$content);//写入内容到对应静态文件中

大概就是先通过file_get_contents获取模板页的内容,然后通过str_replace进行标签的替换,替换完成之后,通过file_pu_contents写入到新文件即可。生成的html,我们可以生成多个html,让前端根据不同的页面去访问不同的html即可。

三、生成预览

生成html之后,一般来说是需要预览给工作人员看看的,毕竟人家也不懂技术,不知道到底生成的是啥

1、使用dialog打开窗口

静态页:

//这是我们要打开的窗口,先隐藏
<div id="dialog-form-record" style="display:none;">
 <div id="Content_record">
 
 </div>
 </div>

JS定义底部按钮:

var arrButton = {
 "Release": {
 'text': '按钮名称',
 'priority': 'secondary',
 'class': 'btn btn-success',
 'id':'',
 'click':点击事件
 },
 "Cancel": {
 'text': 'Cancel', //取消按钮
 'priority': 'secondary',
 "id":'xxx',
 'click': function () {
 dialogRecord.dialog( "close" );

 }
 }
 };
 //定义宽高
 dialogRecord = $( "#dialog-form-record" ).dialog({
 autoOpen: false,
 height: 800,
 width: 1400,
 modal: true,
 buttons:arrButton,
 close: function() {
 $( "#Content_record" ).html("");
 dialogRecord.dialog( "close" );
 }
 });

JS打开窗口:

//定义标题和窗口大小
 $( "#dialog-form-record" ).dialog( "option", "title", "Preview Html" );

 $( "#dialog-form-record" ).dialog({
 modal: true,
 height: 800,
 width: 1400
 });

2、使用iframe引入刚才生成的静态文件

(1)js引入iframe

//加个时间戳,防止缓存
for (i in response.)
 iframe += "<iframe class='news_iframe' id='iframe"+ i +"' src='"+ response.url.url +"/news/html/"+ response.zh[i] + "?timestamp= " + new Date().getTime() + "'></iframe>";
  
 } 
//把iframe写入到html

$( "#en_content" ).html(iframe);

3、注意:

(1)iframe的src里面不能有空格之类的东西
(2)iframe去除边框
(3)iframe加载速度慢,所以加个onload事件,当iframe加载完之后再显示

var iframe = document.getElementById("iframe" + count);
 checkFinishedDownload(iframe);
 
function checkFinishedDownload(ifr) {
 if (ifr.attachEvent) {
 ifr.attachEvent("onload", function() {
 //iframe加载完成后你需要进行的操作
 });
 } else {
 ifr.onload = function() {
 //iframe加载完成后你需要进行的操作
 
 };
 }
}

最终效果:

php生成静态页面并实现预览功能

以上就是从生成静态页面到预览的整个流程了,博主也是第一次做静态页面相关的东西,还是挺有意思的,打卡记录一下。

希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
一个简洁的多级别论坛
Oct 09 PHP
smarty实例教程
Nov 19 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 PHP
PHP创建对象的六种方式实例总结
Jun 27 #PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 #PHP
不常用但很实用的PHP预定义变量分析
Jun 25 #PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 #PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 #PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 #PHP
Laravel向公共模板赋值方法总结
Jun 25 #PHP
You might like
php curl的深入解析
2013/06/02 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
Python返回数组/List长度的实例
2018/06/23 Python
python如何查看微信消息撤回
2018/11/27 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
QML实现钟表效果
2020/06/02 Python
python如何快速生成时间戳
2020/07/21 Python
Python 多进程、多线程效率对比
2020/11/19 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
HTTP状态码详解
2021/03/18 杂记
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
通信研究生自荐信
2014/02/01 职场文书
质量月活动总结
2014/08/26 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
紧急迫降观后感
2015/06/15 职场文书
初婚初育证明范本
2015/06/18 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS