phpcms开发使用
阅读原文时间:2023年07月10日阅读:1

二次开发入口文件:

  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为基础网址,后面的URL都以前一个base为主体

10、获取网址:  找到唯一的分割代码点的截取位置

第二课:

div+css

1、  头部 位置:所有链接都是以弹出的方式打开。</p> <p>2、css样式中 width:200px !important; 火狐识别,ie忽略</p> <p>第三课:</p> <p>HTML5+css3</p> <p>第四课:</p> <p>响应式布局</p> <p>第五课:</p> <p>bootstrap</p> <p>第六课:</p> <p>phpcms 模板引擎</p> <p>1、category.html:频道页模板,index.html:首页模板,show.html:内容页模板</p> <p>2、如果需要模板没有建,就会在缺省模板里继承</p> <p>3、如何切换模板:a.配置缺省目录(cms\phpcms\templates\default)里的配置文件config.php,将其复制到新模板目录配置其模板名及目录,</p> <p>  b.编辑模板:后台-》界面-》模板风格</p> <p>  c.访问新模板:设置-》站点管理-》修改-》模板风格配置</p> <p>4、是否允许在新编辑模板设置:cms\caches\configs\system.php, 将其配置文件是否允许在新编辑模板改为1</p> <p>5、模板引擎语法:</p> <p>  a. 模板页面(**.html)里支持php语法插入,但一般不要用</p> <p>  b.在模板里输出常量使用{},后台php的变量、常量可以在模板{}中直接输出,变量使用$,常量不使用$符号</p> <p>  c.在模板里<?php ?>  等价于  {php }</p> <p>  d.{}可以调用所有的php函数,但少用,也可直接用phpcms自带的系统函数(公共函数库:cms\phpcms\libs\functions\gobal.func.php)</p> <p>  e.  if语句:   {if $num==10} aaaaaaaaa {elseif $num== 11} ccccc {else} bbbbbbbb {/if}</p> <p>  f. 遍历: {loop $data $r} {$r}  {/loop}     下标值  {loop $data $k $r} {$k}===>{$r} {/loop}   , 默认有 $n 变量计数,不用声明</p> <p>  j.  pc标签:对常用模块进行数据读取。  {pc:} {/pc}   具体参数可在后台界面里可视化修改</p> <p>  h. 碎片工具箱:不成体系的部分。{pc:block pos="index"}{/pc} ,pos:碎片位置, 碎片在代码中加完得在可视化里点添加碎片才能进行管理</p> <p>  i. {template "content","footer"}  :包含(包含内容模块的页脚)</p> <p>第七课:</p> <p>  1、bootstrap不兼容IE7以下的版本(IE8也不好使);且库量大,比正常页面加载慢一些。</p> <p>  2、<!--\[if IE 8 \]><html class="ie ie8" lang="en"> <!endif>--></p> <p>    <!--\[if (gte IE 9) | ! (IE)\]><!--></p> <p>    <html class="not-ie" lang="en"></p> <p>    <!--<!\[endif\]--></p> <p>    此语句可以让ie8兼容</p> <p>  3、在静态目录下(cms\statics\),直接新建个文件夹放新的样式文件(css/js/images),如何在代码中动态引入:可用网站根目录{WEB_PATH}statics/test/css/**.css</p> <p>  4、动态地址:{APP_PATH} 相当于 http://localhost/cms/</p> <p>第八课:</p> <p>  1、对象就是一个东西</p> <p>  2、类生成对象,是对象的描述,类(电脑配置单)->对象(电脑)</p> <p>  3、类是一个工具箱,对象是拿到工具箱,用里面的工具</p> <p>  4、PHPCMS用到的有关类和对象的php语法:</p> <p>    a.拿到类;b.创建这个类的对象;c.通过对象访问类中的成员</p> <p>    $对象名->属性     ;    $对象名->方法()</p> <p>  5、封装:</p> <p>    类中的方法供自己类使用,可以封装起来(private function 方法(){}),除了方法可以封装,属性也可以用private封装(避免使用时对属性进行更改);</p> <p>  6、继承:</p> <p>    a.可以对继承的类进行添加新的方法,父类封装(private)的方法不能继承使用;</p> <p>    b.在父类中用protected进行保护,继承的子类可以使用,别处不行,默认是public,都可以使用;</p> <p>    c.继承的子类和父类写同样的方法,是对父类的重写,调用新的方法;</p> <p>    d.如果父类不让子类改写方法,父类可以用 final 来标记方法,final标记的类不能被子类继承;</p> <p>;</p> <p>  7、构造方法:</p> <p>   a.构造方法是创建对象第一个调用的方法(__construct());</p> <p>   b.通常用它执行一些有用的初始化任务。该方法无返回值。如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。</p> <p>   c.与此类似就是析构方法,析构函数不能带有任何参数,其名称必须是 __destruct() 。</p> <p>  8、静态方法:</p> <p>    a.静态方法用static 修饰方法,对象调用此方法时可以直接 类名::方法()  使用,不用声明类</p> <p>  9、parent修饰的方法:</p> <p>    在子类中继承父类,对父类的一个方法进行了重写,要想再调用父类的那个方法可以用parent::方法()</p> <p>  10、项目-》模块组成-》mvc组成-》控制器-》操作组成;</p> <p>    每个操作-》步骤组成--调用模型和视图;</p> <p>    ?m=模块名&c=控制类&a=操作(事件);</p> <p>    在cms\phpcms\modules\中创建一个文件夹为模块m,在模块文件夹中创建一个文件为控制器c,在控制器中写类以及方法,类名与控制器名一致,方法就是操作a,前天控制器名index.php,后台与模块名一样</p> <p>第九课:</p> <p>  1、后台的控制器类必须登录设置,必须需要继承后台的类,pc_base::load_app_class("admin","admin",0)</p> <p>  2、defined('IN_PHPCMS') or exit('No permission resources.'); 表示必须得通过主入口(index.php)进入类,防止通过文件路径直接访问控制器文件</p> <p>  3、所有pc_base:: 都是 phpcms/base.php 中声明的方法</p> <p>  4、模块中的类文件夹(classes),如何在控制器中使用:</p> <p>    a.  pc_base::load_app_class("类名")  :调用,声明: $demo = pc_base::load_app_class("类名");</p> <p>    b. pc_base::load_app_class("类名","模块名",true) :第二个参数省略默认访问当前模块下的类文件,第三个参数表示是声明(true)还是继承</p> <p>    c. pc_base::load_app_class() :加载应用的类(各自模块自己用的类,当然别人也可以用)</p> <p>  5、pc_base::load_sys_class() : 加载系统的类(是系统中全局函数 phpcms\libs\classes)</p> <p>    a. 参数1:类名; 参数二:扩展地址; 参数3: 是否初始化</p> <p>  6、pc_base::load_model() :加载数据模型</p> <p>  7、pc_base::load_sys_func("函数库名","模块名") : 加载系统函数</p> <p>  8、pc_base::load_app_func("函数库名","模块名") :加载应用函数</p> <p>  9、一个功能完成的事,写类;一个函数完成的事,写函数</p> <p>  10、安装模块:</p> <p>    a.在数据库module数据包中添加新模块数据</p> <p>    b.后台扩展-》菜单管理-》添加菜单-》更新缓存</p> <p>  11、前台加载模板:</p> <p>    a. phpcms\templates\当前使用的模板风格下</p> <p>    b. 在模板中建一个和模块名相同的文件夹,里面放html文件</p> <p>    c. 控制器加载模板:include template('模板文件所在文件夹名','模板文件');</p> <p>    d. 没有控制器也可以访问到,可以任意使用pc标签</p> <p>  12、后台模板加载:</p> <p>    a. 没有pc标签</p> <p>    b. include $this->admin_tpl("模板名");</p> <p>    c. 后台模块一定要写在自己模块的templates目录下,文件名不是.html,而是.tpl.php格式</p> <p>    d.include $this->admin_tpl("模板名","模块名"); 有第二个参数是找其他模块中的模板</p> <p>    e. 语言包:phpcms\languages,需要在页面显示的中文或英文,建成两个文件,变量,在页面<?php echo L("变量")?>;但一般都直接在页面把输出改成文字。</p> <p>第十课:</p> <p>  1、控制器里的数据,自动扔给模板,模板可以直接使用</p> <p>  2、后台添加模块,数据库添加数据后,显示[hash]数据验证失败,因为后台只可以在界面处访问,不能通过url直接访问</p> <p>  3、链接数据库:</p> <p>    a.phpcms\libs\classes\model.class.php  通过这个类来操作数据库;</p> <p>    b.phpcms\model\   每有一张表就有一个model,新模块再新建一个model;caches\configs\database.php  为数据库配置文件</p> <p>    c.     function __construct() { <br />               $this->db = pc_base::load_model('mytest_model'); <br />          }</p> <p>      来加载新建的数据表的model,用$this->db 来对数据表进行操作</p> <p>    d. php 时间长转时分秒:<?php echo data("Y-m-d",$info['ptime']) ?></p> <p>    e. 添加数据按钮:扩展-》菜单管理-》添加菜单</p> <p>    f. form类:phpcms\libs\classes\form.class.php</p> <p>    j. $show_validator = $show_scroll = $show_header = true;  //开启表单验证</p> <p>    h.extract() : 将数组转化为变量</p> <p>第十一课:</p> <p>  1、模块添加功能:</p> <p>    a.在本模块下,新建my_*.php 控制器,可以防止系统升级时覆盖添加的功能。</p> <p>    b.继承:class My_* extend *{}</p> <p>  2、连接新的表:</p> <p>    a.在构造方法里(__construct(){})中写的东西,其他所有方法都能用。</p> <p>    b.$this->db2=pc_base::load_model('mytest_model');  //直接加载新的model</p> <p>    c. 加载的新的model会影响以前连接的表($this-db),因为构造方法会覆盖父级里的构造方法,可以在子类的构造方法中调用被覆盖的父类构造方法(在子类构造方法中,parent::__construce(); 可以再次初始化父类的构造方法)</p> <p>  3、子类中如果有构造方法,意味着父类的构造方法被覆盖,再调用下父类的构造方法,可以重新加载父类的构造方法,避免覆盖。</p> <p>  4、提取phpcms框架:</p> <p>    a.在phpsse_server文件中:复制全部文件到新文件中</p> <p>    b.配置:caches/configs/system.php(站点的位置、站点的域名、附件的网址),如果不改会造成验证码出错,或介面排版混乱。</p> <p>    c.配置database.php(服务器主机名,用户名,密码,库名,表前缀等) ;新建数据库,复制表(sso相关),sso_admin、sso_session</p> <p>    d.删除model类,数据库控制类,保留admin_model.class.php、session_model.class.php;删除phpcms/models/下所有应用,保留admin模块。</p> <p>    e.登录后台,右侧有错误:找到admin/index.php文件,在控制器的方法function right(){} 删除。</p> <p>    f.添加新模块:在models中添加新模块,添加表到sso下,model添加</p> <p>    j.以上为后台模板,没有模板引擎,可以添加smtary引擎。</p> <p>    h.移植站点:在phpcms/caches/configs/system.php,将所有旧域名换成新域名,后台,站点设置改为新域名,(更新缓存以及栏目缓存);进入后台内容,附件管理-》附件地址替换成新地址;在内容中,批量更新url,把所有文章的地址都更新一下。</p> <p>第十二课:PHPcms和discuz! 整合</p> <p>  1、PHPcms 做前端,论坛有discus!--腾讯系(或phpwind--阿里系)</p> <p>  2、phpsso为一个单独的系统,多个phpcms网站用一个phpsso:安装第二个phpcms的时候选择仅安装phpcms,然后将已经安装的phpcms地址输入安装(设置-》phpsso配置秘钥必须跟phpsso里的秘钥一致)</p> <p>  3、跟discuz!同步用户信息:(UCenter和phpsso类似一样)安装含UCenter的discuz!。</p> <p>  4、配置UCenter:phpsso中的系统设置-》UCenter 的配置进行相关配置(表前缀‘discuz‘.pre_ucenter,必须指明库);应用id: ,秘钥:先去discuz 中设置</p> <p>  5、应用管理-》添加新应用(自定义安装),先提交可以生成通信秘钥,将其复制到phpsso中设置,UCenter中新添加应用id为phpsso中的应用id,提交。(配置文件在phpsso_server\caches\comfigs\uc_ocnfig.php)</p> <p>  6、设置切换自动登录:修改discuz代码(详见手册)</p> <p>  7、模块统一:</p> <p>    a.phpcms后台->模块-》数据源-》外部数据源-》添加外部数据源</p> <p>    b.调用论坛数据:使用get标签调用数据源,链接地址复制帖子地址,将帖子id改为动态id.</p> <p>    c. phpcms:caches/caches_teplate/default/content/index.php--首页模板,可以看出怎么链接的数据</p> <p>  8、URL重写:</p> <p>    a. 动态地址3个参数以后不利于百度搜索,需要将其改为伪静态地址</p> <p>    b. 在后头内容-》管理栏目-栏目后面的修改按钮-》生成html设置-》更新栏目缓存;也可以批量编辑->批量更新URL-》批量更新栏目页-》更新缓存-》生成首页。</p> <p>    c. 修改apache配置文件(httpd.conf),让其支持模块,LoadModule reWrite_module modules/md_rewrite.so 打开注释,将其开启;将phpcms的.htaccess文件(将伪静态转化成动态地址)拷贝到项目根目录</p> <p>  9、主程序与web程序分离(将主程序放于www之外的文件夹,防止被攻击)</p> <p>    a. 将phpcms主程序移除www之外,</p> <p>    b. 修改入口文件index.php : include '' 的base目录;修改api.php : include '' 的 base 目录</p> <p>  10、sphinx 搜索。</p></div></div><div class="MuiGrid-root jss8 MuiGrid-item MuiGrid-grid-xs-true MuiGrid-grid-md-3"><div class="MuiTypography-root jss26 MuiTypography-body1"><div class="MuiTypography-root jss27 MuiTypography-body1"><canvas style="height:108px;width:108px" height="108" width="108"></canvas><div class="MuiTypography-root jss28 MuiTypography-body1"><p class="MuiTypography-root jss29 MuiTypography-body1">手机扫一扫</p><p class="MuiTypography-root jss29 MuiTypography-body1">移动阅读更方便</p></div></div></div><div class="MuiTypography-root jss9 MuiTypography-body1"><div class="MuiTypography-root jss30 MuiTypography-body1" style="height:150px"><div class="swiper-container jss32"><div class="swiper-pagination"></div><div class="swiper-wrapper"><div class="swiper-slide jss32"><a class="MuiTypography-root MuiLink-root MuiLink-underlineHover jss32 MuiTypography-colorInherit" target="_blank" rel="nofollow noopener noreferrer" href="https://qd.rs/aliyun"><img alt="阿里云服务器" class="jss31" src="https://article.cdnof.com/promotion/aliyun.jpg"/></a></div><div class="swiper-slide jss32"><a class="MuiTypography-root MuiLink-root MuiLink-underlineHover jss32 MuiTypography-colorInherit" target="_blank" rel="nofollow noopener noreferrer" href="https://qd.rs/tencent"><img alt="腾讯云服务器" class="jss31" src="https://article.cdnof.com/promotion/tencent.jpg"/></a></div><div class="swiper-slide jss32"><a class="MuiTypography-root MuiLink-root MuiLink-underlineHover jss32 MuiTypography-colorInherit" target="_blank" rel="nofollow noopener noreferrer" href="https://qd.rs/qiniu"><img alt="七牛云服务器" class="jss31" src="https://article.cdnof.com/promotion/qiniu.png"/></a></div></div></div></div></div><div class="MuiTypography-root MuiTypography-body1"><div class="MuiTypography-root jss33 MuiTypography-body1"><p class="MuiTypography-root jss34 MuiTypography-body1">你可能感兴趣的文章</p><div class="MuiList-root MuiList-padding" aria-label="main mailbox folders"></div></div></div></div></div></div><footer style="margin-top:30px"><p class="MuiTypography-root MuiTypography-body2 MuiTypography-colorTextSecondary MuiTypography-alignCenter">Copyright © <a class="MuiTypography-root MuiLink-root MuiLink-underlineHover MuiTypography-colorInherit" href="https://v2as.com" title="哇哦,有大量工具等你探索">V2AS | 问路</a> <!-- -->2024<!-- --> <!-- -->.</p><p class="MuiTypography-root MuiTypography-body2 MuiTypography-colorTextSecondary MuiTypography-alignCenter"><a class="MuiTypography-root MuiLink-root MuiLink-underlineHover MuiTypography-colorInherit" rel="nofollow noopener noreferrer" href="https://beian.miit.gov.cn/">浙ICP备15029886号</a></p></footer></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"article":{"article_id":"f962a557-cef6-441d-8fda-a9e8dbe80e36","title":"phpcms开发使用","link":"","description":"二次开发入口文件:\n  1、dirname(__FILE___) 函数返回的是脚本所在在的路径\n  2、__FILE__ 当前运行文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。\n  3、DIRECTORY_SEPARATOR:是一个显示系统分隔符的命令,DIRECTORY_SEPARATOR是php的内部常量,不需要任何定义与包含即可直接使用\n第一课:\n1、phpsso 相当","image":"","keywords":["phpcms","模板","php","模块","pc","base","model","文件","后台","父类"],"created_at":"2023-07-10T10:09:39.904Z","html":"\u003cp\u003e二次开发入口文件:\u003c/p\u003e\n\u003cp\u003e  1、dirname(__FILE___)\u0026nbsp;函数返回的是脚本所在在的路径\u003c/p\u003e\n\u003cp\u003e  2、___FILE___ 当前运行文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。\u003c/p\u003e\n\u003cp\u003e  3、DIRECTORY_SEPARATOR:是一个显示系统分隔符的命令,DIRECTORY_SEPARATOR是php的内部常量,不需要任何定义与包含即可直接使用\u003c/p\u003e\n\u003cp\u003e第一课:\u003c/p\u003e\n\u003cp\u003e1、phpsso 相当于 Ucenter\u003c/p\u003e\n\u003cp\u003e2、首页index.html可以删除,后台可以再生成,测试访问index.php\u003c/p\u003e\n\u003cp\u003e3、设置-》站点管理、添加站点 :phpcms 有伪战群的概念(eg. 北京校区、上海校区)\u003c/p\u003e\n\u003cp\u003e4、设置-》管理员管理--口令卡:预防黑客在用户登录后台时截获登录信息,登录时输入变化的口令卡。\u003c/p\u003e\n\u003cp\u003e5、模块-》模块管理 :对应代码 phpcms/modules/\u003c/p\u003e\n\u003cp\u003e6、内容-》管理栏目: 修改后要更新栏目缓存!\u003c/p\u003e\n\u003cp\u003e7、频道--分类页,列表页--内容列表,内容--文章内容,模型--(文章、图片、视频)不同的模板及数据表\u003c/p\u003e\n\u003cp\u003e8、采集管理:序列网址---取到URL,去掉规律数字 _(*),测试,网址中必须包含--对采集的网址进行过滤\u003c/p\u003e\n\u003cp\u003e9、\u003cbase href=\"http://www.baidu.com\"\u003e\u0026nbsp; base为基础网址,后面的URL都以前一个base为主体\u003c/p\u003e\n\u003cp\u003e10、获取网址:\u0026nbsp; 找到唯一的分割代码点的截取位置\u003c/p\u003e\n\u003cp\u003e第二课:\u003c/p\u003e\n\u003cp\u003ediv+css\u003c/p\u003e\n\u003cp\u003e1、\u003cbase target=\"\\_blank\"\u003e\u0026nbsp; 头部\u003ctitle\u003e 位置:所有链接都是以弹出的方式打开。\u003c/p\u003e\n\u003cp\u003e2、css样式中 width:200px !important; 火狐识别,ie忽略\u003c/p\u003e\n\u003cp\u003e第三课:\u003c/p\u003e\n\u003cp\u003eHTML5+css3\u003c/p\u003e\n\u003cp\u003e第四课:\u003c/p\u003e\n\u003cp\u003e响应式布局\u003c/p\u003e\n\u003cp\u003e第五课:\u003c/p\u003e\n\u003cp\u003ebootstrap\u003c/p\u003e\n\u003cp\u003e第六课:\u003c/p\u003e\n\u003cp\u003ephpcms 模板引擎\u003c/p\u003e\n\u003cp\u003e1、category.html:频道页模板,index.html:首页模板,show.html:内容页模板\u003c/p\u003e\n\u003cp\u003e2、如果需要模板没有建,就会在缺省模板里继承\u003c/p\u003e\n\u003cp\u003e3、如何切换模板:a.配置缺省目录(cms\\phpcms\\templates\\default)里的配置文件config.php,将其复制到新模板目录配置其模板名及目录,\u003c/p\u003e\n\u003cp\u003e  b.编辑模板:后台-》界面-》模板风格\u003c/p\u003e\n\u003cp\u003e  c.访问新模板:设置-》站点管理-》修改-》模板风格配置\u003c/p\u003e\n\u003cp\u003e4、是否允许在新编辑模板设置:cms\\caches\\configs\\system.php, 将其配置文件是否允许在新编辑模板改为1\u003c/p\u003e\n\u003cp\u003e5、模板引擎语法:\u003c/p\u003e\n\u003cp\u003e  a. 模板页面(**.html)里支持php语法插入,但一般不要用\u003c/p\u003e\n\u003cp\u003e  b.在模板里输出常量使用{},后台php的变量、常量可以在模板{}中直接输出,变量使用$,常量不使用$符号\u003c/p\u003e\n\u003cp\u003e  c.在模板里\u003c?php ?\u003e\u0026nbsp; 等价于\u0026nbsp; {php }\u003c/p\u003e\n\u003cp\u003e  d.{}可以调用所有的php函数,但少用,也可直接用phpcms自带的系统函数(公共函数库:cms\\phpcms\\libs\\functions\\gobal.func.php)\u003c/p\u003e\n\u003cp\u003e  e.\u0026nbsp; if语句:\u0026nbsp;\u0026nbsp; {if $num==10} aaaaaaaaa {elseif $num== 11} ccccc {else} bbbbbbbb {/if}\u003c/p\u003e\n\u003cp\u003e  f. 遍历: {loop $data $r} {$r}\u0026nbsp; {/loop}\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; 下标值\u0026nbsp; {loop $data $k $r} {$k}===\u0026gt;{$r} {/loop} \u0026nbsp; , 默认有 $n 变量计数,不用声明\u003c/p\u003e\n\u003cp\u003e  j.\u0026nbsp; pc标签:对常用模块进行数据读取。\u0026nbsp; {pc:} {/pc}\u0026nbsp;\u0026nbsp; 具体参数可在后台界面里可视化修改\u003c/p\u003e\n\u003cp\u003e  h. 碎片工具箱:不成体系的部分。{pc:block pos=\"index\"}{/pc} ,pos:碎片位置, 碎片在代码中加完得在可视化里点添加碎片才能进行管理\u003c/p\u003e\n\u003cp\u003e  i. {template \"content\",\"footer\"}\u0026nbsp; :包含(包含内容模块的页脚)\u003c/p\u003e\n\u003cp\u003e第七课:\u003c/p\u003e\n\u003cp\u003e  1、bootstrap不兼容IE7以下的版本(IE8也不好使);且库量大,比正常页面加载慢一些。\u003c/p\u003e\n\u003cp\u003e  2、\u003c!--\\[if IE 8 \\]\u003e\u003chtml class=\"ie ie8\" lang=\"en\"\u003e \u003c!endif\u003e--\u0026gt;\u003c/p\u003e\n\u003cp\u003e    \u003c!--\\[if (gte IE 9) | ! (IE)\\]\u003e\u003c!--\u003e\u003c/p\u003e\n\u003cp\u003e    \u003chtml class=\"not-ie\" lang=\"en\"\u003e\u003c/p\u003e\n\u003cp\u003e    \u003c!--\u003c!\\[endif\\]--\u003e\u003c/p\u003e\n\u003cp\u003e    此语句可以让ie8兼容\u003c/p\u003e\n\u003cp\u003e  3、在静态目录下(cms\\statics\\),直接新建个文件夹放新的样式文件(css/js/images),如何在代码中动态引入:可用网站根目录{WEB_PATH}statics/test/css/**.css\u003c/p\u003e\n\u003cp\u003e  4、动态地址:{APP_PATH} 相当于 http://localhost/cms/\u003c/p\u003e\n\u003cp\u003e第八课:\u003c/p\u003e\n\u003cp\u003e  1、对象就是一个东西\u003c/p\u003e\n\u003cp\u003e  2、类生成对象,是对象的描述,类(电脑配置单)-\u0026gt;对象(电脑)\u003c/p\u003e\n\u003cp\u003e  3、类是一个工具箱,对象是拿到工具箱,用里面的工具\u003c/p\u003e\n\u003cp\u003e  4、PHPCMS用到的有关类和对象的php语法:\u003c/p\u003e\n\u003cp\u003e    a.拿到类;b.创建这个类的对象;c.通过对象访问类中的成员\u003c/p\u003e\n\u003cp\u003e    $对象名-\u0026gt;属性 \u0026nbsp; \u0026nbsp; ; \u0026nbsp;\u0026nbsp; $对象名-\u0026gt;方法()\u003c/p\u003e\n\u003cp\u003e  5、封装:\u003c/p\u003e\n\u003cp\u003e    类中的方法供自己类使用,可以封装起来(private function 方法(){}),除了方法可以封装,属性也可以用private封装(避免使用时对属性进行更改);\u003c/p\u003e\n\u003cp\u003e  6、继承:\u003c/p\u003e\n\u003cp\u003e    a.可以对继承的类进行添加新的方法,父类封装(private)的方法不能继承使用;\u003c/p\u003e\n\u003cp\u003e    b.在父类中用protected进行保护,继承的子类可以使用,别处不行,默认是public,都可以使用;\u003c/p\u003e\n\u003cp\u003e    c.继承的子类和父类写同样的方法,是对父类的重写,调用新的方法;\u003c/p\u003e\n\u003cp\u003e    d.如果父类不让子类改写方法,父类可以用 final 来标记方法,final标记的类不能被子类继承;\u003c/p\u003e\n\u003cp\u003e;\u003c/p\u003e\n\u003cp\u003e  7、构造方法:\u003c/p\u003e\n\u003cp\u003e   a.构造方法是创建对象第一个调用的方法(__construct());\u003c/p\u003e\n\u003cp\u003e   b.通常用它执行一些有用的初始化任务。该方法无返回值。如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。\u003c/p\u003e\n\u003cp\u003e   c.与此类似就是析构方法,析构函数不能带有任何参数,其名称必须是 __destruct() 。\u003c/p\u003e\n\u003cp\u003e  8、静态方法:\u003c/p\u003e\n\u003cp\u003e    a.静态方法用static 修饰方法,对象调用此方法时可以直接 类名::方法()\u0026nbsp; 使用,不用声明类\u003c/p\u003e\n\u003cp\u003e  9、parent修饰的方法:\u003c/p\u003e\n\u003cp\u003e    在子类中继承父类,对父类的一个方法进行了重写,要想再调用父类的那个方法可以用parent::方法()\u003c/p\u003e\n\u003cp\u003e  10、项目-》模块组成-》mvc组成-》控制器-》操作组成;\u003c/p\u003e\n\u003cp\u003e    每个操作-》步骤组成--调用模型和视图;\u003c/p\u003e\n\u003cp\u003e    ?m=模块名\u0026amp;c=控制类\u0026amp;a=操作(事件);\u003c/p\u003e\n\u003cp\u003e    在cms\\phpcms\\modules\\中创建一个文件夹为模块m,在模块文件夹中创建一个文件为控制器c,在控制器中写类以及方法,类名与控制器名一致,方法就是操作a,前天控制器名index.php,后台与模块名一样\u003c/p\u003e\n\u003cp\u003e第九课:\u003c/p\u003e\n\u003cp\u003e  1、后台的控制器类必须登录设置,必须需要继承后台的类,pc_base::load_app_class(\"admin\",\"admin\",0)\u003c/p\u003e\n\u003cp\u003e  2、defined('IN_PHPCMS') or exit('No permission resources.'); 表示必须得通过主入口(index.php)进入类,防止通过文件路径直接访问控制器文件\u003c/p\u003e\n\u003cp\u003e  3、所有pc_base:: 都是 phpcms/base.php 中声明的方法\u003c/p\u003e\n\u003cp\u003e  4、模块中的类文件夹(classes),如何在控制器中使用:\u003c/p\u003e\n\u003cp\u003e    a.\u0026nbsp; pc_base::load_app_class(\"类名\")\u0026nbsp; :调用,声明: $demo =\u0026nbsp;pc_base::load_app_class(\"类名\");\u003c/p\u003e\n\u003cp\u003e    b.\u0026nbsp;pc_base::load_app_class(\"类名\",\"模块名\",true) :第二个参数省略默认访问当前模块下的类文件,第三个参数表示是声明(true)还是继承\u003c/p\u003e\n\u003cp\u003e    c.\u0026nbsp;pc_base::load_app_class() :加载应用的类(各自模块自己用的类,当然别人也可以用)\u003c/p\u003e\n\u003cp\u003e  5、pc_base::load_sys_class() : 加载系统的类(是系统中全局函数 phpcms\\libs\\classes)\u003c/p\u003e\n\u003cp\u003e    a. 参数1:类名; 参数二:扩展地址; 参数3: 是否初始化\u003c/p\u003e\n\u003cp\u003e  6、pc_base::load_model() :加载数据模型\u003c/p\u003e\n\u003cp\u003e  7、pc_base::load_sys_func(\"函数库名\",\"模块名\") : 加载系统函数\u003c/p\u003e\n\u003cp\u003e  8、pc_base::load_app_func(\"函数库名\",\"模块名\") :加载应用函数\u003c/p\u003e\n\u003cp\u003e  9、一个功能完成的事,写类;一个函数完成的事,写函数\u003c/p\u003e\n\u003cp\u003e  10、安装模块:\u003c/p\u003e\n\u003cp\u003e    a.在数据库module数据包中添加新模块数据\u003c/p\u003e\n\u003cp\u003e    b.后台扩展-》菜单管理-》添加菜单-》更新缓存\u003c/p\u003e\n\u003cp\u003e  11、前台加载模板:\u003c/p\u003e\n\u003cp\u003e    a.\u0026nbsp;phpcms\\templates\\当前使用的模板风格下\u003c/p\u003e\n\u003cp\u003e    b. 在模板中建一个和模块名相同的文件夹,里面放html文件\u003c/p\u003e\n\u003cp\u003e    c. 控制器加载模板:include template('模板文件所在文件夹名','模板文件');\u003c/p\u003e\n\u003cp\u003e    d. 没有控制器也可以访问到,可以任意使用pc标签\u003c/p\u003e\n\u003cp\u003e  12、后台模板加载:\u003c/p\u003e\n\u003cp\u003e    a. 没有pc标签\u003c/p\u003e\n\u003cp\u003e    b. include $this-\u0026gt;admin_tpl(\"模板名\");\u003c/p\u003e\n\u003cp\u003e    c. 后台模块一定要写在自己模块的templates目录下,文件名不是.html,而是.tpl.php格式\u003c/p\u003e\n\u003cp\u003e    d.include $this-\u0026gt;admin_tpl(\"模板名\",\"模块名\"); 有第二个参数是找其他模块中的模板\u003c/p\u003e\n\u003cp\u003e    e. 语言包:phpcms\\languages,需要在页面显示的中文或英文,建成两个文件,变量,在页面\u003c?php echo L(\"变量\")?\u003e;但一般都直接在页面把输出改成文字。\u003c/p\u003e\n\u003cp\u003e第十课:\u003c/p\u003e\n\u003cp\u003e  1、控制器里的数据,自动扔给模板,模板可以直接使用\u003c/p\u003e\n\u003cp\u003e  2、后台添加模块,数据库添加数据后,显示[hash]数据验证失败,因为后台只可以在界面处访问,不能通过url直接访问\u003c/p\u003e\n\u003cp\u003e  3、链接数据库:\u003c/p\u003e\n\u003cp\u003e    a.phpcms\\libs\\classes\\model.class.php\u0026nbsp; 通过这个类来操作数据库;\u003c/p\u003e\n\u003cp\u003e    b.phpcms\\model\\ \u0026nbsp; 每有一张表就有一个model,新模块再新建一个model;caches\\configs\\database.php\u0026nbsp; 为数据库配置文件\u003c/p\u003e\n\u003cp\u003e    c.\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; function __construct() { \u003cbr /\u003e\n\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp;       \u0026nbsp;$this-\u0026gt;db = pc_base::load_model('mytest_model'); \u003cbr /\u003e\n\u0026nbsp;\u0026nbsp; \u0026nbsp;     }\u003c/p\u003e\n\u003cp\u003e      来加载新建的数据表的model,用$this-\u0026gt;db 来对数据表进行操作\u003c/p\u003e\n\u003cp\u003e    d. php 时间长转时分秒:\u003c?php echo data(\"Y-m-d\",$info['ptime']) ?\u003e\u003c/p\u003e\n\u003cp\u003e    e. 添加数据按钮:扩展-》菜单管理-》添加菜单\u003c/p\u003e\n\u003cp\u003e    f. form类:phpcms\\libs\\classes\\form.class.php\u003c/p\u003e\n\u003cp\u003e    j. $show_validator = $show_scroll = $show_header = true;\u0026nbsp; //开启表单验证\u003c/p\u003e\n\u003cp\u003e    h.extract() : 将数组转化为变量\u003c/p\u003e\n\u003cp\u003e第十一课:\u003c/p\u003e\n\u003cp\u003e  1、模块添加功能:\u003c/p\u003e\n\u003cp\u003e    a.在本模块下,新建my_*.php 控制器,可以防止系统升级时覆盖添加的功能。\u003c/p\u003e\n\u003cp\u003e    b.继承:class My_* extend *{}\u003c/p\u003e\n\u003cp\u003e  2、连接新的表:\u003c/p\u003e\n\u003cp\u003e    a.在构造方法里(__construct(){})中写的东西,其他所有方法都能用。\u003c/p\u003e\n\u003cp\u003e    b.$this-\u0026gt;db2=pc_base::load_model('mytest_model'); \u0026nbsp;//直接加载新的model\u003c/p\u003e\n\u003cp\u003e    c. 加载的新的model会影响以前连接的表($this-db),因为构造方法会覆盖父级里的构造方法,可以在子类的构造方法中调用被覆盖的父类构造方法(在子类构造方法中,parent::__construce(); 可以再次初始化父类的构造方法)\u003c/p\u003e\n\u003cp\u003e  3、子类中如果有构造方法,意味着父类的构造方法被覆盖,再调用下父类的构造方法,可以重新加载父类的构造方法,避免覆盖。\u003c/p\u003e\n\u003cp\u003e  4、提取phpcms框架:\u003c/p\u003e\n\u003cp\u003e    a.在phpsse_server文件中:复制全部文件到新文件中\u003c/p\u003e\n\u003cp\u003e    b.配置:caches/configs/system.php(站点的位置、站点的域名、附件的网址),如果不改会造成验证码出错,或介面排版混乱。\u003c/p\u003e\n\u003cp\u003e    c.配置database.php(服务器主机名,用户名,密码,库名,表前缀等) ;新建数据库,复制表(sso相关),sso_admin、sso_session\u003c/p\u003e\n\u003cp\u003e    d.删除model类,数据库控制类,保留admin_model.class.php、session_model.class.php;删除phpcms/models/下所有应用,保留admin模块。\u003c/p\u003e\n\u003cp\u003e    e.登录后台,右侧有错误:找到admin/index.php文件,在控制器的方法function right(){} 删除。\u003c/p\u003e\n\u003cp\u003e    f.添加新模块:在models中添加新模块,添加表到sso下,model添加\u003c/p\u003e\n\u003cp\u003e    j.以上为后台模板,没有模板引擎,可以添加smtary引擎。\u003c/p\u003e\n\u003cp\u003e    h.移植站点:在phpcms/caches/configs/system.php,将所有旧域名换成新域名,后台,站点设置改为新域名,(更新缓存以及栏目缓存);进入后台内容,附件管理-》附件地址替换成新地址;在内容中,批量更新url,把所有文章的地址都更新一下。\u003c/p\u003e\n\u003cp\u003e第十二课:PHPcms和discuz! 整合\u003c/p\u003e\n\u003cp\u003e  1、PHPcms 做前端,论坛有discus!--腾讯系(或phpwind--阿里系)\u003c/p\u003e\n\u003cp\u003e  2、phpsso为一个单独的系统,多个phpcms网站用一个phpsso:安装第二个phpcms的时候选择仅安装phpcms,然后将已经安装的phpcms地址输入安装(设置-》phpsso配置秘钥必须跟phpsso里的秘钥一致)\u003c/p\u003e\n\u003cp\u003e  3、跟discuz!同步用户信息:(UCenter和phpsso类似一样)安装含UCenter的discuz!。\u003c/p\u003e\n\u003cp\u003e  4、配置UCenter:phpsso中的系统设置-》UCenter 的配置进行相关配置(表前缀‘discuz‘.pre_ucenter,必须指明库);应用id: ,秘钥:先去discuz 中设置\u003c/p\u003e\n\u003cp\u003e  5、应用管理-》添加新应用(自定义安装),先提交可以生成通信秘钥,将其复制到phpsso中设置,UCenter中新添加应用id为phpsso中的应用id,提交。(配置文件在phpsso_server\\caches\\comfigs\\uc_ocnfig.php)\u003c/p\u003e\n\u003cp\u003e  6、设置切换自动登录:修改discuz代码(详见手册)\u003c/p\u003e\n\u003cp\u003e  7、模块统一:\u003c/p\u003e\n\u003cp\u003e    a.phpcms后台-\u0026gt;模块-》数据源-》外部数据源-》添加外部数据源\u003c/p\u003e\n\u003cp\u003e    b.调用论坛数据:使用get标签调用数据源,链接地址复制帖子地址,将帖子id改为动态id.\u003c/p\u003e\n\u003cp\u003e    c. phpcms:caches/caches_teplate/default/content/index.php--首页模板,可以看出怎么链接的数据\u003c/p\u003e\n\u003cp\u003e  8、URL重写:\u003c/p\u003e\n\u003cp\u003e    a. 动态地址3个参数以后不利于百度搜索,需要将其改为伪静态地址\u003c/p\u003e\n\u003cp\u003e    b. 在后头内容-》管理栏目-栏目后面的修改按钮-》生成html设置-》更新栏目缓存;也可以批量编辑-\u0026gt;批量更新URL-》批量更新栏目页-》更新缓存-》生成首页。\u003c/p\u003e\n\u003cp\u003e    c. 修改apache配置文件(httpd.conf),让其支持模块,LoadModule reWrite_module modules/md_rewrite.so 打开注释,将其开启;将phpcms的.htaccess文件(将伪静态转化成动态地址)拷贝到项目根目录\u003c/p\u003e\n\u003cp\u003e  9、主程序与web程序分离(将主程序放于www之外的文件夹,防止被攻击)\u003c/p\u003e\n\u003cp\u003e    a. 将phpcms主程序移除www之外,\u003c/p\u003e\n\u003cp\u003e    b. 修改入口文件index.php : include '' 的base目录;修改api.php : include '' 的 base 目录\u003c/p\u003e\n\u003cp\u003e  10、sphinx 搜索。\u003c/p\u003e"},"seo":{"title":"phpcms开发使用","description":"二次开发入口文件:\n  1、dirname(__FILE___) 函数返回的是脚本所在在的路径\n  2、__FILE__ 当前运行文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。\n  3、DIRECTORY_SEPARATOR:是一个显示系统分隔符的命令,DIRECTORY_SEPARATOR是php的内部常量,不需要任何定义与包含即可直接使用\n第一课:\n1、phpsso 相当","image":"","url":"https://v2as.com/article/f962a557-cef6-441d-8fda-a9e8dbe80e36","keywords":["phpcms","模板","php","模块","pc","base","model","文件","后台","父类"]},"viewsCount":1,"promotionList":[{"title":"阿里云服务器","image":"https://article.cdnof.com/promotion/aliyun.jpg","link":"https://qd.rs/aliyun"},{"title":"腾讯云服务器","image":"https://article.cdnof.com/promotion/tencent.jpg","link":"https://qd.rs/tencent"},{"title":"七牛云服务器","image":"https://article.cdnof.com/promotion/qiniu.png","link":"https://qd.rs/qiniu"}],"similarKeywordsList":null},"__N_SSG":true},"page":"/article/[article_id]","query":{"article_id":"f962a557-cef6-441d-8fda-a9e8dbe80e36"},"buildId":"7EtL49Y65E8zx1NwcIC_o","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body></html>