二次开发入口文件:
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 搜索。