1. 来自:http://blog.csdn.net/yanhui_wei/article/category/1220735
  2.  
  3. <?php
  4.  
  5. 思路:
  6.  
  7. 一、目前在企业中使用比较多的cms内容管理有如下几种:
  8.  
  9. 1dedecms
  10. 2phpcms
  11.  
  12. 二、我们选择学习v9版本的phpcms,主要有以下几点原因:
  13.  
  14. 1、基于MVC模式的内容管理系统
  15.  
  16. 2、碎片技术
  17.  
  18. 三、下面,我们就来进行phpcms v9的安装:
  19.  
  20. ci框架的安装,我们只需要按照如下步骤进行操作就可以了
  21. 1、官网:http://www.phpcms.cn 去下载phpcms v9最新的版本
  22.  
  23. 2、下载完毕后,解压,并将其复制粘贴到程序的主目录(d:/wamp/xmall/),然后再将其重命名为"mycms",那么"mycms" 就作为cms的项目名称存在了
  24.  
  25. 3、为我们的cms项目搭建一个虚拟主机:
  26.  
  27. 首先,找到httpd.conf配置文件,开启虚拟主机的配置
  28.  
  29. 然后,找到httpd-vhosts.conf配置文件,进行虚拟主机的配置
  30.  
  31. 最后,找到hosts配置文件,为我们的ci项目添加dns映射
  32.  
  33. 4、在浏览器中输入 http://www.mycms.com/install/ 回车,就可进行phpcms v9内容管理系统的安装
  34.  
  35. 四、phpcms v9框架的目录结构分析:
  36.  
  37. 了解v9框架的目录结构,有助于帮助我们快速建立起对v9框架的一个整体认识
  38.  
  39. 打开"mycms"项目,有如下文件和目录
  40.  
  41. 使用协议说明文档、英文版的用户手册,这两项不是项目所必须的,可暂时将其删除
  42.  
  43. |-----api 接口文件目录
  44. |-----caches 缓存文件目录
  45. |-----configs 系统配置文件目录
  46. |-----database.php 数据库配置文件
  47. |-----route.php 路由配置文件
  48. |-----system.php 系统配置文件
  49. |-----cache.php 缓存配置文件
  50. |-----configs_* 系统缓存文件目录
  51. |-----configs_commons/caches_data 主要用来存放后台设置的配置信息
  52. |-----category_content.cache.php栏目与站点映射所对应的配置文件
  53. |-----category_content_1.cache.php站点1下所有栏目的详细配置信息
  54. |-----category_item_1.cache.php 文章模型下各栏目所对应的数据量
  55. |-----category_item_2.cache.php 下载模型下各栏目所对应的数据量
  56. |-----category_item_3.cache.php 图片模型下各栏目所对应的数据量
  57. |-----keylink.cache.php 关联链接配置缓存文件
  58. |-----model.cache.php 三大模型配置缓存文件
  59. |-----mood_program.cache.php 表情配置缓存文件
  60. |-----position.cache.php 推荐位配置缓存文件
  61. |-----poster_template_1.cache.php广告位模板配置缓存文件
  62. |-----sitelist.cache.php 站点列表配置文件,主要缓存所有站点的基本配置信息
  63. |-----type_content.cache.php 多个站点下的类别配置信息
  64. |-----type_content_1.cache.php 当前站点下类别配置信息缓存文件
  65. |-----urlrules.cache.php url规则配置信息缓存文件
  66. |-----urlrules_detail.cache.php url规则详细配置信息缓存文件
  67. |-----special.cache.php 专题配置信息缓存文件
  68. |-----role.cache.php 角色配置缓存文件
  69. |-----link.cache.php 友情链接缓存文件
  70. |-----configs_model/caches_data
  71. |-----content_form.class.php 生成表单的类库缓存文件
  72. |-----content_input.class.php 入库时,对表单数据进行验证的类库缓存文件
  73. |-----content_output.class.php 对从数据表中查询出来的数据进行处理的函数
  74. |-----content_update.class.php 对要更新的数据进行有效性验证的函数
  75. |-----model_field_1.cache.php 文章模型所有模型字段的缓存信息
  76. |-----model_field_2.cache.php 下载模型所有模型字段的缓存信息
  77. |-----model_field_3.cache.php 图片模型所有模型字段的缓存信息
  78.  
  79. |-----phpcms phpcms框架主目录
  80. |-----languages 框架语言包目录
  81. |-----libs 框架主类库、主函数库目录
  82. |-----classes
  83. |-----form.class.php 表单生成类库文件
  84. |-----application.class.php 应用程序类库文件
  85. |-----image.class.php 图片处理类库文件
  86. |-----attachment.class.php 附件处理类库文件
  87. |-----param.class.php URL参数处理类库文件
  88. |-----functions
  89. |-----global.func.php 公共函数库文件
  90. |-----extension.class.php 扩展函数库文件
  91. |-----model 框架数据库模型目录
  92. |-----content_model.class.php 内容模型文件
  93. |-----admin_model.class.php 管理员模型文件
  94. |-----attachment_model.class.php 附件模型文件
  95. |-----modules 框架模块目录
  96. |-----admin admin模块
  97. |-----index.php index.php控制器文件
  98. |-----content content模块
  99. |-----classes content模块通用类库
  100. |-----fields content模块模型字段
  101. |-----functions content模块通用函数库
  102. |-----templates content模块后台模板文件
  103. |-----index.php index.php控制器文件
  104. |-----templates 框架系统前台模板目录
  105. |-----default 默认的模板风格
  106. |-----content content模块模板目录
  107. |-----category.html 频道页模板文件
  108. |-----list.html 列表页模板文件
  109. |-----show.html 内容页模板文件
  110. |-----config.php 模板配置文件
  111. |-----phpsso_server phpsso主目录
  112. |-----statics 网站素材文件目录
  113. |-----css css文件
  114. |-----images images文件
  115. |-----js js文件
  116. |-----uploadfile 上传附件
  117. |-----admin.php 后台入口文件
  118. |-----index.php 前台入口文件
  119.  
  120. 五、phpcms v9中的url路由规则:
  121.  
  122. 浏览器中输入 http://www.mycms.com/index.php?m=content&c=index&a=list&catid=1 回车时,默认情况下会找到
  123. phpcms 框架主目录
  124. |-----modules 模块目录
  125. |-----content content模块
  126. |-----index.php index.php控制器中list方法来显示列表页面
  127.  
  128. 到底是不是呢?我们打开index.php控制器文件,并在index方法中添加一些代码,运行输出,证明确实如我们所料
  129.  
  130. 我们可以将浏览器中的url归纳如下:
  131. http://域名/入口文件?m=模块名&c=控制器&a=方法名&catid=参数值
  132.  
  133. 当我们在浏览器中输入http://www.myshop.com/index.php 后面没有跟任何参数, 回车时,默认情下会将首页显示出来
  134.  
  135. 这是因为phpcms v9为我们指定了一个默认执行的模块、控制器和方法
  136.  
  137. 默认控制器的设置在 "caches/configs/routes.php" 配置文件中进行设置的,我们可以重新设置默认的控制器
  138.  
  139. 六、栏目的添加
  140.  
  141. 1pc设计者认为,栏目详情页的数据都应该属于一个模型,所以在添加栏目时,必须给栏目指定一个模型,至于要选择什么模型,完全取决于栏目详情页要显示什么类型的内容
  142. 详情页:文章信息类的内容 文章模型
  143. 详情页:图片类信息 图片模型
  144. 详情页:下载东西 下载模型
  145. 详情页:播放视频 视频模型
  146.  
  147. 2、如果以上模型还不能满足项目的需要,那么我们还可以自定义模型,通常情况下,一个网站是由多种模型的数据来组成的
  148.  
  149. 3、栏目添加选项:
  150.  
  151. 栏目名称:在网站静态化时,创建一个以此目录名命名的目录来存放当前栏目下相关的模板文件
  152.  
  153. 4pc的设计者认为,每个栏目会对应当前所选模型的三个模板文件:
  154.  
  155. 频道页模板文件
  156.  
  157. 列表页模板文件
  158.  
  159. 内容页模板文件
  160.  
  161. 这些模板文件所在位置:phpcms/templates/default/content/ 目录下,如果想修改模板文件,只需要到此目录下找到对应的模板文件进行修改就可以了
  162.  
  163. 频道页:category_*.html
  164. 列表页:list_*.html
  165. 内容页:show_*.html
  166.  
  167. 至此,栏目各页面与模型的三个模板文件对应起来了
  168.  
  169. 注意:频道页面的显示是有条件的(当前栏目必须有子栏目才可以)
  170.  
  171. 5、栏目添加成功后,栏目信息被存储到了v9_category数据表中,同时还被缓存到了phpcms/caches/caches_common/category_content.cache.php文件中,这个缓存文件非常重要,一定要引起足够的重视,前台的很多数据都是直接从此缓存文件中获取来的
  172.  
  173. 七、项目的部署:
  174.  
  175. 1、素材文件:
  176.  
  177. statics
  178. |-----images
  179. |-----cmsimages 项目图片文件
  180. |-----js
  181. |-----cmsjs 项目js文件
  182. |-----css
  183. |-----cmscss 项目css文件
  184.  
  185. phpcms
  186. |-----templates
  187. |-----new 新的模板风格
  188. |-----content 内容模块模板文件
  189. |-----category.html 频道页模板文件
  190. |-----list.html 列表页模板文件
  191. |-----show.html 内容页模板文件
  192. |-----config.php 添加模板文件的配置
  193.  
  194. 或者
  195.  
  196. |-----default
  197. |-----content 内容模块模板文件
  198. |-----category_shetu.html 频道页模板文件
  199. |-----list_shetu.html 列表页模板文件
  200. |-----show_shetu.html 内容页模板文件
  201. |-----config.php 配置新添加的模板文件
  202.  
  203. 注意:模板文件的命名规范
  204.  
  205. 2、进入后台,将栏目与模板文件对应起来
  206.  
  207. 3、常量的定义:phpcms/base.php文件
  208.  
  209. 4、系统类库、函数库、模型文件及配置文件的加载
  210.  
  211. pc_base::load_sys_class();//加载系统类库
  212. pc_base::load_sys_func();//加载系统函数库
  213. pc_base::load_model();//加载模型
  214. pc_base::load_config();//加载配置文件或配置选项信息
  215. pc_base::load_app_func();//加载应用程序函数库
  216. pc_base::load_app_class();//加载应用程序类库
  217.  
  218. 全局范围可用,也可以直接在模板文件中使用,在二次开发时,很有用
  219.  
  220. 5、模板语法:
  221.  
  222. (1)常量表示:
  223.  
  224. {JS_PATH}//相当于 <?php echo JS_PATH; ?> 或者 <?=JS_PATH?>,不带php标识,说明是在输出
  225.  
  226. (2)变量语法:
  227.  
  228. {$title}//会被解析成<?php echo $title;?>,不带php标识,说明是输出
  229.  
  230. (3)单行php解析语法
  231.  
  232. {php $i=10;}//相当于 <?php $i=10;?> ,带php标识,说明在处理逻辑,而不是输出
  233.  
  234. (4)条件判断:
  235.  
  236. {if $a > $b}
  237.  
  238. {/if}
  239.  
  240. 解析为:
  241.  
  242. <?php
  243.  
  244. if($a>$b){
  245.  
  246. }
  247. ?>
  248.  
  249. (5)循环:
  250.  
  251. {loop $data $key $val}{/loop}
  252.  
  253. 解析为:
  254.  
  255. <?php
  256.  
  257. foreach($data as $key=>$val){
  258.  
  259. }
  260.  
  261. ?>
  262.  
  263. (6)自增自减:通常跟循环一起使用
  264.  
  265. {php $i=10;}
  266. {loop $a $b}
  267. {$i++} //自增自减,会解析为赋值操作,而不是输出操作,如:<?php $i++;?>
  268. {/loop}
  269.  
  270. (7)包含模板文件:
  271.  
  272. {template "content","header"}//包含 "templates/default/content/header.html" 模板文件
  273.  
  274. 6、内容详情页中的变量从何而来?
  275.  
  276. 找到phpcms/modules/content/index.php控制器中的show()方法,在方法中随意定义一些变量,
  277.  
  278. 然后,看一下是否能够从模板文件中获取到值,答案是肯定的
  279.  
  280. {title}、{$content}从哪里来?
  281.  
  282. 技巧:如果在控制器方法中不能直接搜到模板文件中的变量,那么此变量必定在extract($data);中
  283.  
  284. extract($data);//主要用来将数组中个元素转化为变量,
  285.  
  286. 总结:当模板文件中的变量不能在对应的方法中找到的话,那么此变量必定是从$data数组元素中转化而来的
  287.  
  288. 内容页面的变量:
  289.  
  290. (1)包含模板文件
  291.  
  292. {template "content","header"}
  293.  
  294. (2)生成站点首页url的函数
  295.  
  296. {siteurl($siteid)}
  297.  
  298. (3)面包屑导航
  299.  
  300. {catpos($catid)}
  301.  
  302. (4)来源
  303.  
  304. {$copyfrom}
  305.  
  306. (5)发布时间
  307.  
  308. {$inputtime}
  309.  
  310. (6)文章描述
  311.  
  312. {if $description}<div class="summary" >{$description}</div>{/if}
  313.  
  314. (7)内容
  315.  
  316. {if $allow_visitor==1}
  317. {$content}
  318. <!--内容关联投票-->
  319. {if $voteid}
  320. <script language="javascript" src="{APP_PATH}index.php?m=vote&c=index&a=show&action=js&subjectid={$voteid}&type=2"></script>
  321. {/if}
  322.  
  323. {else}
  324. <CENTER><a href="{APP_PATH}index.php?m=content&c=readpoint&allow_visitor={$allow_visitor}"><font color="red">阅读此信息需要您支付 <B><I>{$readpoint} {if $paytype}元{else}点{/if}</I></B>,点击这里支付</font></a></CENTER>
  325. {/if}
  326.  
  327. (8)短标题:
  328.  
  329. {if $titles}
  330. <fieldset>
  331. <legend class="f14">本文导航</legend>
  332. <ul class="list blue row-2">
  333. {loop $titles $r}
  334. <li>{$n}、<a href="{$r[url]}">{$r[title]}</a></li>
  335. {/loop}
  336. </ul>
  337. </fieldset>
  338. {/if}
  339.  
  340. (9)分页代码:
  341.  
  342. {$pages}
  343.  
  344. (10)相关搜索词:
  345.  
  346. <p style="margin-bottom:10px">
  347. <strong>相关热词搜索:</strong>
  348. {loop $keywords $keyword}
  349. <a href="{APP_PATH}index.php?m=content&c=tag&catid={$catid}&tag={urlencode($keyword)}" class="blue">{$keyword}</a>
  350. {/loop}
  351. </p>
  352.  
  353. (11)上一篇、下一篇
  354.  
  355. <p class="f14">
  356. <strong>上一篇:</strong><a href="{$previous_page[url]}">{$previous_page[title]}</a>
  357. <strong>下一篇:</strong><a href="{$next_page[url]}">{$next_page[title]}</a>
  358. </p>
  359.  
  360. (12)统计点击量:
  361.  
  362. <script language="JavaScript" src="{APP_PATH}api.php?op=count&id={$id}&modelid={$modelid}"></script>
  363.  
  364. (13)网页标题:
  365.  
  366. {$SEO['title']}{$SEO['site_title']}
  367.  
  368. (14)网页描述:
  369.  
  370. {$SEO['description']}
  371.  
  372. (15)网页关键子:
  373.  
  374. {$SEO['keyword']}
  375.  
  376. 7pc标签的使用:在v9中,我们将使用pc标签作为获取数据的主要方式
  377.  
  378. pc标签分模块来使用,今天,主要来学习内容模块pc标签的使用
  379.  
  380. 内容模块的pc标签可用来完成如下功能:
  381.  
  382. (1)获取内容列表:lists
  383.  
  384. (2)获取点击排行榜:hits
  385.  
  386. (3)获取相关文章:relation
  387.  
  388. (4)获取栏目列表:category
  389.  
  390. 8、自定义pc标签:pc标签的源代码在 phpcms/modules/模块名/classes/模块名_tag.class.php
  391.  
  392. 我们可根据项目需求,为pc标签增加额外的功能,以满足项目的需要
  393.  
  394. 9get万能标签:通过sql语句来获取数据
  395.  
  396. 10.碎片标签:碎片功能允许我们将网页分为若干块儿,每一块儿都可以在后台像修改文章内容一样由
  397.  
  398. 编辑人员来可视化的维护,并可实时替换每一块儿的内容
  399.  
  400. {pc:block pos="daohang"}{/pc}
  401.  
  402. 碎片:碎片其实就是一段HTML代码,只不过这段html代码如果作为碎片的话,就可以由编辑人员在后
  403.  
  404. 台任意更改了
  405.  
  406. 11、扩展函数库:
  407.  
  408. phpcms/libs/functions/global.func.php
  409.  
  410. phpcms/libs/functions/extend.func.php
  411.  
  412. 12、二次开发:
  413.  
  414. 扩展控制器:MY_index.php
  415.  
  416. ?>

