Rumah >php教程 >php手册 >phpcms学习总结

phpcms学习总结

WBOY
WBOYasal
2016-06-13 09:39:491152semak imbas

<span 文件目录结构
根目录
</span>|<span   &ndash;  api  接口文件目录
</span>|<span   &ndash;  caches 缓存文件目录
       </span>|<span   &ndash; configs 系统配置文件目录
       </span>|  &ndash; caches_*<span  系统缓存目录
</span>|<span   &ndash;  phpcms  phpcms框架主目录
       </span>|<span   &ndash; languages 框架语言包目录
       </span>|<span   &ndash; libs 框架主类库、主函数库目录
       </span>|<span   &ndash; model 框架数据库模型目录
       </span>|<span   &ndash; modules 框架模块目录
       </span>|<span   &ndash; templates 框架系统模板目录
</span>|<span   &ndash;  phpsso_server  phpsso主目录
</span>|<span   &ndash;  statics  系统附件包
       </span>|<span   &ndash; css 系统css包
       </span>|<span   &ndash; images 系统图片包
       </span>|<span   &ndash; js 系统js包
</span>|<span   &ndash;  uploadfile  网站附件目录
</span>|  &ndash;  admin.<span php  后台管理入口
</span>|  &ndash;  index.<span php  程序主入口
</span>|  &ndash;  crossdomain.<span xml  FLASH跨域传输文件
</span>|  &ndash;  robots.<span txt 搜索引擎蜘蛛限制配置文件
</span>|  &ndash;  favicon.<span ico  系统icon图标



URL访问
<strong>PHPCMS</strong>是采用MVC设计模式开发</span>,<span 基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
参数名称    描述    位置    备注
m    模型</span>/模块名称    phpcms/<span modules中模块目录名称    必须
c    控制器名称    phpcms</span>/modules/模块<span /*</span><span .php 文件名称    必须
a    事件名称        phpcms/modules/模块/*.php 文件中方法名称

模块访问方法[示例]:
http://zuzwn.com/index.php?m=content&c=index&a=show&id=1
其中
m = content 为模型/模块名称 位于phpcms/modules/content
c = index   为控制器名称    位于phpcms/modules/content/index.php
a = show    为方法名称      位于phpcms/modules/content/index.php 中show()方法
id = 1 为其他参数 与正常get传递参数形式相同

如果我们访问您的域名 如:
http://www.yourdomain.com/index.php
phpcms默认路由会定位到content模块的index控制器中的init操作,因为系统在没有指定模块和控制器的时候,会执行默认的模块和操作。
因此下面的URL的结果是相同的:系统还支持URL路由的功能,这些都能够带来其他的url访问效果。
http://www.yourdomain.com/index.php?m=content&c=index&a=init



系统类库与函数调用
1.系统类库位于系统的phpcms/libs/classes目录下面,函数库文件名为*.class.php
2.系统函数库位于系统的phpcms/libs/functions目录下面,函数库文件名为*.func.php,其中global.func.php为框架中默认加载,global.func.php中函数可直接使用
系统类库调用
pc_base::load_sys_class('类名','扩展地址','是否初始化');
示例:
$http = pc_base::load_sys_class('http'); //实例化http类
pc_base::load_sys_class('format', '', 0); //调用form类,不进行实例化操作
系统函数库调用
pc_base::load_sys_func('函数库名');
示例:
pc_base::load_sys_func('mail'); 调用mail函数包



模块
phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块。即url访问中的m
示例:
http://www.yourname.com/index.php?m=content
那么您访问的就是phpcms/modules/content 这个模块。
如果创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了



控制器
phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为mytest.php即可。
控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同
如果您创建了一个mytest.php在test模块下,那么我们在浏览器里面输入URL:
http://www.yourname.com/index.php?m=test&c=mytest

下面是一个控制器类的基本格式,在构建模块部分会具体讲解
<?php
defined('IN_PHPCMS') or exit('No permission resources.');
class mytest {
    function __construct() {
    }
    public function init() {
        echo 'hellp phpcms v9,my name is defalut action';
    }
}
?>
如果你添加的控制器类继承了其他的类,你要小心你的方法名不要和那个类中的方法名一样了,否则你的方法会覆盖原有的。



命名规范
PHPCMS其自身的一定规范。下面是使用PHPCMS做二次开发中应该遵循的命名规范:
类文件需要以.class.php为后缀(这里是指的phpcms的系统类库文件和模块中的类库文件,第三方引入的不做要求),例如http.class.php。
函数文件需要以.func.php为后缀(第三方引入的不做要求),例如mail.func.php。
类名和文件名一致,例如 phpcmsapp类的文件命名是phpcmsapp.class.php。
数据模型需要以&ldquo;数据表名称_model.class.php&rdquo;为形式,类名称与文件名必须相同。



配置文件调用
配置文件配置在caches/configs/目录下。
配置文件调用:使用 load_config方法
$upload_url = pc_base::load_config('配置文件','要获取的配置键','默认配置。当获取配置项目失败时该值发生作用','是否强制重新加载');
示例:
调用系统配置中的附件路径
$upload_url = pc_base::load_config('system','upload_url');



二次开发技巧
1.如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过"MY_*.php"的形式进行二次开发。
例如您要对改phpcms/mood/index.php进行二次开发。您可以在与index.php同级的目录下建立"MY_index.php"
MY_index.php代码如下
<?php
class MY_index extends index{
    function __construct() {
        parent::__construct();
    }
    //&hellip;&hellip;your code
 }
 ?>
这样当您通过url访问index控制器的时候,系统会默认指向MY_index.php 并且原文件的方法将被继承,可以直接使用。



数据库配置
数据库配置文件位置:caches/configs/database.php
我们打开这个配置文件,加入我们的数据库配置信息。数据库配置信息为二维数组结构,默认为default,可以根据default结构配置多个数据库链接(如:extended_1)
<?php
return array (
    'default' => array (
        'hostname' => 'localhost',
        'database' => 'phpcms',
        'username' => 'admin',
        'password' => 'admin',
        'tablepre' => 'v9_',
        'charset' => 'gbk',
        'type' => 'mysql',
        'debug' => true,
        'pconnect' => 0,
        'autoconnect' => 0
    ),
    /* 以下格外添加</span><span */</span>
    'extended_1' => <span array</span><span  (
        </span>'hostname' => '10.10.125.2',
        'database' => 'phpcms',
        'username' => 'admin',
        'password' => 'admin',
        'tablepre' => 'v9_',
        'charset' => 'gbk',
        'type' => 'mysql',
        'debug' => <span true</span>,
        'pconnect' => 0,
        'autoconnect' => 0<span 
    )</span>,<span 
);
</span>?><span 
根据您的数据库连接信息修改上面的配置内容,修改完成后,保存该数据库配置文件。



