shtml 在CMS程序中的运用和介绍
文章来源:http://down.chinaz.com/server/201106/695_1.htm
现在基本各种主流CMS在生成静态文件时,都提供实现自定义扩展名的功能,其中就有生成.shtml的。那么SHTML究竟是什么?有哪些特点?CMS中网页生成SHTML有哪些优势?
1. 什么是SHTML? SHTML有哪些特点
SHTML实际是支持SSI指令的静态HTML文本。SSI英文为Server Side Include,中文意即服务器端包含。通过SSI指令可以通过注释行调用命令或指针,可以在静态文本中直接包含其它静态文件,只要使用一条简单的SSI 命令就可以实现整个网站的内容更新,动态显示时间和日期,以及执行shell和CGI脚本程序等复杂的功能。
SHTML的特点:
目前,主要有以下几种用用途:
显示服务器端环境变量<#echo>
将文本内容直接插入到文档中<#include>
显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)
直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)
设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式)
高级SSI<XSSI>可设置变量使用if条件语句。
SHTML静态文件在发送到浏览器之前服务器首先会对其中的SSI命令进行处理,把所包含的文件以静态HTML的形式整合到SHTML文件中来后再输出。被包含的HTML文件如果有更新,网站静态SHTML页面中的内容会自动更新显示。可以使用一些SSI指令直接显示一些内容,如客户端IP,当时时间等,及执行一些程序等。
2. CMS中网页生成SHTML有哪些优势?
在CMS生成静态文件是使用.shtml扩展名的最大的优势是可以直接在生成的静态文件中动态的包含其它需要经常更新的内容或者公共内容,公共内容更新后,静态文件无需重新生成,内容即自动 更新。
如内容页侧边栏调用最新文章列表、推荐文章等,如果内容页生成静态,后面这些列表无法自动更新,非得手动全站生成,这样是非常麻烦的,如果使用生成.shtml的方式,那么把介边栏的文章列表生成单独的html文件,然后在.shtml中以ssi指令引用(<!--#include file="sidebar.html"-->),只有在文章有更新时,让侧边栏的列表文章静态文件如sidebar.html自动生成一下静态,全站内容页的侧边栏内容都自动跟着更新了。
如果CMS程序设计的好,在程序中做些判断,让以.shtml生成的页面,能够方便自定义一个html块来调用动态内容,这样会非常方便,不用每次更新内容页的一小点内容就需要全站生成。这一点,PHPCMS中的碎片功能设计的是非常不错的,PHPCMS中的碎片功能,可以方便在页面上自定义区域手动添加推荐内容,如果页面开启生成.shtml的功能,那么碎片自动以HTML静态文件的方式存储,然后以SSI指令包含到页面中,这样以后更改碎片中的内容时,无需全站页面重新生成,内容即自动更新。
更深度点的做法时,新建一个单页面,去掉头部和尾部,使用PHPCMS的标签如GET标签调用文章数据,然后生成静态,使用SSI指令包含在到模板中,生成静态后,以后每次添加新文章后,把单页面生成一下静态,整站通过SSI指令引用这个单页面的地方都自动更新。
3. 服务器如何开启SHTML?
1) 在IIS里添加一个应用程序扩展名映射:
在IIS网站属性=》》主目录=》》配置=》》应用程序配置界面=》》添加=》》添加/编辑应用程序扩展名映射=》浏览选择C:\WINDOWS\system32\inetsrv\ssinc.dll,扩展名填写.shtml,点选限制为GET,POST确定即可。
2) 在开启“在服务器端的包含文件”的扩展:IIS=》》WEB服务器扩展=》》“在服务器端包含文件”=》》允许
3)Apache则是根据你的设置情况而定,修改srm.conf如:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Options Indexes FollowSymLinks includes4)nginx 也有内置的SSI 模块 ngx_http_ssi_module,修改配置文件开启
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;4. SHTML的语法规则是什么?
CMS中生成静态采用.shtml时,使用最多的SSI指含某过于HTML文件包含指令,语法规则如下:
<!--#include file="sidebar.html"--> sidebar.html可改为任何需要被引用的HTML文件,不能是网址,可以是相对路径。使用该SSI指含包含静态文件后,以后只需更新静态文件里面的内容,全站引用该文件的地方都会跟着更新,无需生成。
如果<!--#include file="abc.php"-->包含的是PHP文件,那么,输出的不会是PHP文件执行的结果,而是PHP文件本身的内容。