PHPCMS v9模型二次开发[高级]
概述:PHPCMS v9模型二次开发主要分为底层模型开发,即代码级的模型开发;其次,是可视化的模型开发,即通过登录系统后台添加模型。
第一种模型开发对技术要求很高,但是,能实现很多PHPCMS v9没有实现或者不能实现的功能。
第二种模型开发完全隐藏了技术的实现,操作简单,使用方便,在没有特殊功能的时候,这个是首先。
我们今天先讲第二种,可视化的模型开发。
假如,现在我们有一个产品展示功能。要显示的信息如下:
*)产品名称
*)产品价格
*)出厂时间
*)规格参数
*)配件列表
*)产品图片
然后,PHPCMS v9提供的文章模型、图片模型、下载模型根本不能满足我们的这个需求。此时,我们就会涉及到添加模型的操作。
1、登录系统后台,进入导航“内容”----》"管理模型"
然后,在页面的右边找到“添加模型”,点击进入添加模型:
模型名称必须填写,当我们在添加栏目的时候就可以选择以这个名称命名的模型了。
模型表键名也必须填写,这个将会在数据库里面有二张表对应,假设此时的表前缀是:v9_则对应的两张表名为:v9_products、v9_products_data
2、点击确定创建好自定义的“产品模型”之后,点击“字段管理”
点击“字段管理”之后,在弹出的页面里面进行字段的禁用、删除、添加等操作。
比如:添加产品名称、产品价格、产品规格、出厂时间等字段。
删除:阅读收费、允许评论、分页方式、相关文章等字段。
禁用:关键词、推荐位等字段。
删除字段与禁用字段都很方便快捷,现在来谈谈添加字段。
在点击“字段管理”进入页面后,左上角会有一个“添加字段”的功能。
点击“添加字段”进入页面。如图:
我们以添加一个是否显示产品的功能字段,那么在字段类型那里可以选择“选项”;
由于,我们会经常使用这个字段进行查询,所以,我们在“作为主表字段”设置为是;
字段名设置为isshows,这个地方的字段名对应表中的v9_products表中的字段,添加字段完成之后,可以在这个表中看得出来。当然,如果你的模型键名称不是products的话,那就不是这个表名。
字段别名,我们设置为“是否显示”,这个对应表单中的名字。以下就是我们添加之后的图例:
这个时候,在字段里面就存在了刚才我们添加的字段了。如图:
这个时候,我们自定义的模型就已经OK了。现在我们就来添加栏目。
点击导航栏的“内容”,左侧菜单选择“管理栏目”,再选择“添加栏目”,如图:
添加栏目,如图示添加内容:
点击“提交”保存栏目。
这样,我们就可以在“管理内容”页面为这个产品展示的栏目添加内容了。
自定义的产品模型也添加好了,栏目也添加好了,数据也有了。这个时候是讨论怎样在模板调用这些数据的时候了。
假如,我们在首页要调用这个栏目的数据,假定此栏目ID是13,调用数据的方法如下:
{pc:content action="lists"catid="13"num="6"}
{loop$data$r}
{/loop}
{/pc}
大家有没有发现,调用自定义模型的数据的方式与我们调用文章模型的数据一模一样。所以,以后调用数据的方式要与文章模型的数据调用方式等同起来,没有任何差别。
除此之外,再强调一点,文章模型、图片模型、下载模型调用的方法都是一样的,以及后来添加的自定义模型也是一样的,都是用的pc标签里面的content模型的标签。
关于pc标签的content模型的标签使用参照PHPCMS v9手册的标签使用一节内容。
到此,我们的自定义模型的介绍已经完毕了。
接下来,我们来讲一讲代码级的模型开发。
概述:有时候,我们想调用的数据不是通过界面的形式来添加数据,或者触发添加数据的机制不是手动的,而是有特定条件。比如:在用户登录的时候自动添加数据、在每天晚上凌晨添加数据等。所以,这时候就会用到代码级的模型开发。当然,我们今天要讲的是最核心的部分,掌握这部分,以后遇到更多的关于底层数据的问题,基本上都能迎刃而解啦。
模型最终的实现出来的也是PHP文件,就像Smarty模板引擎一样,只不过是人为地把某一类功能的集合生成的文件称之为模型而已。这些文件存放的位置在项目目录\phpcms\model下,一般情况下,数据库里面的第一个表,在此目录下对应一个PHP文件。
如现在我们要做一个功能,在登录的时候,向v9_mylogin表写入一条登录记录数据。
表结构如下:
CREATE TABLE`v9_mylogin`(
`id`int(10)unsigned NOT NULL auto_increment COMMENT'主键、自增',
`userid`int(10)unsigned NOT NULL COMMENT'用户ID',
`logintime`int(10)unsigned NOT NULL COMMENT'登录时间',
PRIMARY KEY(`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8COMMENT='登录记录表';
先将这个表在项目对应的数据库里面创建好。
然后在项目目录\phpcms\model\目录下创建一个mylogin_model.class.php的文件,然后,在打开这个PHP脚本文件,写入以下代码:
defined('IN_PHPCMS')or exit('No permission resources.');
pc_base::load_sys_class('model','',0);
class mylogin_model extends model{
public function__construct(){
$this->db_config=pc_base::load_config('database');
$this->db_setting='default';
$this->table_name='mylogin';
parent::__construct();
}
}
?>
现在我来解释一下,为什么脚本的名字为什么是mylogin_model.class.php,因为,PHPCMS v9它底层代码的文件加载机制规定了,如果表名的前缀是"v9_",那么,创建一个新表就是前缀加上表名,即得:v9_mylogin。这个时候要想对此表进行增删改查,必须在model目录下创建一个去除表前缀后得到的mylogin,再拼接上
_model.class.php的名字的PHP脚本文件名。
切记,如果我们创建的脚本名字是mylogin_model.class.php,那么代码里面的class类名要更改为对应的名字。如,我们这里是mylogin_model。如果是userlogin_model.class.php,那么类名应该更改为:userlogin_model。
其次是代码里面的$this->table_name='mylogin';
这个地方也要与去掉表前缀"v9_"之后的名字对应起来。
这样我们的代码给模板要更改的文件就创建好了。现在我们就来操作此表。
1)打开文件项目目录\phpcms\modules\member\index.php,打到文件里面的login方法,然后找到登录成功的代码位置,大概在673行的位置,添加如下代码:
//通过pc_base类的load_model静态方法调用mylogin_model.class.php类文件,并生成mylogin_model类生成一个对象并返回。
$this->mylogin_db=pc_base::load_model('mylogin_model');
//组建登录数据。
$data['userid']=$userid;
$data['logintime']=time();
//向表添加数据。
$this->mylogin_db->insert($data);
其他的查询、删除等方法使用请参见:
项目目录\phpcms\libs\classes\model.class.php