PHP 动态页面转换为静态 HTML 页面的主要意义在于提高网站的性能和可用性。下面是一些具体的好处:
然而,将 PHP 动态页面转换为静态 HTML 页面并不适用于所有类型的网站,特别是对于需要动态生成内容和实时更新的网站,如电子商务网站、新闻网站等,这种转换可能会导致信息更新不及时,从而影响网站的可用性和用户体验。因此,需要根据实际需求和情况来选择是否需要将 PHP 动态页面转换为静态 HTML 页面。
要生成 HTML 文件,可以使用 PHP 中的文件处理函数和输出函数来创建一个新的 HTML 文件并将其写入磁盘。下面是一个简单的示例:
<?php
// 创建一个新的 HTML 文件
$html = '<html><head><title>My HTML File</title></head><body><p>Hello, world!</p></body></html>';
$file = fopen('myhtmlfile.html', 'w');
// 将 HTML 内容写入文件
fwrite($file, $html);
// 关闭文件
fclose($file);
// 输出成功信息
echo 'HTML 文件已经生成!';
?>
在上面的示例中,首先创建了一个包含 HTML 代码的字符串变量 $html。然后使用 fopen()函数创建一个新的文件,并将其设置为写入模式 'w'。然后使用 fwrite() 函数将 HTML 内容写入文件。最后使用 fclose() 函数关闭文件。生成的文件名为 myhtmlfile.html,它将保存在与 PHP 脚本相同的目录中。
请注意,上述示例是一个简单的示例,用于说明如何生成 HTML 文件。在实际应用中,您可能需要更复杂的 HTML 代码,需要使用循环或条件语句生成动态内容,并使用样式表或 JavaScript 对 HTML 进行美化和交互。
将 PHP 动态页面进行 HTML 缓存可以显著提高网站性能,因为它可以减少服务器请求和页面加载时间。以下是一些用于将 PHP 动态页面进行 HTML 缓存的常见方法:
1.使用 PHP 自带的输出缓存机制 ob_start() 和 ob_get_contents() 函数。
<?php
// 启动输出缓存
ob_start();
// 输出动态内容
echo 'Hello, world!';
// 将输出内容保存到缓存文件
file_put_contents('cached_page.html', ob_get_contents());
// 清空输出缓存并关闭
ob_end_clean();
?>
在上述示例中,使用 ob_start() 函数启动 PHP 输出缓存,然后使用 echo 输出动态内容。然后,使用 ob_get_contents() 函数将输出内容保存到缓存文件中,并使用 file_put_contents() 函数写入缓存文件。最后,使用 ob_end_clean() 函数清空输出缓存并关闭。
2.使用第三方缓存库如 Memcached 或 Redis。
这些缓存库可以在服务器内存中存储缓存页面,并且能够通过一个唯一的键名来访问缓存页面,从而加快页面访问速度。具体实现可以参考对应的文档或者库的使用说明。
3.使用 HTTP 缓存头信息。
这是一种在浏览器和服务器之间缓存页面的机制,通过设置响应头信息来控制页面缓存。可以通过设置 Expires、Cache-Control、Last-Modified 和 ETag 等响应头信息来控制页面的缓存,从而减少对服务器的请求。具体实现可以参考 HTTP 协议规范或者使用对应的 PHP 框架提供的缓存机制。
无论使用哪种方法,都需要谨慎考虑缓存时间和更新机制,以确保缓存页面在需要时被及时更新,并避免缓存过期或出现脏数据等问题。
家好,这一章就是讲关于创建帮助函数的问题。思考这样一个问题,可能有一些公共的函数需要在全局调用,这个地方也要调,那个地方也要调,这样的函数应该怎么创建?涉及到今天创建帮助函数文件。
首先习惯性的是在APP下面创建一个,这里面就是放全局运用的函数。这边一个小细节,从学APP基础都是这样的。为什么现在很多人后面下面的不写?这样写有一个前提条件,就是php文件必须要是纯php文件,不能插html这种超文不连接或者是html、css、gs这种混在一起写的,这样写不行,就是文件必须要是纯php文件。
为什么不这样写?这样写有坏处,比如有人不规范,很多空格,实际代码就写了几行,留了很多空格。实际在计算机服务器端运算的时候会把这些空格也并入运算的,虽然没有什么任何结果,但也会运算,这样就会导致脚本运行变慢,性能变差。
这样不加小问号,不加结尾标签,到最后一个冒号结束的时候整个这段就运行结束了,这样反而运行效率更高。所以在纯文本的APP文件里面,现在比较好的写法就是后面不写B,就是标签关闭的符号不写,就直接这样写。
小问题给大家唠叨一下,假设在这边命名了一个函数,返回一个叫hello word,就是返回一个字符串。现在比如想在外部漏油里面调用,比如要调用打赢勾勾,能打赢吗?来试一下,BS.test,不行,格格是一个未定义的函数,因为它没有找到函数,找到原因就是它还不是全局的辅助函数,所以要把它必要把文件里面的函数定义为全区的,就涉及到自动加载的问题。
就在composer jason里面有一个outload,默认是ps24加载这些,比如name space什么的都相应的,这个就自动引导到这边,a b大学APP的name space就自动引导到APP文件夹上面,类似的,大家能看懂。
在下面添加一行,就是按配置的冒号逗号,配置的fire s也会自动加载APP下面的help,ph重点,它也会自动加载outload,再加载完了就好了,刷新一下,原来不行,还差一步,要把它重新引导一下,就回到虚拟机里面,重新引导一下,引导完了,刷新一下,说明已经是全局的辅助函数了,可以调用。
再考虑一个问题,这边定了一个go,这么一个函数,如果外部有一个库,也叫哥哥,不就坏了吗?如果导入就把导入外部库的哥哥内涵处给覆盖掉了,就会造成很多程序运行上的错误,所以在上面要判断一下,如果函数不存在的时候,才运行,加载运行,这里面的函数做判断是比较严谨的,这样也不影响运行,也是正常的运行的。
这些歌就讲到这里。
.引用相关头文件
引入CSS:
<link href="Scripts/jquery-ui-1.8.1.custom.css" rel="stylesheet" type="text/css" />
<link href="Scripts/ui.jqgrid.css" rel="stylesheet" type="text/css" />
引入JS:
<script src="Scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script src="Scripts/jquery-ui.min.js" type="text/javascript"></script>
<script src="Scripts/grid.locale-en.js" type="text/javascript"></script>
<script src="Scripts/jquery.jqGrid.min.js" type="text/javascript"></script>
因为jqGrid3.6及以后的版本集成了jQuery UI,所以,此处需要导入UI相关js和css。另外grid.locale-en.js这个语言文件必须在jquery.jqGrid.min.js之前加载,否则会出问题。
2.将jqgrid加入页面中
根据jqGrid的文档,要想生成一个jqGrid,最直接的方法就是:
$("#list").jqGrid(options);
其中list是页面上的一个table:<table id="list"></table>
下面是一个简单的例子:
<script type="text/javascript">
$(document).ready(function () {
jQuery("#list").jqGrid({
url: 'Handler.ashx',
datatype: "json",
mtype: 'GET',
colNames: ['SalesReasonID', 'Name', 'ReasonType', 'ModifiedDate'],
colModel: [
{ name: 'SalesReasonID', index: 'SalesReasonID', width: 40, align: "left", editable: true },
{ name: 'Name', index: 'Name', width: 100, align: "center" },
{ name: 'ReasonType', index: 'ReasonType', width: 100, align: "center" },
{ name: 'ModifiedDate', index: 'ModifiedDate', width: 150, align: "center", search: false }
],
rowList: [10, 20, 30],
sortname: 'SalesReasonID',
viewrecords: true,
sortorder: "desc",
jsonReader: {
root: "griddata",
total: "totalpages",
page: "currpage",
records: "totalrecords",
repeatitems: false
},
pager: jQuery('#pager'),
rowNum: 5,
altclass: 'altRowsColour',
//width: 'auto',
width: '500',
height: 'auto',
caption: "DemoGrid"
}).navGrid('#pager', { add: true, edit: true, del: true,search:false,refresh:false }); ;
})
二、 jqgrid的重要选项
具体的options参考,可以访问jqGrid文档关于option的章节(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。其中有几个是比较常用的,重点介绍一下:
2.1 prmNames选项
prmNames是jqGrid的一个重要选项,用于设置jqGrid将要向Server传递的参数名称。其默认值为:
prmNames : {
page:"page", // 表示请求页码的参数名称
rows:"rows", // 表示请求行数的参数名称
sort: "sidx", // 表示用于排序的列名的参数名称
order: "sord", // 表示采用的排序方式的参数名称
search:"_search", // 表示是否是搜索请求的参数名称
nd:"nd", // 表示已经发送请求的次数的参数名称
id:"id", // 表示当在编辑数据模块中发送数据时,使用的id的名称
oper:"oper", // operation参数名称
editoper:"edit", // 当在edit模式中提交数据时,操作的名称
addoper:"add", // 当在add模式中提交数据时,操作的名称
deloper:"del", // 当在delete模式中提交数据时,操作的名称
subgridid:"id", // 当点击以载入数据到子表时,传递的数据名称
npage: null,
totalrows:"totalrows" // 表示需从Server得到总共多少行数据的参数名称,参见jqGrid选项中的rowTotal
}
2.2 jsonReader选项
jsonReader是jqGrid的一个重要选项,用于设置如何解析从Server端发回来的json数据,如果Server返回的是xml数据,则对应的使用xmlReader来解析。jsonReader的默认值为:
jsonReader : {
root: "rows", // json中代表实际模型数据的入口
page: "page", // json中代表当前页码的数据
total: "total", // json中代表页码总数的数据
records: "records", // json中代表数据行总数的数据
repeatitems: true, // 如果设为false,则jqGrid在解析json时,会根据name来搜索对应的数据元素(即可以json中元素可以不按顺序);而所使用的name是来自于colModel中的name设定。
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {
root:"rows",
repeatitems: true,
cell:"cell"
}
}
假如有下面一个json字符串:
{"totalpages":"3","currpage":"1","totalrecords":"11","griddata":[{"SalesReasonID":"1","Name":"Price","ReasonType":"Other","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"2","Name":"On Promotion","ReasonType":"Promotion","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"3","Name":"Magazine Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"4","Name":"Television Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"5","Name":"Manufacturer","ReasonType":"Other","ModifiedDate":"1998年6月1日"}]}
其对应的jsonReader为:jsonReader: {
root: "griddata",
total: "totalpages",
page: "currpage",
records: "totalrecords",
repeatitems: false
}
注:cell、id在repeatitems为true时可以用到,即每一个记录是由一对id和cell组合而成,即可以适用另一种json结构。援引文档中的例子:
repeatitems为true时:
jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords"
},
...
});
json结构为:
{
"totalpages": "xxx",
"currpage": "yyy",
"totalrecords": "zzz",
"invdata" : [
{"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, // cell中不需要各列的name,只要值就OK了,但是需要保持对应
{"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
...
]
}
repeatitems为false时:
jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords",
repeatitems: false,
id: "0"
},
...
});
json结构为:
{
"totalpages" : "xxx",
"currpage" : "yyy",
"totalrecords" : "zzz",
"invdata" : [
{"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13", "total" :"1234", "note" :"somenote"}, // 数据中需要各列的name,但是可以不按列的顺序
{"invid" : "2","invdate":"cell21", "amount" :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"},
...
]
}
2.3 colModel的重要选项
colModel也有许多非常重要的选项,在使用搜索、排序等方面都会用到。这里先只说说最基本的。
三、 注意事项
1. 动态改变Add Form或者Edit Form中的select的内容,如:改变下图中的Comparator下拉中的内容。
$("#list_d").navGrid('#pager_d',{add:true,edit:true,del:true,search:false,refresh:false},
{
checkOnSubmit:false, closeAfterEdit: true,recreateForm:true,
beforeInitData:function(formid){
initComparator();
},
beforeShowForm: function(formid){
$("#list_d").jqGrid('setColProp', 'Name', { editrules:{required:false},});
$('#tr_Name', formid).hide();
}
},//edit
{},//add
{}//del
)
beforeInitData, beforeShowForm在每次点击编辑的时候都会执行。initComparator的作用是通过ajax获取数据,然后利用$("#list_d").jqGrid('setColProp', 'Comparator', { editoptions: { value: valueString} });来设置Comparator下拉中的内容。其中valueString的格式如下’ equal to: equal to; not equal to: not equal to’。键值之间用冒号隔开,2项之间用分号隔开。注意:把recreateForm设为true,否则'setColProp'只在第一次调用时有效。
2. var rowNum = parseInt($(this).getGridParam("records"), 10); 得到数据条数。
3. jQuery("#list_d").clearGridData();清空数据。
4. jQuery("#list").getCell(ids,"Key");获取第ids行的key列。
5. $("#list").jqGrid('setSelection', "1");选中第一行。放在loadComplete:中在gird加载完成的时候自动选中第一行。loadComplete:function(data){$("#list").jqGrid('setSelection', "1");
}
6. 对于像1中的可编辑的字段,可以设定rule,参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editrules
7. 修改Option,以URL为例
jQuery("#list_d").jqGrid('setGridParam',{url:"xxx.aspx",page:1}).trigger('reloadGrid');
*请认真填写需求信息,我们会在24小时内与您取得联系。