cms概述
为了找到一个合适的cms网站系统,我花了一番功夫搜索了多种cms,包括我用过的和没用过的,知道的和不知道的,当然,必须是开源的、免费的、生成静态页面的.到各自的官方网站,查看了有关资料,下载了最新版试用,对比各自优缺点。
风讯网站内容管理系统(FoosunCMS)
官方网站 http://www.foosun.net/
官方论坛 http://bbs.foosun.net/
最新版及更新日期 V4.0 sp4 20070412
下载地址 http://www.foosun.net/FsDown/DownLoad/
在CMS产品领域里,FoosunCMS已形成内容管理系统整站解决方案。从《风讯网站内容管理系统》FoosunCMSv0410版至今天的《风讯网站内容管理系统》FoosunCMSv4.0版,系统经过几次飞跃性改进,在原有的FoosunCMS系列优势上取得的重大突破,更加“傻瓜”化、人性化,更加符合广大用户的需求,从而使得网站的架设与管理变得极其轻松!特别优化的模块化体系结构,强大的HTML静态生成功能,便捷的后台管理,以人为本的设计理念。
FoosunCMS系统包括了信息采集、整理、分类、审核、发布和管理的全过程,具备完善的信息管理和发布管理功能,是企事业单位网站、内部网站和各类ICP网站内容管理和维护的理想工具。现推出FoosunCMS新版本是国内领先的第一款集成web2.0元素的、模块化的、开源的CMS建站系统。会员系统集成web2.0元素,满足国内企业级主流市场建站对新兴流行建站功能的需求,模版支持CSS+DIV自由设计,便于客户简单快捷的打造符合自己产品特色企业级门户站点。
FoosunCMS新版功能系统模块化,自动更新等各类功能可由用户需求自由组合,有特殊需要的用户可以进行产品定制或者做第三方功能模块的开发。采用该系统客户群体,如企业、门户、政府各部门等可以随时方便地提交需要发布的信息而无须掌握复杂的技术。
创力网站管理系统
官方网站 http://www.aspoo.com/
官方论坛 http://bbs.aspoo.com/
最新版及更新日期 v3.1.0622 20060622
下载地址 http://www.aspoo.com/Html/Soft/Products/31.html
《创力网站管理系统》英文全名《CreateLive CMS》以下简称“Cl CMS”:
是创力网和北京今日学易科技有限公司基于ASP技术开发的网站管理系统,是一个经过完善设计并适用于各种服务器环境的易用、安全、高效、快速、优秀的网站解决方案。《Cl CMS》自1.0发布以来,以安全、快速见称。历经《Cl Web 2.0》,再凭着丰富开发经验,和不断创新的精神,经过几个月的努力,打造了全新的《CreateLive CMS 3.1》。
全静态HTML文件生成。《CreateLive CMS 3.1》独创了HTML生成功能:
可将站点首页、频道首页、各栏目、以及每个内容页都生成静态HTML文件,大大提高浏览速度及搜索量。HTML生成各频道有14种生成文件存放结构选择,5生成文件命名形式选择,可随意定生成的扩展名,一切更可能的根据您的喜好DIY。同时将各频道导航、栏目导航、广告等实行JS生成,并调用,更改后并自动刷新JS,不必再全部重新生成HTML。
无限频道复制功能。《CreateLive CMS 3.1》无限频道复制功能:可无限复制文章、下载、图片、影视等模版,复制出来的频道,完全独立设置,独立模版。
各频道完全独立的强大JS功能。《CreateLive CMS 3.1》强大JS功能:强大的Js设置,采用标签式管理,可自定义显示内容及HTML代码,让您非常容易的做出自己个性的Js。同时,Js每天会自动刷新,让您免去了每次都要进后台点刷新Js的烦恼。
再配合无限频道复制,做一个自己个性的大站已不是梦想。
攻击防护及管理事件记录。《CreateLive CMS 3.1》以安全为基础,周密的代码中设计,可自动屏蔽恶意攻击代码,更集成防SQL注入程序。从而全面防止各种SQL注入攻击手段,并进行记录在案,保证了系统的安全和稳定。更详细的管理事件记录
管理员每一步后台操作都记录在案。
模板化体系。《CreateLive CMS 3.1》界面和程序分离,所有模块均通过标签调用,集成类同Macromedia Dreamweaver一样简单的可视模板编辑方式,修改模板容易、快捷。
数据管理。《CreateLive CMS 3.1》提供强大的数据备份和恢复功能。可以在线备份、恢复、压缩数据库。查看系统空间占用情况、系统初始化、查看服务器信息及到在线直接执行SQL语句。
科汛网站管理系统(KesionCMS)
官方网站 http://www.kesion.com/
官方论坛 http://bbs.kesion.com/
最新版及更新日期 V3.2 Build070411 20070411
下载地址 http://www.kesion.com/down/
科汛网站管理系统V3.2正式版集成Web2.0元素,她是一个经过完善设计有着及其强大的会员互动和独特创新的内容管理系统。主要功能模块包括:文章频道、图片频道、下载频道、动漫频道、音乐频道、影视频道、商城频道、供求频道、采集管理 、专题频道等等。系统通用模块:用户管理、博客日志管理、相册管理、音乐盒管理、朋友圈管理、广告管理、公告管理、模板管理、网站信息配置、高级自定义SQL扩展标签,RSS在线订阅功能、网站统计、邮件列表、邮件群发、数据库管理、站内短消息、收费模块、文件上传、友情链接、调查管理、操作日志记录、缩略图及水印、IP访问限制管理、Google站点地图、站内搜索小助理、在线HTML编辑器模块等。
Kesioncms V3.2是适用于各种服务环境下的的Web站点或商务平台的最佳解决方案,她由科汛网络开发精心设计,是一款适合于从个人站长到各大企业方面应用需求的软件,KesioncmsV3.1为您提供一个更安全、更稳定、更高效、更快捷的Web站点和一体化的商务平台解决方案。同时系统采用人性化的Windows操作方式开发,操作简单,运行速度快,服务器资源占用更少;无论在稳定性、负载能力、安全等方面都有可靠的保证并赢得了广大用户的良好称赞。
JTBC(CMS)网站内容管理系统
官方网站 http://www.jtbc.net.cn/
官方论坛 http://www.jtbc.net.cn/forum/
最新版及更新日期 v3.1.0622 20061114
下载地址 http://www.jtbc.net.cn/down/
JTBC网站内容管理系统是一套开源,免费,并且可对现有模块进行扩充与克隆的网站系统核心,采用UTF-8编码,采取 语言 - 代码 - 程序两两分离的技术模式,纳入了模块安装文件的概念,全面的使用了模板包与语言包结构,为用户的修改提供方便,网站内容的每一个角落都可以在后台予以管理,是一套非常适合用做系统建站或者进行二次开发的程序核心。
JTBC与其他CMS相比,更注重于可扩展与可二次开发性。使用JTBC,您可以快速的构建一个网站,在此过程中更关注于网站设计方面的内容。如果您是经营着一家提供WEB服务的公司,您是否还在为程序员之间无法默契配合而伤神,是否还在冒着单一核心程序员的风险,使用JTBC您可以完全的解决这些问题:规避单一核心程序员风险,统一程序员工作,降低成本,扩大应用范围以及增强工作效率,发掘其他工作人员的潜能(JTBC的简单应用可以只了解HTML的相关内容),同时随着JTBC功能的增强以及应用范围的扩大而具备更大的应用实力。
KingCMS网站内容管理系统
官方网站 http://www.kingcms.com/
官方论坛 http://www.kingcms.com/Fornms
最新版及更新日期 BETA 1118 20061118
下载地址 http://www.kingcms.com/download.html
KingCMS 3.0 是一款小巧、高效、人性化的, 基于WEB技术的内容管理系统。
系统特性:
1) 部署简单快速 系统安装包仅一个admin文件夹,前端文件全部经模板处理后生成,完全可以做到单模板网站
2) 全站生成真正的静态html文件 生成静态文章和论坛,大大减少服务器压力,不仅是内容页面,导航也是静态HTML页面
3) 可扩展标签 基于xml名字空间样式的标签,调用简单,调用样式随意自如
4) 支持多种浏览器及小屏幕 可支持 IE 5.5+, Firefox 1.0+, Mozilla 1.3+ and Netscape 7+ 和低分辨率要求(800x600)。
5) 多国语言的支持 系统和语言包的分开设计,可以支持或自行扩展任何语言界面,不仅前台不同的栏目指定不同的语言,管理员和用户界面也可以根据需要设置界面语言。
6) 面向搜索引擎的优化 用户定义关键字词库,自动或手工插入关键字,自动插入页面Description,自动生成站点地图及GoogleSiteMaps文件。
7) 生成缩略图(需要aspjpeg支持) 自动生成指定尺寸的缩略图,图像大小直接在标签中指定。
8) 其他 a) 极快的生成。 b) 不需要用DLL组件。 c) 多重加密技术,安全性更高。
NB文章系统(NBArticle)
(挺好的一个系统,不知为何,官方网站和论坛一夜之间不做了,只留下一个演示网站和一个帮助网站)
官方网站 http://www.nbarticle.com/(没有实质内容)
官方论坛 http://forum.nbarticle.com/(打不开)
最新版及更新日期 EliteArticle System Version 3.00 Beta2 2006
下载地址 各大源码下载站
官方帮助:http://help.nbarticle.com
NB文章系统(NBArticle)是由原NB联盟一部分成员经过几年的开发经验积累而成的一个高效、简洁、安全的文章系统,无任何多余累赘的功能;高效的页面执行效率,特别优化系统安全性能,可令你在茫茫网海中一支独秀。与MS SQL Server结合,更能发挥更好的效果。
特色:
ASP+MSSQL的完美结合。本系统不同于市面上的所谓MSSQL版本只是单纯的把数据库形式由ACCESS转为MSSQL,而是在程序中大量的时候存储过程、触发器,从而能够最大程度的发挥MSSQL的海量数据处理能力。
给你真实的页面执行速度体验。我们承诺绝不使用某些系统所做的名为数据分表,实则清空数据库的所谓程序加速方法,而是充分利用MSSQL的高效数据处理能力,即使在总数据100万记录,单个栏目50万记录的情况下,分页平均只需30ms。
独有的栏目权限限制和强大的用户管理功能,能够让你非常容易的管理用户可阅读的文章栏目和内容,从而让你有不单是文章系统或新闻系统的畅快体验。独有的用户投稿及个人文集功能。
合理的使用系统缓存技术,在加速页面执行的同时不对服务器造成资源的浪费。
会员收藏夹功能。 强大的HTML生成功能。
页面与程序的完全分离。独创的MTT(Magic Template Tag)模版标签功能,使管理员只需在后台进行修改页面模板,即可以完成网站的改版。
通用灵活的多模板设计方法。绝佳的系统安全。经过联盟成员及兄弟团体的严格测试,本系统前后台的安全性能绝对无容置疑。
文章栏目采用NB联盟原创的无限级分类,操作简明,功能强大,速度快捷。便捷的栏目排序、移动、合并功能。并能单独对栏目设置外部跳转连接。
人性化的后台管理员权限配置,细致到某个栏目的文章发布、审核、编辑、删除操作,使你方便的对后台管理员进行细致的划分,并保证后台管理的安全性及一致性。
用户组强大的自定义设置功能,能够使您方便快捷的对会员进行批量管理或个人自定义。
强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从word中粘贴"功能,能全部清除word排版格式多余代码。 标题图片可选择从本地上传或远程图片文件中选择。完善的评论及评论管理功能。 支持在多个在线编辑器中轮转使用。
无论是asp版式还是html版式,均对搜索引擎进行了优化,只需使用短短一段时间,即可马上登陆搜索引擎。
全系统UTF-8化。可方便用于创建面向其他国家语言的网站。
淘特CMS (以前没有听说过)
官方网站 http://cms.tot.name/
官方论坛 http://bbs.tot.name/bbs/
最新版及更新日期 tot-cms-5.03 20070525
下载地址 http://cms.tot.name/cms/download.htm
淘特CMS是我们根据多年门户网站技术经验总结国内外优秀CMS系统开发出的一套稳定、安全、高效的内容管理系统。本系统注重安全、快速,经过出色的技术优化,保证免费版至少支持10万条文章记录快速发布、管理等,目前是所有免费CMS中支持数量最多、执行速度最快的一个。后台使用 ASP脚本,管理操作方便,添加新闻时所有相关的栏目均会自动生成静态页面。而且各频道的首页、包括网站首页等均可使用本系统的发布功能,随时生成静态文件。真正实现了全站的静态生成。
广告管理(系统广告的在线管理,添加、修改删除)。数据库在线修改功能。包括“新建表”、添加、修改字段等。保存远程图片的功能。新闻自动采集功能。RSS新闻聚合功能。JS文件的在线管理,添加、修改、删除。
===================================================================================
比较shopex和ecshop区别
shopex和ecshop那个好?
shopex 是一款免费程序 但是并非开源程序 其功能还是比较强大 ecshop是一款开源程序但是如果用于大型商业 都是要买版权的 在国外如果你使用非授权的程序做商业活动只要该软件提供商发一份email给idc商,你的网店就会马上被关闭!!! 所以 如果你刚起步 建议 使用ecshop 因为他开源你可以对前端的模板 已经后台的功能做个性的修改 (前提是 你对模板和程序有一定的了解)!!个人感觉 ecshop运行速度要优于shopex,shopex4.72 是非常慢的 不生成静态页面 慢的不行 shopex4.8 因为用了框架虽然速度快了点 但是还是慢 而且前端使用js框架mootools 对模板的制作限制太多!!!但是有一点 ecshop目前是率属于shopex总公司的!!所以 你用ecshop也是在使用shopex公司的产品 呵呵:)
SHOPEX与ECSHOP是目前国内流行的两款PHP网上商店系统。一个是老牌劲旅,一个是后起之秀,由此,很多网友都开始不由自主地将“SHOPEX”与“ECSHOP”之间进行比较。虽然“SHOPEX”发展多年功能已比较完善,而“ECSHOP”的横空出世是否能够抢占用户的眼球,积蓄实力以期能与“SHOPEX”一较高低呢?在下文中将通过各项功能比较来窥视“SHOPEX”与“ECSHOP”孰优孰劣。(备注:这里的shopex指ShopEx网上商店系统)
相关软件下载:
ShopEx网上商店系统v4.6
ECSHOPv2.1.2a
一、代码免费及开源
SHOPEX:ShopEx网上商店系统提供免费下载、免费使用、免费升级,没有使用时间和功能上的任何限制,与商业版本一样。但是SHOPEX是经过优化,后台源码是加密的,前台源码是开源的。
ECSHOP:ECSHOP则是一款开源免费的通用电子商务平台构建软件,用户可以根据自己的商务特征对ECSHOP进行定制,增加自己商城的特色功能。
点评:SHOPEX和ECSHOP同样免费;前且的小信使、提醒工具、后台生成静态页面的文件都是经过加密处理的,只支持前台开源,不利于用户的修改和二次开发。而ECSHOP且完全支持开源,在这点上ECSHOP占据了上方,我们也相信,在将来的某一天,SHOPEX也实现开源。
二、支付网关
SHOPEX:目前SHOPEX内置银联、快钱、支付宝等国际国内三十四个网上支付网关。无需另行制作网关接口,用户自由选取合适的网关,快速实现网上在线支付功能。
SHOPEX内置支付网关
ECSHOP:以插件方式提供对支付网关的支持,用户可以自行选择所需的支付方式。ECSHOP内置了银联、快钱、支付宝等国内较为常用的六个支付网关。
点评:SHOPEX和ECSHOP都会根据广大用户的需求提供更多的支付网关选择。SHOPEX虽然提供了多种支付网关,但用户如需要一些较为少用的网关,且必须通过向官方定制才行。ECSHOP则提供完整的支付插件规范文档,便于用户自行修改和扩展。
三、留言及会员整合
SHOPEX:SHOPEX不仅内置留言板,还提供了外置的留言本;系统提供了同cmsware和discuz!论坛的整合的功能模块,可以添加即时通讯包括QQ、MSN、淘宝旺旺、阿里巴巴贸易通和Skype五种,添加之后可以选择显示在页面底部版权信息处或者联系我们页面。后台整合了在线客服系统中基于WEB实现的一款免费网页对话客服系统-53KF客服系统。
ECSHOP:ECSHOP同样提供了内置留言板,ECSHOP采用插件机制实现与论坛的无缝整合。目前已支持discuz,phpwind,phpbb,vbb,MolyX,BMForum,ipb等常用论坛。实现了会员数据的共享,无需重复登陆和注册,并保留了论坛和商场独立的登陆,注册入口。
点评:SHOPEX只提供整合接口的技术文档,如果用户需要其他论坛接口需要自己做。而ECSHOP则几乎整合了目前常用的php论坛程序。
四、商品管理
SHOPEX:商品批量上传和批量编辑,可以快速成批导入商品数据,快捷方便的修改商品;组合商品功能,可以用于组配商品销售和加价购买的方式以及商品捆绑促销;非实体商品和数字商品的销售功能(游戏点卡、上网卡、软件注册码、图书),在线取卡、在线充值与卡信息批量上传。
ECSHOP:ECSHOP拥有完备新颖的商品管理功能,支持商品相册,关联商品,关联文章,配件等。允许商品属于多个商品分类,可后台设置商品属性,不同属性可对应不同价格。使用插件机制实现虚拟商品管理功能。目前提供虚拟卡插件。该插件实现了游戏点卡、网卡等的在线取卡与卡信息批量上传等功能。提供对商品加标签功能,便有用户查找和分类。
点评:单纯以商品管理功能而论(不涉及BBS、存储空间等附加服务),SHOPEX与ECSHOP非常类似,有些功能只是实现的方式不一样,一时之间难分高下。
五:支持语言
SHOPEX:多种国际语言版本,可以轻松建立简体中文、繁体中文和英文的网上商店,也可根据需要建立其他任意语言文字的网上商店。用户可以设置后台文字显示的语言。
ECSHOP:可轻松实现多语言的转换,实现语言包和程序的分离。目前提供简体中文和繁体中文语言包。用户也可根据需要翻译和定制语言包。
点评:后台可以用任意一种语言对前台进行管理、录入而没有阻碍,大大方便了用户的管理,在这点上,SHOPEX更加的符合广大用户的习惯。
六、模板设计
SHOPEX:强大的模板自由定制功能,内置多套模板,您可随时更换调整,更可对每个模板进行个性化编辑,不再千人一面;ShopEx也可以为您量身定制个性化模板,ShopEx免费开放模板接口,您也可以自行设计、使用全新模板。
ECSHOP:对Dreamweaver模板机制提供完美支持。可使用Dreamweaver制作和查看自己的模板。同时程序提供对模板显示内容控制。如可以在页面上灵活添加指定分类的商品,或指定品牌的商品等。可随意调整广告的显示,而无需手动修改模板。
点评:对于一些初级用户来说,现成的总比需要动手去做的好,在内置模板方面,ECSHOP要加把劲。
七、代码和执行性能(搜索优化)
SHOPEX:在搜索引擎优化方面,SHOPEX选择了与点石互动合作,特别针对各大搜索引擎进行优化,有助于网店的搜索引擎收录;网站的META-tags和TITLE可自定义,方便进行搜索引擎优化,更容易地被搜索引擎收录;软件构架灵活,考虑未来功能扩充之需要,具有较强的可扩展性。
ECSHOP:整站对搜索引擎有优秀的支持。每个页面都为搜索引擎提供丰富的信息,有助于搜索引擎的收录。提供伪静态页面的支持,并对静态链接地址进行优化。ECShop独家支持两种URL重写方式,支持sitemaps0.9网站索引规范,能够为站点被搜索引擎的收录做到最大限度的支持和帮助。强大的缓存机制极大的提高了程序执行速度。
点评:在搜索优化方面,两家都做了很大的努力。相对ECSHOP来说,SHOPEX发展较早,程序稳定成熟,bug也比较少。
八、常规功能及其他
SHOPEX:网站LOGO、名称、SMTP服务器等参数管理,并且可以增加网站定制首页的功能;提供了批发方案设置。客户可以选择商品的配送方式,比如快递、EMS、火车托运、空运等等配送方式,系统自动计算相关配送价格。
ECSHOP:可通过后台定制页面显示,网站LOGO。提供丰富的参数对网站进行定制。提供丰富的促销管理功能,如红包,赠品,夺宝奇兵,团购等贴心促销功能。配送方式通过插件提供,便于用户自主选择和扩展。能自动计算用户配送费用。
点评:在参数设置和促销功能方面,ECSHOP显得比SHOPEX要丰富的多。对于这些功能是否有必要,则是“仁者见仁,智者见智”,在这里不做过多评论。
总结
在以上的几个回合的比较中,“ECSHOP”看似占据了上方,但也非并表示它拥有绝对的优势。从上文中可以看出“ECSHOP”亟待改进与增强之处也不少。
而且SHOPEX本身就是以功能全面、易用、强大见长;而ECSHOP这个“免费开源”和灵活的插件机制取胜,两者也有一定的差异。
“ECSHOP”作为后起之秀能否迅速崛起,也许还有更远的路要走。就如一位用户说的“我喜欢ECSHOP,但我用的是SHOPEX”。
======================================================================================
smarty模板引擎的入门
虽然网上关于这东西的教程已经多如牛毛,不过总是缺乏实例,而且文章都是抄来抄去的就那三两个版本。所以我在这儿举两个例子再多讲一次。
主流的PHP模板有smarty和phplib。
在这里我介绍一下smarty模板,当作对初级phper的一个路引吧。
smarty是PHP官方出的模板,官网是http://smarty.php.net/。目前最新的版本是2.6.18.
对于PHP,我建议还在用PHP4的人马上升级到PHP5,因为php4很快就要被官方放弃不再更新。用mysql数据库的最好也别再用4.1以下版的。高版的数据库开始支持更多的字符集,触发器,存储过程,复合查询等特性。
言归正传。
smarty实际上也是些PHP程序。和你编写的PHP程序没什么两样。只不过是一些封装好的能实现模板功能的类。
用法:
一,把smarty的压缩包下载下来后解压到你的WEB目录。
二,看看smarty目录下的文件夹是否齐全。包含cache目录(用来存放缓存文件),configs目录(存放配置文件),libs目录(smarty主程序的所在),templates(存放你的模板的目录),templates_c(被smarty编译过的模板文件存放路径)。当然了,这些目录不一定在这里,你可以将它们放在任何你想放置的位置,只要在你写的PHP程序中包含正确就行了。
三。在你的程序主包含进来主程序和配置信息
<?php
require('./smarty/libs/Smarty.class.php'); //包含主程序
$smarty= new Smarty();
$smarty->template_dir = './template'; //模板目录
$smarty->cache_dir ='./cache'; //缓存的目录
$smarty->compile_dir = './smarty/templates_c'; //编译的目录
$smarty->caching=false; //禁用缓存,调试程序的时候设为false,正常运行的时候可设为true
$smarty->left_delimiter='<{'; //设置你的模板中标签的左,右分割符,如果没有这两行,程序将默认为{}这两个符号,因为容易和模板中的javascript程序搞混,故一般为重设为<{}>,或者是{{}},当然你也可以改为任何你认为除了标签外都不会用得上的符号。
$smarty->right_delimiter='}>';
?>
这样,你的smarty就配好了。
怎么和你的程序配合使用呢?还是举个hello world的例子吧。
普通的PHP程序为: index.php
<?php
$str="hello world";?>
<html>
<head>
<title><?php echo ($str);?></title>
<body>
<?php echo ($str);?>
</body>
</html>
用上smarty后,需要有两个文件,一个是PHP程序,一个是模板。
PHP程序如下:index.php
<?php
require('./smarty/libs/Smarty.class.php');
$smarty= new Smarty();
$smarty->template_dir = './template';
$smarty->cache_dir ='./cache';
$smarty->compile_dir = './smarty/templates_c';
$smarty->caching=false;
$smarty->left_delimiter='<{';
$smarty->right_delimiter='}>';
$str="hello world";
$smarty->assign("info",$str); //把变量的值赋给模板中的标签变量
$smarty->display("hello.html"); //使用hello.html这个模板。模板可用DW做,在排版上和做普通网页没什么两样。模板在存放在上面你指定的模板目录中去。默认的模板扩展名为tpl。其实叫什么都无所谓。
?>
模板文件hello.html
<html>
<head>
<title><{$info}></title>
</head>
<body>
<{$info}>
</body>
</html>
好了,运行一下试试吧。访问index.php.
显示结果是不是一样呢?不了解的人可能会问了,这看起来好像很麻烦,代码多了许多。
这只是输出一行,你试着输出更多的信息看看。
用smarty有什么好处呢?
你试着把caching=false更改为true,打开它的缓存,保存,再通过浏览器访问一下index.php。然后更改程序中的输出信息hello world,比如ABCDEFG。再访问一下它。你看到了什么?没错!输出的信息依然是hello world。可是我访问的明明是index.php啊,为什么输出的东西和我写的程序不一样呢?这就是它调了它缓存的网页。如果这些要输出的数据是从数据库中读出来的,那么开启了缓存后,只有程序第一次运行的时候,它会读取数据库,以后再有人访问,程序就不再读数据库,而是从缓存中取出数据输出的客户端,这将极大的降低数据库的压力。还可以使用$cache_lifetime来设置缓存的有效时间(单位秒),来提高更新比较频繁,例如论坛等的运行效率。
第二个好处,模板技术把MVC的开发思想引入了PHP。让不同的开发角色在大中型项目中各司其职。一套程序写成了,可以建成N个网站,只需要用Dreamweaver修改模板就可以,程序不需要进行任何改动。
怎么样?smarty用起来很简单吧?
下面,再举个稍复杂点结合数据库输出多条记录的例子,看例子前很讲一个标签section
用法是 section(name=标签名 loop=数组变量)
这个标签要闭合。例如
<{section name=str loop=$str}>
<{/section}>
PHP程序:
<?php
require('./smarty/libs/Smarty.class.php');
require('./config.php'); //包含你的数据库连接配置文件
$smarty= new Smarty();
$smarty->template_dir = './template';
$smarty->compile_dir = './template_c';
$smarty->cache_dir ='./cache';
$smarty->caching=false; //测试时禁用缓存
$smarty->left_delimiter='<{';
$smarty->right_delimiter='}>';
$smarty->assign('page_title','新闻');
$query="select * from news order by id desc limit 0,10";
$db=mysql_query($query,$conn)
while ($rs = mysql_fetch_array($db)) {
$arr[]= array("id"=>$rs['id'], "title"=>$rs['title'],"date"=>$rs['date']);
$smarty->assign('news',$arr); //把数组变量赋给模板的标签变量
}
$smarty->display('index.html');
?>
模板index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><{$page_title}></title>
<link href="css/css.css" rel="stylesheet" type="text/css">
</head>
<body>
<div align="center">
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="29"><table width="100%" height="29" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="28" align="left" valign="bottom"><img src="images/xw-1.gif" width="28" height="29"></td>
<td width="689" align="left" valign="middle" background="images/xw-bj.gif" class="font-1">动态新闻</td>
<td width="57" background="images/xw-bj.gif"><img src="images/xw-more.gif" width="30" height="11"></td>
<td width="6" align="right" valign="bottom"><img src="images/xw-2.gif" width="6" height="29"></td>
</tr>
</table></td>
</tr>
<tr>
<td class="bk-1"><table width="771" height="115" border="0">
<tr>
<td width="37" height="62"><div align="center"></div></td>
<td width="724" rowspan="2">
<table width="543" border="0">
<tr>
<td width="16"> </td>
<td width="390" align="left" valign="middle" class="font-2">标题</td>
<td width="123" align="left" valign="middle" class="font-2">日期</td>
</tr>
<{section name=news loop=$news}>
<tr>
<td align="left" valign="middle"><img src="images/xw-3.gif" width="8" height="8"></td>
<td height="22" align="left" valign="middle" background="images/xw-bj1.gif" class="font-2"><a href="./view.php?id=<{$news[news].id}>"><{$news[news].title}></a></td>
<td height="22" align="left" valign="middle" background="images/xw-bj1.gif" class="font-2"><{$news[news].date}></td>
</tr>
<{/section}>
</table>
</td>
</tr>
</table></td>
</tr>
</table>
</div>
</body>
</html>
==============================================================================
例4.模板控制(if / elseif / else/ endif )
=======================================================
example4.tpl
=======================================================
<html>
<head><title>模板中的流程控制</title><head>
<body>
<table border="1">
{assign var="tbColor" value="#D4D0C8"}
色彩:{$tbColor}<br>
{section name=loop loop=$News}
{if $tbColor == "#D4D0C8"}
<tr bgcolor="{$tbColor}">
{assign var="tbColor" value="#EEEEEE"}
{else $tbColor == "#EEEEEE"}
<tr bgcolor = "{$tbColor}">
{assign var="tbColor" value="#D4D0C8"}
{/if}
<td>{$News[loop].newsID}</td>
<td>{$News[loop].newsTitle}</td>
<tr>
{/section}
</table>
</body>
</html>
=======================================================
example4.php
=======================================================
<?php
require_once ("./public/inc/F117_Smarty.php");
$smarty = new F117_Smarty;
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';
$smarty->config_dir = './configs/';
$smarty->cache_dir = './cache/';
$smarty->caching = false;
$array[]= array("newsID"=>"001", "newsTitle"=>"第1条新闻");
$array[]= array("newsID"=>"002", "newsTitle"=>"第2条新闻");
$array[]= array("newsID"=>"003", "newsTitle"=>"第3条新闻");
$array[]= array("newsID"=>"004", "newsTitle"=>"第4条新闻");
$array[]= array("newsID"=>"005", "newsTitle"=>"第5条新闻");
$array[]= array("newsID"=>"006", "newsTitle"=>"第6条新闻");
$array[]= array("newsID"=>"007", "newsTitle"=>"第7条新闻");
$array[]= array("newsID"=>"008", "newsTitle"=>"第8条新闻");
$smarty->assign("News", $array);
$smarty->display("example4.tpl");
?>
smarty实例教程(4)
==================================================
example4.php输出:
==================================================
<html>
<head><title>模板中的流程控制</title><head>
<body>
<table border="1">
<tr bgcolor="#D4D0C8">
<td>001</td>
<td>第1条新闻</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>002</td>
<td>第2条新闻</td>
</tr>
<tr bgcolor="#D4D0C8">
<td>003</td>
<td>第3条新闻</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>004</td>
<td>第4条新闻</td>
</tr>
<tr bgcolor="#D4D0C8">
<td>005</td>
<td>第5条新闻</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>006</td>
<td>第6条新闻</td>
</tr>
<tr bgcolor="#D4D0C8">
<td>007</td>
<td>第7条新闻</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>008</td>
<td>第8条新闻</td>
</tr>
</table>
</body>
</html>
模板文件中使用:
{if $tbColor == "#D4D0C8"}
<tr bgcolor="{$tbColor}">
{assign var="tbColor" value="#EEEEEE"}
{else $tbColor == "#EEEEEE"}
<tr bgcolor = "{$tbColor}">
{assign var="tbColor" value="#D4D0C8"}
{/if}
这一语句块进行设置每一行的背景颜色, {assign var="tbColor" value="#D4D0C8"}还记的吧,是例3中设置模板内部变量的定义方法,
使用模板内置 的流程控制语句有时可以极大程度上提高程序的控制能力,下面一个例子是phpx.com中曾经有位朋友问过的,我将它作为
实例放在这里供大家学习.
----------------------------------------------------------------------------------
例5: 使用模板内置流程控制语句进行一行多单元格内容输出, 也就是在视觉上smarty每记输出几条记录:
================================================
example5.tpl
================================================
<html>
<head><title>一行输出多条记录</title></head>
<body>
<table>
<tr>
{section name=loop loop=$News step=1}
{if $smarty.section.loop.index % 4 == 0}
</tr>
<tr>
{/if}
<td>{$News[loop].newsID}</td>
<td>{$News[loop].newsTitle}</td>
{/section}
</tr>
</table>
</body>
</html>
====================================================
example5.php
====================================================
<?php
require_once ("./public/inc/F117_Smarty.php");
$smarty = new F117_Smarty;
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';
$smarty->config_dir = './configs/';
$smarty->cache_dir = './cache/';
$smarty->caching = false;
$array[]= array("newsID"=>"001", "newsTitle"=>"第1条新闻");
$array[]= array("newsID"=>"002", "newsTitle"=>"第2条新闻");
$array[]= array("newsID"=>"003", "newsTitle"=>"第3条新闻");
$array[]= array("newsID"=>"004", "newsTitle"=>"第4条新闻");
$array[]= array("newsID"=>"005", "newsTitle"=>"第5条新闻");
$array[]= array("newsID"=>"006", "newsTitle"=>"第6条新闻");
$array[]= array("newsID"=>"007", "newsTitle"=>"第7条新闻");
$array[]= array("newsID"=>"008", "newsTitle"=>"第8条新闻");
$smarty->assign("News", $array);
$smarty->display("example5.tpl");
?>
==================================================
example5.php输出内容:
==================================================
<html>
<head><title>一行输出多条记录</title></head>
<body>
<table>
<tr>
</tr>
<tr>
<td>001</td>
<td>第1条新闻</td>
<td>002</td>
<td>第2条新闻</td>
<td>003</td>
<td>第3条新闻</td>
<td>004</td>
<td>第4条新闻</td>
</tr>
<tr>
<td>005</td>
<td>第5条新闻</td>
<td>006</td>
<td>第6条新闻</td>
<td>007</td>
<td>第7条新闻</td>
<td>008</td>
<td>第8条新闻</td>
</tr>
</table>
</body>
</html>
说明:本来还可以优化,使得第一行不输出一个空行的<tr> </tr>,但是学习程序,简单为好,先就这么用了. 在这里说明一下:
{section name=loop loop=$News step=1}
{if $smarty.section.loop.index % 4 == 0}
</tr>
<tr>
{/if}
<td>{$News[loop].newsID}</td>
<td>{$News[loop].newsTitle}</td>
{/section}
{section}{/section}指的是一个循环部分,在下一节会有详细的介绍,我们主要来看看这一句:
{if $smarty.section.loop.index % 4 == 0}
$smarty.section.loop指出$smarty的实例中的section段有一个叫loop的部分, 它有一个属性叫index, 它的表示当前循环的索引值,
从0开始递增, 我们把它%4后与0相比较,也就是说,如果当前的索引值是4的倍数,它就输出一个</tr><tr>,否则执行下面的部分,
很简单的就解决了一个在程序上实现起来很麻烦的事情.