【转】phpcms授课学习的更多相关文章

  1. 【转】关于phpcms的学习

    在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1]PHPCMS V9系统目录简析 在研究所有问题之前,请先了解一下系统的文件目录结构,具体如下图所示 ...

  2. PHPCMS V9 学习总结

    在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1]PHPCMS V9系统目录简析 在研究所有问题之前,请先了解一下系统的文件目录结构,具体如下图所示 ...

  3. PHPCMS V9 学习总结(转)

    转自:http://www.cnblogs.com/Braveliu/p/5074930.html 在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1 ...

  4. phpcms 模板学习

    1.phpcms\modules\content 里面可以自己定义常量变量,常量在魔板不用$,变量要用2.\phpcms_v9_UTF8\caches\configs system.php 设置魔板是 ...

  5. PHPCMS 后台学习

    1.final 不能被子类改写,不可扩展2.私有不能被继承3.构造方法,第一个被调用的方法4.static访问 类名::方法名 parent::test();这里test可以不静态 m=模块名& ...

  6. phpcms学习的一点心得

    最近,在学习phpcms的二次开发,因为要调试搜索模块程序,需建立若干栏目,按照栏目搜索.这一过程中涉及到phpcms的一个概念:模型. 以前并不太注意这个东东. 经过摸索,发现模型其实也是一个栏目的 ...

  7. phpcms二次开发学习

    1.新建模块就是phpcms/modules/目录下面新建文件夹,文件夹名即为模块名. 2.模块内 一般新建三个文件夹:classes(模块要使用的类放置在这个文件夹,通过pc_base::load_ ...

  8. phpcms学习总结

    文件目录结构 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – phpcms phpc ...

  9. PHPCMS 学习

    1.碎片管理2.为了升级操作 MY_ thinkphp为大写phpcms里面也是大写 然后继承如果加构造函数要调用一次父类的构造函数,最好在最上面调用 final 不可重写 重写最好调用一次paren ...

随机推荐

  1. python从Microsoft Excel文件中导入数据

    excel中后缀为csv和xls,二者区别如下:1.xls 文件就是Microsoft excel电子表格的文件格式.2.csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中. ...

  2. Microsoft.Office.Interop.Excel的用法

    1)ApplicationClass ExcelApp = New ApplicationClass(); 2) 更改 Excel 标题栏: ExcelApp.Caption := '应用程序调用 M ...

  3. c++异常捕获

    概念: “C++异常”就是 try{}catch(...){} “SEH异常”就是 __try{} __except(-//){} (关于这两种异常,如有不了解的地方,网上有很多资料可以参考) 目前微 ...

  4. re正则表达式7_{}

    curly brackets {} instead of one number, you can specify a range by writing a minimum,a comma,and a ...

  5. JavaScript排序算法——选择排序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. js随机从数组中取出几个元素

    JS如何从一个数组中随机取出一个元素或者几个元素. 假如数组为 var items = ['1','2','4','5','6','7','8','9','10']; 1.从数组items中随机取出一 ...

  7. Markdown 简明语法手册

    Markdown 简明语法手册 本文原文http://www.jianshu.com/p/fdb5cbdaf244 根据个人使用情况有所修改. Markdown是一种轻量级标记语言,简称md.创始人为 ...

  8. 使用github和hexo搭建博客

    title: How to build your blog by Hexo in github Welcome to huihuang's blog,you will find what you ex ...

  9. ecshop JSON,ajax.call 异步传输

    1.res = Ajax.call('user.php?act=depot_id', 'id='+v,null,"GET", "JSON",false); 2. ...

  10. C#和SQL实现的字符串相似度计算代码分享

    http://www.jb51.net/article/55941.htm C#实现: 复制代码 代码如下: #region 计算字符串相似度        /// <summary>   ...