邓_phpcms_phpcms授课思路复习
- 思路:
- 一、目前在企业中使用比较多的cms内容管理有如下几种:
- 1、dedecms
- 2、phpcms
- 二、我们选择学习v9版本的phpcms,主要有以下几点原因:
- 1、基于MVC模式的内容管理系统
- 2、碎片技术
- 三、下面,我们就来进行phpcms v9的安装:
- ci框架的安装,我们只需要按照如下步骤进行操作就可以了
- 1、官网:http://www.phpcms.cn 去下载phpcms v9最新的版本
- 2、下载完毕后,解压,并将其复制粘贴到程序的主目录(d:/wamp/xmall/),然后再将其重命名为"mycms",那么"mycms" 就作为cms的项目名称存在了
- 3、为我们的cms项目搭建一个虚拟主机:
- 首先,找到httpd.conf配置文件,开启虚拟主机的配置
- 然后,找到httpd-vhosts.conf配置文件,进行虚拟主机的配置
- 最后,找到hosts配置文件,为我们的ci项目添加dns映射
- 4、在浏览器中输入 http://www.mycms.com/install/ 回车,就可进行phpcms v9内容管理系统的安装
- 四、phpcms v9框架的目录结构分析:
- 了解v9框架的目录结构,有助于帮助我们快速建立起对v9框架的一个整体认识
- 打开"mycms"项目,有如下文件和目录
- 使用协议说明文档、英文版的用户手册,这两项不是项目所必须的,可暂时将其删除
- |-----api 接口文件目录
- |-----caches 缓存文件目录
- |-----configs 系统配置文件目录
- |-----database.php 数据库配置文件
- |-----route.php 路由配置文件
- |-----system.php 系统配置文件
- |-----cache.php 缓存配置文件
- |-----configs_* 系统缓存文件目录
- |-----configs_commons/caches_data 主要用来存放后台设置的配置信息
- |-----category_content.cache.php栏目与站点映射所对应的配置文件
- |-----category_content_1.cache.php站点1下所有栏目的详细配置信息
- |-----category_item_1.cache.php 文章模型下各栏目所对应的数据量
- |-----category_item_2.cache.php 下载模型下各栏目所对应的数据量
- |-----category_item_3.cache.php 图片模型下各栏目所对应的数据量
- |-----keylink.cache.php 关联链接配置缓存文件
- |-----model.cache.php 三大模型配置缓存文件
- |-----mood_program.cache.php 表情配置缓存文件
- |-----position.cache.php 推荐位配置缓存文件
- |-----poster_template_1.cache.php广告位模板配置缓存文件
- |-----sitelist.cache.php 站点列表配置文件,主要缓存所有站点的基本配置信息
- |-----type_content.cache.php 多个站点下的类别配置信息
- |-----type_content_1.cache.php 当前站点下类别配置信息缓存文件
- |-----urlrules.cache.php url规则配置信息缓存文件
- |-----urlrules_detail.cache.php url规则详细配置信息缓存文件
- |-----special.cache.php 专题配置信息缓存文件
- |-----role.cache.php 角色配置缓存文件
- |-----link.cache.php 友情链接缓存文件
- |-----configs_model/caches_data
- |-----content_form.class.php 生成表单的类库缓存文件
- |-----content_input.class.php 入库时,对表单数据进行验证的类库缓存文件
- |-----content_output.class.php 对从数据表中查询出来的数据进行处理的函数
- |-----content_update.class.php 对要更新的数据进行有效性验证的函数
- |-----model_field_1.cache.php 文章模型所有模型字段的缓存信息
- |-----model_field_2.cache.php 下载模型所有模型字段的缓存信息
- |-----model_field_3.cache.php 图片模型所有模型字段的缓存信息
- |-----phpcms phpcms框架主目录
- |-----languages 框架语言包目录
- |-----libs 框架主类库、主函数库目录
- |-----classes
- |-----form.class.php 表单生成类库文件
- |-----application.class.php 应用程序类库文件
- |-----image.class.php 图片处理类库文件
- |-----attachment.class.php 附件处理类库文件
- |-----param.class.php URL参数处理类库文件
- |-----functions
- |-----global.func.php 公共函数库文件
- |-----extension.class.php 扩展函数库文件
- |-----model 框架数据库模型目录
- |-----content_model.class.php 内容模型文件
- |-----admin_model.class.php 管理员模型文件
- |-----attachment_model.class.php 附件模型文件
- |-----modules 框架模块目录
- |-----admin admin模块
- |-----index.php index.php控制器文件
- |-----content content模块
- |-----classes content模块通用类库
- |-----fields content模块模型字段
- |-----functions content模块通用函数库
- |-----templates content模块后台模板文件
- |-----index.php index.php控制器文件
- |-----templates 框架系统前台模板目录
- |-----default 默认的模板风格
- |-----content content模块模板目录
- |-----category.html 频道页模板文件
- |-----list.html 列表页模板文件
- |-----show.html 内容页模板文件
- |-----config.php 模板配置文件
- |-----phpsso_server phpsso主目录
- |-----statics 网站素材文件目录
- |-----css css文件
- |-----images images文件
- |-----js js文件
- |-----uploadfile 上传附件
- |-----admin.php 后台入口文件
- |-----index.php 前台入口文件
- 五、phpcms v9中的url路由规则:
- 浏览器中输入 http://www.mycms.com/index.php?m=content&c=index&a=list&catid=1 回车时,默认情况下会找到
- phpcms 框架主目录
- |-----modules 模块目录
- |-----content content模块
- |-----index.php index.php控制器中list方法来显示列表页面
- 到底是不是呢?我们打开index.php控制器文件,并在index方法中添加一些代码,运行输出,证明确实如我们所料
- 我们可以将浏览器中的url归纳如下:
- http://域名/入口文件?m=模块名&c=控制器&a=方法名&catid=参数值
- 当我们在浏览器中输入http://www.myshop.com/index.php 后面没有跟任何参数, 回车时,默认情下会将首页显示出来
- 这是因为phpcms v9为我们指定了一个默认执行的模块、控制器和方法
- 默认控制器的设置在 "caches/configs/routes.php" 配置文件中进行设置的,我们可以重新设置默认的控制器
- 六、栏目的添加
- 1、pc设计者认为,栏目详情页的数据都应该属于一个模型,所以在添加栏目时,必须给栏目指定一个模型,至于要选择什么模型,完全取决于栏目详情页要显示什么类型的内容
- 详情页:文章信息类的内容 文章模型
- 详情页:图片类信息 图片模型
- 详情页:下载东西 下载模型
- 详情页:播放视频 视频模型
- 2、如果以上模型还不能满足项目的需要,那么我们还可以自定义模型,通常情况下,一个网站是由多种模型的数据来组成的
- 3、栏目添加选项:
- 栏目名称:在网站静态化时,创建一个以此目录名命名的目录来存放当前栏目下相关的模板文件
- 4、pc的设计者认为,每个栏目会对应当前所选模型的三个模板文件:
- 频道页模板文件
- 列表页模板文件
- 内容页模板文件
- 这些模板文件所在位置:phpcms/templates/default/content/ 目录下,如果想修改模板文件,只需要到此目录下找到对应的模板文件进行修改就可以了
- 频道页:category_*.html
- 列表页:list_*.html
- 内容页:show_*.html
- 至此,栏目各页面与模型的三个模板文件对应起来了
- 注意:频道页面的显示是有条件的(当前栏目必须有子栏目才可以)
- 5、栏目添加成功后,栏目信息被存储到了v9_category数据表中,同时还被缓存到了phpcms/caches/caches_common/category_content.cache.php文件中,这个缓存文件非常重要,一定要引起足够的重视,前台的很多数据都是直接从此缓存文件中获取来的
- 七、项目的部署:
- 1、素材文件:
- statics
- |-----images
- |-----cmsimages 项目图片文件
- |-----js
- |-----cmsjs 项目js文件
- |-----css
- |-----cmscss 项目css文件
- phpcms
- |-----templates
- |-----new 新的模板风格
- |-----content 内容模块模板文件
- |-----category.html 频道页模板文件
- |-----list.html 列表页模板文件
- |-----show.html 内容页模板文件
- |-----config.php 添加模板文件的配置
- 或者
- |-----default
- |-----content 内容模块模板文件
- |-----category_shetu.html 频道页模板文件
- |-----list_shetu.html 列表页模板文件
- |-----show_shetu.html 内容页模板文件
- |-----config.php 配置新添加的模板文件
- 注意:模板文件的命名规范
- 2、进入后台,将栏目与模板文件对应起来
- 3、常量的定义:phpcms/base.php文件
- 4、系统类库、函数库、模型文件及配置文件的加载
- pc_base::load_sys_class();//加载系统类库
- pc_base::load_sys_func();//加载系统函数库
- pc_base::load_model();//加载模型
- pc_base::load_config();//加载配置文件或配置选项信息
- pc_base::load_app_func();//加载应用程序函数库
- pc_base::load_app_class();//加载应用程序类库
- 全局范围可用,也可以直接在模板文件中使用,在二次开发时,很有用
- 5、模板语法:
- (1)常量表示:
- {JS_PATH}//相当于 <?php echo JS_PATH; ?> 或者 <?=JS_PATH?>,不带php标识,说明是在输出
- (2)变量语法:
- {$title}//会被解析成<?php echo $title;?>,不带php标识,说明是输出
- (3)单行php解析语法
- {php $i=10;}//相当于 <?php $i=10;?> ,带php标识,说明在处理逻辑,而不是输出
- (4)条件判断:
- {if $a > $b}
- {/if}
- 解析为:
- <?php
- if($a>$b){
- }
- ?>
- (5)循环:
- {loop $data $key $val}{/loop}
- 解析为:
- <?php
- foreach($data as $key=>$val){
- }
- ?>
- (6)自增自减:通常跟循环一起使用
- {php $i=10;}
- {loop $a $b}
- {$i++} //自增自减,会解析为赋值操作,而不是输出操作,如:<?php $i++;?>
- {/loop}
- (7)包含模板文件:
- {template "content","header"}//包含 "templates/default/content/header.html" 模板文件
- 6、内容详情页中的变量从何而来?
- 找到phpcms/modules/content/index.php控制器中的show()方法,在方法中随意定义一些变量,
- 然后,看一下是否能够从模板文件中获取到值,答案是肯定的
- {title}、{$content}从哪里来?
- 技巧:如果在控制器方法中不能直接搜到模板文件中的变量,那么此变量必定在extract($data);中
- extract($data);//主要用来将数组中个元素转化为变量,
- 总结:当模板文件中的变量不能在对应的方法中找到的话,那么此变量必定是从$data数组元素中转化而来的
- 内容页面的变量:
- (1)包含模板文件
- {template "content","header"}
- (2)生成站点首页url的函数
- {siteurl($siteid)}
- (3)面包屑导航
- {catpos($catid)}
- (4)来源
- {$copyfrom}
- (5)发布时间
- {$inputtime}
- (6)文章描述
- {if $description}<div class="summary" >{$description}</div>{/if}
- (7)内容
- {if $allow_visitor==1}
- {$content}
- <!--内容关联投票-->
- {if $voteid}
- <script language="javascript" src="{APP_PATH}index.php?m=vote&c=index&a=show&action=js&subjectid={$voteid}&type=2"></script>
- {/if}
- {else}
- <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>
- {/if}
- (8)短标题:
- {if $titles}
- <fieldset>
- <legend class="f14">本文导航</legend>
- <ul class="list blue row-2">
- {loop $titles $r}
- <li>{$n}、<a href="{$r[url]}">{$r[title]}</a></li>
- {/loop}
- </ul>
- </fieldset>
- {/if}
- (9)分页代码:
- {$pages}
- (10)相关搜索词:
- <p style="margin-bottom:10px">
- <strong>相关热词搜索:</strong>
- {loop $keywords $keyword}
- <a href="{APP_PATH}index.php?m=content&c=tag&catid={$catid}&tag={urlencode($keyword)}" class="blue">{$keyword}</a>
- {/loop}
- </p>
- (11)上一篇、下一篇
- <p class="f14">
- <strong>上一篇:</strong><a href="{$previous_page[url]}">{$previous_page[title]}</a>
- <strong>下一篇:</strong><a href="{$next_page[url]}">{$next_page[title]}</a>
- </p>
- (12)统计点击量:
- <script language="JavaScript" src="{APP_PATH}api.php?op=count&id={$id}&modelid={$modelid}"></script>
- (13)网页标题:
- {$SEO['title']}{$SEO['site_title']}
- (14)网页描述:
- {$SEO['description']}
- (15)网页关键子:
- {$SEO['keyword']}
- 7、pc标签的使用:在v9中,我们将使用pc标签作为获取数据的主要方式
- pc标签分模块来使用,今天,主要来学习内容模块pc标签的使用
- 内容模块的pc标签可用来完成如下功能:
- (1)获取内容列表:lists
- (2)获取点击排行榜:hits
- (3)获取相关文章:relation
- (4)获取栏目列表:category
- 8、自定义pc标签:pc标签的源代码在 phpcms/modules/模块名/classes/模块名_tag.class.php中
- 我们可根据项目需求,为pc标签增加额外的功能,以满足项目的需要
- 9、get万能标签:通过sql语句来获取数据
- 10.碎片标签:碎片功能允许我们将网页分为若干块儿,每一块儿都可以在后台像修改文章内容一样由
- 编辑人员来可视化的维护,并可实时替换每一块儿的内容
- {pc:block pos="daohang"}{/pc}
- 碎片:碎片其实就是一段HTML代码,只不过这段html代码如果作为碎片的话,就可以由编辑人员在后
- 台任意更改了
- 11、扩展函数库:
- phpcms/libs/functions/global.func.php
- phpcms/libs/functions/extend.func.php
- 12、二次开发:
- 扩展控制器:MY_index.php
- ?>
邓_phpcms_phpcms授课思路复习的更多相关文章
- eclipse中 使用maven搭建ssh项目 思路复习(含有pom.xml)
首先在web.xml中配置监听器 在服务器启动的时候 进行bean对象的创建(只会创建单例对象 dao service 多例对象action可不会创建 每个多例对象是不同的 创建了有什么意义呢 ...
- react第十九单元(react+react-router-dom+redux综合案例1)
第十九单元(react+react-router-dom+redux综合案例1) #课程目标 复习 综合练习 实战能力 #知识点 react react-router redux #授课思路 #案例和 ...
- 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)
曾攀老师的<有限元分析基础教程>第三章有二维杆单元的推导,并结合一个例题进行了解析解和基于Matlab的程序求解.但是我感觉书中的MATLAB代码有点罗嗦,而且一些实现方法也比较麻烦,比如 ...
- Android开发全套视频教程在线观看网盘下载
千锋金牌讲师老罗老师简介: 国内第一批Android教学讲师,10多年软件开发经验,6年多教学经验,曾担任广东电信北京分公司移动事业部项目经理,主持过微软中国平台考试系统.山西省旅游局智能化平台等大型 ...
- java亿级流量电商详情页系统的大型高并发与高可用缓存架构实战视频教程
亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 完整高清含源码,需要课程的联系QQ:2608609000 1[免费观看]课程介绍以及高并发高可用复杂系统中的缓存架构有哪些东西2[免费观看]基于 ...
- Deeplearning.ai课程笔记--汇总
从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...
- 2019年Unity学习资源指南[精心整理]
前言 进入一个领域,最直接有效的方法就是,寻找相关综述性文章,首先你需要对你入门的领域有个概括性的了解,这些包括: 1.主流的学习社区与网站. 2.该领域的知名大牛与热心分享的从业者. 3.如何有效的 ...
- react第二单元(react的组件-state-props-setState)
第二单元(react的组件-state-props-setState) 课程目标 理解组件和组件的创建.以及能够根据实际场景去划分合理的组件. 理解并且能够灵活的应用组件中的state.props. ...
- react第一单元(简介)
第一单元(react简介) 课程目标 理解react这个框架在前端开发中的地位 理解react诞生的原因和意义(react是一个用于快速构建前端视图的javaScript库) 理解什么是虚拟dom.原 ...
随机推荐
- SLAM入门之视觉里程计(4):基础矩阵的估计
在上篇文章中,介绍了三位场景中的同一个三维点在不同视角下的像点存在着一种约束关系:对极约束,基础矩阵是这种约束关系的代数表示,并且这种约束关系独立与场景的结构,只依赖与相机的内参和外参(相对位姿).这 ...
- Java并发之底层实现原理学习笔记
本篇博文将介绍java并发底层的实现原理,我们知道java实现的并发操作最后肯定是由我们的CPU完成的,中间经历了将java源码编译成.class文件,然后进行加载,然后虚拟机执行引擎进行执行,解释为 ...
- 物流包裹一站式查询(TrackingMore)
快递查询接口 目前提供快递查询的接口平台有: Trackingmore 快递100 快递网 不同接口的区别: (1)Trackingmore支持380家快递公司,其中有55家为国内的快递,其余325家 ...
- [js高手之路] es6系列教程 - 新的类语法实战选项卡
其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法. 一.用es6封装一个基本的类 class Person{ constructor( ...
- Heroku 如何上重置 PostgreSQL 数据库
如果你要在 Heroku 上重置 PostgreSQL 数据库,可以使用以下命令 : $ heroku pg:reset DATABASE $ heroku run php artisan mig ...
- Global exception handling in asp.net core webapi
在.NET Core中MVC和WebAPI已经组合在一起,都继承了Controller,但是在处理错误时,就很不一样,MVC返回错误页面给浏览器,WebAPI返回Json或XML,而不是HTML.Us ...
- 谈谈关键字new
1.在情人节那天,无意间看到空间有人说,没有对象就new一个,然后就可以........ 程序中我们常用到X a=new X(), new在这里是创建一个对象,也可以叫做创建一个实例,我们先谈谈后半部 ...
- spring 多线程 写入数据库 和 写入 xml文件
最近工作中遇到一个需求 多线程先爬取页面 然后将爬取的结果持久化到数据库中 ,一些大文本的内容需要持久化到 xml文件中; 下面是运行后的结果: xml 文件写入结果: 数据库写入结果: 再来张项目结 ...
- Node+mongodb线上部署到阿里云
Node+mongodb线上部署到阿里云 部署使用的主要工具是pm2+nginx,使用码云的私有仓库,自动部署到服务器,私有仓库和服务器要事先设置好免密码登录.使用DNSPOD进行域名解析.事先准备好 ...
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)
A. Carrot Cakes time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...