phpcms开发使用
二次开发入口文件:
1、dirname(__FILE___) 函数返回的是脚本所在在的路径
2、__FILE__ 当前运行文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
3、DIRECTORY_SEPARATOR:是一个显示系统分隔符的命令,DIRECTORY_SEPARATOR是php的内部常量,不需要任何定义与包含即可直接使用
第一课:
1、phpsso 相当于 Ucenter
2、首页index.html可以删除,后台可以再生成,测试访问index.php
3、设置-》站点管理、添加站点 :phpcms 有伪战群的概念(eg. 北京校区、上海校区)
4、设置-》管理员管理--口令卡:预防黑客在用户登录后台时截获登录信息,登录时输入变化的口令卡。
5、模块-》模块管理 :对应代码 phpcms/modules/
6、内容-》管理栏目: 修改后要更新栏目缓存!
7、频道--分类页,列表页--内容列表,内容--文章内容,模型--(文章、图片、视频)不同的模板及数据表
8、采集管理:序列网址---取到URL,去掉规律数字 _(*),测试,网址中必须包含--对采集的网址进行过滤
9、<base href="http://www.baidu.com"> base为基础网址,后面的URL都以前一个base为主体
10、获取网址: 找到唯一的分割代码点的截取位置
第二课:
div+css
1、<base target="_blank"> 头部<title> 位置:所有链接都是以弹出的方式打开。
2、css样式中 width:200px !important; 火狐识别,ie忽略
第三课:
HTML5+css3
第四课:
响应式布局
第五课:
bootstrap
第六课:
phpcms 模板引擎
1、category.html:频道页模板,index.html:首页模板,show.html:内容页模板
2、如果需要模板没有建,就会在缺省模板里继承
3、如何切换模板:a.配置缺省目录(cms\phpcms\templates\default)里的配置文件config.php,将其复制到新模板目录配置其模板名及目录,
b.编辑模板:后台-》界面-》模板风格
c.访问新模板:设置-》站点管理-》修改-》模板风格配置
4、是否允许在新编辑模板设置:cms\caches\configs\system.php, 将其配置文件是否允许在新编辑模板改为1
5、模板引擎语法:
a. 模板页面(**.html)里支持php语法插入,但一般不要用
b.在模板里输出常量使用{},后台php的变量、常量可以在模板{}中直接输出,变量使用$,常量不使用$符号
c.在模板里<?php ?> 等价于 {php }
d.{}可以调用所有的php函数,但少用,也可直接用phpcms自带的系统函数(公共函数库:cms\phpcms\libs\functions\gobal.func.php)
e. if语句: {if $num==10} aaaaaaaaa {elseif $num== 11} ccccc {else} bbbbbbbb {/if}
f. 遍历: {loop $data $r} {$r} {/loop} 下标值 {loop $data $k $r} {$k}===>{$r} {/loop} , 默认有 $n 变量计数,不用声明
j. pc标签:对常用模块进行数据读取。 {pc:} {/pc} 具体参数可在后台界面里可视化修改
h. 碎片工具箱:不成体系的部分。{pc:block pos="index"}{/pc} ,pos:碎片位置, 碎片在代码中加完得在可视化里点添加碎片才能进行管理
i. {template "content","footer"} :包含(包含内容模块的页脚)
第七课:
1、bootstrap不兼容IE7以下的版本(IE8也不好使);且库量大,比正常页面加载慢一些。
2、<!--[if IE 8 ]><html class="ie ie8" lang="en"> <!endif>-->
<!--[if (gte IE 9) | ! (IE)]><!-->
<html class="not-ie" lang="en">
<!--<![endif]-->
此语句可以让ie8兼容
3、在静态目录下(cms\statics\),直接新建个文件夹放新的样式文件(css/js/images),如何在代码中动态引入:可用网站根目录{WEB_PATH}statics/test/css/**.css
4、动态地址:{APP_PATH} 相当于 http://localhost/cms/
第八课:
1、对象就是一个东西
2、类生成对象,是对象的描述,类(电脑配置单)->对象(电脑)
3、类是一个工具箱,对象是拿到工具箱,用里面的工具
4、PHPCMS用到的有关类和对象的php语法:
a.拿到类;b.创建这个类的对象;c.通过对象访问类中的成员
$对象名->属性 ; $对象名->方法()
5、封装:
类中的方法供自己类使用,可以封装起来(private function 方法(){}),除了方法可以封装,属性也可以用private封装(避免使用时对属性进行更改);
6、继承:
a.可以对继承的类进行添加新的方法,父类封装(private)的方法不能继承使用;
b.在父类中用protected进行保护,继承的子类可以使用,别处不行,默认是public,都可以使用;
c.继承的子类和父类写同样的方法,是对父类的重写,调用新的方法;
d.如果父类不让子类改写方法,父类可以用 final 来标记方法,final标记的类不能被子类继承;
;
7、构造方法:
a.构造方法是创建对象第一个调用的方法(__construct());
b.通常用它执行一些有用的初始化任务。该方法无返回值。如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。
c.与此类似就是析构方法,析构函数不能带有任何参数,其名称必须是 __destruct() 。
8、静态方法:
a.静态方法用static 修饰方法,对象调用此方法时可以直接 类名::方法() 使用,不用声明类
9、parent修饰的方法:
在子类中继承父类,对父类的一个方法进行了重写,要想再调用父类的那个方法可以用parent::方法()
10、项目-》模块组成-》mvc组成-》控制器-》操作组成;
每个操作-》步骤组成--调用模型和视图;
?m=模块名&c=控制类&a=操作(事件);
在cms\phpcms\modules\中创建一个文件夹为模块m,在模块文件夹中创建一个文件为控制器c,在控制器中写类以及方法,类名与控制器名一致,方法就是操作a,前天控制器名index.php,后台与模块名一样
第九课:
1、后台的控制器类必须登录设置,必须需要继承后台的类,pc_base::load_app_class("admin","admin",0)
2、defined('IN_PHPCMS') or exit('No permission resources.'); 表示必须得通过主入口(index.php)进入类,防止通过文件路径直接访问控制器文件
3、所有pc_base:: 都是 phpcms/base.php 中声明的方法
4、模块中的类文件夹(classes),如何在控制器中使用:
a. pc_base::load_app_class("类名") :调用,声明: $demo = pc_base::load_app_class("类名");
b. pc_base::load_app_class("类名","模块名",true) :第二个参数省略默认访问当前模块下的类文件,第三个参数表示是声明(true)还是继承
c. pc_base::load_app_class() :加载应用的类(各自模块自己用的类,当然别人也可以用)
5、pc_base::load_sys_class() : 加载系统的类(是系统中全局函数 phpcms\libs\classes)
a. 参数1:类名; 参数二:扩展地址; 参数3: 是否初始化
6、pc_base::load_model() :加载数据模型
7、pc_base::load_sys_func("函数库名","模块名") : 加载系统函数
8、pc_base::load_app_func("函数库名","模块名") :加载应用函数
9、一个功能完成的事,写类;一个函数完成的事,写函数
10、安装模块:
a.在数据库module数据包中添加新模块数据
b.后台扩展-》菜单管理-》添加菜单-》更新缓存
11、前台加载模板:
a. phpcms\templates\当前使用的模板风格下
b. 在模板中建一个和模块名相同的文件夹,里面放html文件
c. 控制器加载模板:include template('模板文件所在文件夹名','模板文件');
d. 没有控制器也可以访问到,可以任意使用pc标签
12、后台模板加载:
a. 没有pc标签
b. include $this->admin_tpl("模板名");
c. 后台模块一定要写在自己模块的templates目录下,文件名不是.html,而是.tpl.php格式
d.include $this->admin_tpl("模板名","模块名"); 有第二个参数是找其他模块中的模板
e. 语言包:phpcms\languages,需要在页面显示的中文或英文,建成两个文件,变量,在页面<?php echo L("变量")?>;但一般都直接在页面把输出改成文字。
第十课:
1、控制器里的数据,自动扔给模板,模板可以直接使用
2、后台添加模块,数据库添加数据后,显示[hash]数据验证失败,因为后台只可以在界面处访问,不能通过url直接访问
3、链接数据库:
a.phpcms\libs\classes\model.class.php 通过这个类来操作数据库;
b.phpcms\model\ 每有一张表就有一个model,新模块再新建一个model;caches\configs\database.php 为数据库配置文件
c. function __construct() {
$this->db = pc_base::load_model('mytest_model');
}
来加载新建的数据表的model,用$this->db 来对数据表进行操作
d. php 时间长转时分秒:<?php echo data("Y-m-d",$info['ptime']) ?>
e. 添加数据按钮:扩展-》菜单管理-》添加菜单
f. form类:phpcms\libs\classes\form.class.php
j. $show_validator = $show_scroll = $show_header = true; //开启表单验证
h.extract() : 将数组转化为变量
第十一课:
1、模块添加功能:
a.在本模块下,新建my_*.php 控制器,可以防止系统升级时覆盖添加的功能。
b.继承:class My_* extend *{}
2、连接新的表:
a.在构造方法里(__construct(){})中写的东西,其他所有方法都能用。
b.$this->db2=pc_base::load_model('mytest_model'); //直接加载新的model
c. 加载的新的model会影响以前连接的表($this-db),因为构造方法会覆盖父级里的构造方法,可以在子类的构造方法中调用被覆盖的父类构造方法(在子类构造方法中,parent::__construce(); 可以再次初始化父类的构造方法)
3、子类中如果有构造方法,意味着父类的构造方法被覆盖,再调用下父类的构造方法,可以重新加载父类的构造方法,避免覆盖。
4、提取phpcms框架:
a.在phpsse_server文件中:复制全部文件到新文件中
b.配置:caches/configs/system.php(站点的位置、站点的域名、附件的网址),如果不改会造成验证码出错,或介面排版混乱。
c.配置database.php(服务器主机名,用户名,密码,库名,表前缀等) ;新建数据库,复制表(sso相关),sso_admin、sso_session
d.删除model类,数据库控制类,保留admin_model.class.php、session_model.class.php;删除phpcms/models/下所有应用,保留admin模块。
e.登录后台,右侧有错误:找到admin/index.php文件,在控制器的方法function right(){} 删除。
f.添加新模块:在models中添加新模块,添加表到sso下,model添加
j.以上为后台模板,没有模板引擎,可以添加smtary引擎。
h.移植站点:在phpcms/caches/configs/system.php,将所有旧域名换成新域名,后台,站点设置改为新域名,(更新缓存以及栏目缓存);进入后台内容,附件管理-》附件地址替换成新地址;在内容中,批量更新url,把所有文章的地址都更新一下。
第十二课:PHPcms和discuz! 整合
1、PHPcms 做前端,论坛有discus!--腾讯系(或phpwind--阿里系)
2、phpsso为一个单独的系统,多个phpcms网站用一个phpsso:安装第二个phpcms的时候选择仅安装phpcms,然后将已经安装的phpcms地址输入安装(设置-》phpsso配置秘钥必须跟phpsso里的秘钥一致)
3、跟discuz!同步用户信息:(UCenter和phpsso类似一样)安装含UCenter的discuz!。
4、配置UCenter:phpsso中的系统设置-》UCenter 的配置进行相关配置(表前缀‘discuz‘.pre_ucenter,必须指明库);应用id: ,秘钥:先去discuz 中设置
5、应用管理-》添加新应用(自定义安装),先提交可以生成通信秘钥,将其复制到phpsso中设置,UCenter中新添加应用id为phpsso中的应用id,提交。(配置文件在phpsso_server\caches\comfigs\uc_ocnfig.php)
6、设置切换自动登录:修改discuz代码(详见手册)
7、模块统一:
a.phpcms后台->模块-》数据源-》外部数据源-》添加外部数据源
b.调用论坛数据:使用get标签调用数据源,链接地址复制帖子地址,将帖子id改为动态id.
c. phpcms:caches/caches_teplate/default/content/index.php--首页模板,可以看出怎么链接的数据
8、URL重写:
a. 动态地址3个参数以后不利于百度搜索,需要将其改为伪静态地址
b. 在后头内容-》管理栏目-栏目后面的修改按钮-》生成html设置-》更新栏目缓存;也可以批量编辑->批量更新URL-》批量更新栏目页-》更新缓存-》生成首页。
c. 修改apache配置文件(httpd.conf),让其支持模块,LoadModule reWrite_module modules/md_rewrite.so 打开注释,将其开启;将phpcms的.htaccess文件(将伪静态转化成动态地址)拷贝到项目根目录
9、主程序与web程序分离(将主程序放于www之外的文件夹,防止被攻击)
a. 将phpcms主程序移除www之外,
b. 修改入口文件index.php : include '' 的base目录;修改api.php : include '' 的 base 目录
10、sphinx 搜索。
phpcms开发使用的更多相关文章
- 用phpcms开发模块时中文乱码问题
学着用phpcms开发一个文件管理模块,出现中文乱码,折腾了半天,总结如下 1.自己在mysql客户端建表,默认表格的编码为latin1_swedish_ci,虽然可以建好后用alter命令修改编码, ...
- phpcms二次开发中无法获取SESSION的值
今天在在phpcms开发留言板用到验证码,提交数据,后台无法$_SESSION['code']无法获取验证码值,也无法打印var_dump($_SESSION)值,我们只需要在文件头部添加如下代码: ...
- 23个phpcms v9模板制作及二次开发常用代码案例
0:调用最新文章,带所在版块 {pc:get sql="SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url a ...
- 关于phpcms中mysql和mysqli的区别
用phpcms开发一个考试成绩查询的小模块,用电脑上以前下载的phpcms版本为框架开发,一切顺利.想着下载一个最新版本,以后也免了升级的麻烦.于是,下载好,然后把模块目录.model数据库连接文件. ...
- phpcms加载系统类与加载应用类之区别详解
<?php 1. 加载系统类方法load_sys_class($classname, $path = ''", $initialize = 1)系统类文件所在的文件路径:/phpcms ...
- phpcms 缓存
PHPCMS设置和读取缓存文件 PHPCMS开发中经常用到读取文件缓存,比如常见的当前站点类别,是保存在缓存文件中的,读取的时候 用:$this->categorys = getcache(‘c ...
- phpcms v9 后台首页 去掉团队信息等版权
phpcms\languages\zh-cn\admin.lang.php $LANG['main_product_team'] = 'PHPCMS开发团队'; phpcms\modules\admi ...
- Phpcms 前台页面实现分页
phpcms开发就是模仿里面原有的方法进行扩展,前台要实现分页,就去找后台页面的分页实现. 如后台 扩展->后台操作日志,就有分页展示. 1.先去添加自己的分页方法(千万不要在原来的方法上修改, ...
- phpcms v9模板制作常用代码集合(转)
phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...
随机推荐
- 广州某小公司:ThreadLocal面试
<对线面试官>系列目前已经连载24篇啦!有深度风趣的系列! [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 & ...
- Tomcat与spring的类加载器案例
Tomcat与spring的类加载器案例接下来将介绍<深入理解java虚拟机>一书中的案例,并解答它所提出的问题.(部分类容来自于书中原文) Tomcat中的类加载器在Tomcat目录结构 ...
- WEB安全新玩法 [3] 防护交易数据篡改
在任何涉及交易的系统中,客户与商家之间的交易数据具有核心作用,如购买商品的价格.数量.型号和优惠券等.在客户挑选商品的过程中,这些交易数据逐渐形成:待客户提交订单时,交易数据被商家接收,形成双方认可的 ...
- YOLO V4的模型训练
1.YOLO V4模型训练的基本思路 所有机器学习涉及模型训练,一般都有训练集.验证集.测试集,因此需要准备数据集.有了数据集,再调用训练的算法,获取训练的结果.v3.v4模型训练方法相同. 2.YO ...
- Python基础之:Python的数据结构
目录 简介 列表 列表作为栈使用 列表作为队列使用 列表推导式 del 元组 集合 字典 循环 简介 不管是做科学计算还是编写应用程序,都需要使用到一些基本的数据结构,比如列表,元组,字典等. 本文将 ...
- ceph-csi源码分析(4)-rbd driver-controllerserver分析
更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi源码分析(4)-rbd driver-controllerserver分析 当 ...
- 乘风破浪,.Net Core遇见MAUI(.NET Multi-platform App UI),进击现代化跨设备应用框架
什么是MAUI https://github.com/dotnet/maui .NET Multi-platform App UI (MAUI) 的前身是Xamarin.Forms(适用于Androi ...
- 使用VS2017开发APP中使用VUE.js开发遇到打包出来的android文件 在低版本的android(4.3)中无法正常使用
使用VS2017开发VUE的APP应用遇到的问题集合 1, 打包出来的apk文件在Android 6.0版本以上手机可以正常打开,在Android 4.3版本手机上无法打开 原因:一开始猜测是不是V ...
- web自动化之windows页面切换
一.为什么切换windows页面 在页面操作过程中,存在点击某个元素之后会重新打开一个windows页面,如果不切换至新页面的话,无法在新页面中进行操作,程序会出现报错 二.如何切换 1.获取当前所有 ...
- Docker搭建EFK日志收集系统,并自定义es索引名
EFK架构图 一.EFK简介 EFK不是一个软件,而是一套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前主流的一种日志系统. EFK是三个开源软件的缩写,分 ...