路由配置
路由配置文件位置:caches</span>/configs/route.<span php
我们打开这个配置文件,加入我们的路由配置信息。路由配置信息为二维数组结构,默认为default。
路由配置文件内容是这样的:
</span><?<span php
</span><span return</span> <span array</span><span (
    </span>'default'=><span array</span>('m'=>'admin', 'c'=>'index', 'a'=>'init'),
    'test.youname.com'=><span array</span>('m'=>'test', 'c'=>'index', 'a'=>'init'),<span 
);
</span>?><span 
data为一个二维数组,可设置POST和GET的默认参数。POST和GET分别对应PHP中的</span><span $_POST和$_GET两个超全局变量</span><span 。
如下面的例子,在程序中您可以使用</span><span $_POST</span>['catid'<span ]来得到data下面POST中的数组的值。
data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。
如:
</span><?<span php
</span><span return</span> <span array</span><span (
    </span>'default'=><span array</span><span (
        </span>'m'=>'phpcms',
        'c'=>'index',
        'a'=>'init',
        'data'=><span array</span><span (
            </span>'POST'=><span array</span><span (
                </span>'catid'=>1<span 
            )</span>,
            'GET'=><span array</span><span (
                </span>'contentid'=>1<span 
            )
        )
    )
)
</span>?><span 
外部程序POST了一个变量catid</span>=2那么你在程序中使用<span $_POST取到的值是2</span><span ,而不是配置文件中所设置的1。



系统配置
系统配置文件位置:caches</span>/configs/<span system</span>.<span php
具体详见该文件注释



构建模块
开发流程
为你的phpcms创建一个模块的一般开发流程是:
</span>1.<span     创建数据库和数据表;(没有数据库操作可略过)
</span>2.<span     创建模块目录
</span>3.<span     创建模块控制器类;
</span>4.<span     创建模块类与模块函数;(如果只是简单的模块可以不必创建)
</span>5.<span     创建模板文件;
</span>6.<span     运行和调试。

创建模块
phpcms v9框架中的模块,位于phpcms</span>/<span modules目录中 每一个目录称之为一个模块
如果要创建一个模块,只要在 phpcms</span>/<span modules 目录下创建文件夹并放入你的控制器类就可以了。
例如我要开发一个叫做test的模块,那么首先在 phpcms</span>/<span modules 目录下创建文件夹,并将其命名为test。
test文件夹下通常有三个文件夹</span>:<span 
classes    为模块类库包
functions  为模块函数库包
templates  为模块模板包 这里通常放置含有权限控制的控制器模板,也就是后台模板。

如果您的模板有单独的前台模板,你需要在phpcms\templates\default下创建一个您的模块目录来放置前台模板
</span>"default"<span 为你的风格包名称,我们默认适用default
这里我们在default文件夹下创建名为test的文件夹存放模板



创建模块控制器
在创建模块中我们已经创建好了一个名为&ldquo;test&rdquo;的模块,接下来我们继续为这个模块添加两个控制器类。
phpcms v9的控制器就是模块的类文件,位于phpcms</span>/modules/模块/<span 目录下面。
类名成就是文件名</span>+.php,例如一个名为mytest的控制器,那么他的命名为mytest.<span php即可。
控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。

