• 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.配置缺省目录(cmsphpcms emplatesdefault)里的配置文件config.php,将其复制到新模板目录配置其模板名及目录,

      b.编辑模板:后台-》界面-》模板风格

      c.访问新模板:设置-》站点管理-》修改-》模板风格配置

    4、是否允许在新编辑模板设置:cmscachesconfigssystem.php, 将其配置文件是否允许在新编辑模板改为1

    5、模板引擎语法:

      a. 模板页面(**.html)里支持php语法插入,但一般不要用

      b.在模板里输出常量使用{},后台php的变量、常量可以在模板{}中直接输出,变量使用$,常量不使用$符号

      c.在模板里<?php ?>  等价于  {php }

      d.{}可以调用所有的php函数,但少用,也可直接用phpcms自带的系统函数(公共函数库:cmsphpcmslibsfunctionsgobal.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、在静态目录下(cmsstatics),直接新建个文件夹放新的样式文件(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=操作(事件);

        在cmsphpcmsmodules中创建一个文件夹为模块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() : 加载系统的类(是系统中全局函数 phpcmslibsclasses)

        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 emplates当前使用的模板风格下

        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. 语言包:phpcmslanguages,需要在页面显示的中文或英文,建成两个文件,变量,在页面<?php echo L("变量")?>;但一般都直接在页面把输出改成文字。

    第十课:

      1、控制器里的数据,自动扔给模板,模板可以直接使用

      2、后台添加模块,数据库添加数据后,显示[hash]数据验证失败,因为后台只可以在界面处访问,不能通过url直接访问

      3、链接数据库:

        a.phpcmslibsclassesmodel.class.php  通过这个类来操作数据库;

        b.phpcmsmodel   每有一张表就有一个model,新模块再新建一个model;cachesconfigsdatabase.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类:phpcmslibsclassesform.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_servercachescomfigsuc_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 搜索。

  • 相关阅读:
    Adobe PS
    深入学习二叉树(04)平衡二叉树
    深入学习二叉树(03)二叉查找树
    C 知识点
    实战【docker 镜像制作与使用】
    从0到1了解 CI/CD
    理解Spring 容器、BeanFactory 以及 ApplicationContext
    Java 中 CAS
    volatile 关键字
    JenKins安装
  • 原文地址:https://www.cnblogs.com/isungge/p/5416704.html
Copyright © 2020-2023  润新知