控制器类文件包含两种形式:
</span>1.mytest.<span php 控制器,前台浏览(不含权限控制)
</span><?<span php
</span><span /*</span><span 
defined('IN_PHPCMS') or exit('No permission resources.');
class mytest {
    function __construct() {
    }
    public function init() {
        $myvar = 'hello world!';
        echo $myvar;
    }
    public function mylist() {
        $myvar = 'hello world!this is a example!';
        echo $myvar;
    }
}
</span><span */</span>
?><span 
这个控制器的url访问方法前面已经介绍过了
http</span>:<span //</span><span www.zuzwn.com/index.php?m=test&c=mytest</span>
http:<span //</span><span www.zuzwn.com/index.php?m=test&c=mytest&a=mylist</span>
<span 没有填写 &ldquo;a&rdquo; 的情况下,默认调用init方法

</span>2.mytest_admin.<span php 控制器,后台管理(含权限控制)
后台控制控制器需要加载admin模块下的admin类,并继承该类。
需要注意的是因为你添加的控制器类继承了其他的类,你要小心你控制器的方法名不要和该类中的方法名一样了,否则会造成影响,具体请查看admin类中有哪些方法。
</span><?<span php
</span><span defined</span>('IN_PHPCMS') or <span exit</span>('No permission resources.'<span );
pc_base</span>::load_app_class('admin','admin',0<span );
</span><span class</span> mytest_admin <span extends</span><span  admin {
    </span><span public</span> <span function</span><span  __construct() {
    }
    </span><span public</span> <span function</span><span  init() {
        </span><span $myvar</span> = 'oh,i am phpcmser'<span ;
        </span><span echo</span> <span $myvar</span><span ;
    }
}
</span>?><span 
在控制器中增加模板调用
phpcms 可以实现完全的模板与程序分离,所以在我们的控制器程序中要加载模板,才可以更友好的显示出来。
</span>1.<span 加载前台模板
前台模板文件在phpcms\templates\</span><span default</span>\模块名称 目录中,本示例也就在phpcms\templates\<span default</span><span \test中
加载模板方法如下</span>:
<span include</span> template('test', 'mytest', 'default'<span );
其中 test为模块名称 mytest 为模板目录下模板名称</span>,<span default为风格名称,默认不填为defalut
在上面例子中如果要给mytest</span>.<span php中init方法加载一个mytest的模板,如下
</span><span public</span> <span function</span><span  init() {
    </span><span $var</span> = 'hello world!'<span ;
    </span><span include</span> template('test', 'mytest', 'default'<span );
}
这样我们通过url访问该方法的时候也就加载了对应的模板。
</span>2.<span 加载后台模板
后台模板文件在phpcms\modules\模块名称\templates 目录中,本示例也就在phpcms\modules\test\templates 中
加载模板方法如下:
</span><span include</span> <span $this</span>->admin_tpl('mytest_admin_list'<span );
其中mytest_admin_list为phpcms\modules\test\templates中mytest_admin_list</span>.tpl.php,注意:后台模板必须以.tpl.<span php 作为后缀
在上面例子中如果要给mytest_admin</span>.<span php中init方法加载一个mytest_admin_list的模板,如下
</span><span public</span> <span function</span><span  init() {
    </span><span $myvar</span> = 'oh,i am phpcmser'<span ;
    </span><span include</span> <span $this</span>->admin_tpl('mytest_admin_list'<span );
}



创建数据库模型类
数据库模型位于:phpcms</span>/model/<span  目录下。
数据模型文件的命名规则建议为数据表名称</span>+'_model.class.php'<span 
如果在我们的创建的模块中我要使用一个数据库</span>"test",首先需要建立一个数据库模型文件,文件名称为'test_model.class.php'<span 
内容如下:
</span><?<span php
</span><span defined</span>('IN_PHPCMS') or <span exit</span>('No permission resources.'<span );
pc_base</span>::load_sys_class('model', '', 0<span );
</span><span class</span> test_model <span extends</span><span  model {
    </span><span public</span> <span function</span><span  __construct() {
        </span><span $this</span>->db_config = pc_base::load_config('database'<span );
        </span><span $this</span>->db_setting = 'default'<span ;
        </span><span $this</span>->table_name = 'test'<span ;
        parent</span>::<span __construct();
    }
}
</span>?><span 
注意:
</span>1.<span 数据库模型类名称必须与文件名称相同;
</span>2.<span $this</span>->db_setting = 'default'<span 为数据库配置文件中配置数据库链接池名称,默认为default,一般情况下不需要修改。
</span>3.<span $this</span>->table_name = 'test'<span 为数据表名称

这样我们就建立好了一个数据库模型类。
在模块的控制器中使用
</span><span $this</span>->db = pc_base::load_model('test_model'<span );
来加载。
具体如下
</span><?<span php
</span><span /*</span><span 
defined('IN_PHPCMS') or exit('No permission resources.');
class mytest {
    private $db;
    function __construct() {
        $this->db = pc_base::load_model('test_model');
    }
    public function init() {
        $result = $this->db->select();
        var_dump($result);
    }
}
</span><span */</span>
?><span 
其中</span><span $this</span>->db中所支持的方法请参照phpcms/libs/classes/model.<span class</span>.php中方法

 

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Yii 配置默认controller和actionArtikel seterusnya:第八章 字符串处理