近几天由于php项目开发需求,对于php自定义字段了解了一些,刚开始有些摸不着头脑,后来经过几天的摸索逐渐发现这款cms的强大之处了,心里也逐渐的认为,那些插件也不过是依据phpcms自定义字段功能的一个扩展而已,可能说的有些粗略了,在此php爱好者小编表示完全没有对插件开发者轻视的意思,表示一下尊重,对于建站者来说用phpcms建站有些时候不免轻松容易了些,但是也是提高开发效率的最初执行把
接下来介绍一下字段的存在原理吧
首先就对原先存在的字段进行分析:就拿modules/content/fields/images这个字段来说明。这个字段文件夹(images)下面的一些文件在这里做简要的说明:
1、config.inc.php:这个文件里面主要是一些初始化的控制信息。对表单中的一些控件设置初始值的;
2、form.inc.php:这个文件主要对该字段在表单中如何显示,以及设置相应的属性和值等的设置;(必)
3、input.inc.php:这个文件主要是对该字段的值在插入数据库之前要进行那些处理的一个函数;(选)
4、ouput.inc.php:这个文件主要是对该字段从数据库取出数据之后,经过这个文件内定义的函数处理之后再显示到页面上;(选)
5、field_add_form.inc.php:这个文件主要是一些html代码,当我们在后台添加字段时,会有选择字段类型的一个下拉框。这 个框里面的数据都是通过{mocule}/fields/fields.inc.php文件中获得的。这个里面的数组包括了当前自定义的所有字段值。而每 一个字段值都有一个文件夹。这个文件就如同我们上面讲的images,这个下面有很多处理该字段的文件。当我们选择某一个字段类型的时候,会通过json 来取这个类型所对应的文件夹下面的field_add_form.inc.php,一次来设置该字段的属性。(必)
6、field_edit_form.inc.php:这个文件的功能和上面的功能基本上是一样的。这个是在编辑字段的时候通过json获取。(必)
在后台添加字段的时候,会根据你的选择,判断是将该字段的值添加到主表(如:news)还是添加到从表(如:news_data),看如下代码(sitemodel_field.php):
1
//判断添加的字段是选择在主表还是在从表
2
$tablename = $_POST['issystem'] ? $this->db->db_tablepre.$model_table : $this->db->db_tablepre.$model_table.'_data';
然后按照格式修改那个模型表的字段(添加一个字段,调用add.sql.php文件),之后后现将该字段的所有信息插入到数据表pc_model_field中;
我们先来看下下面这段代码(content.php)
1
//加载自定义的字段值输出控制类库(对自定义的字段的值的输出进行处理)
2
require_once CACHE_MODEL_PATH.'content_output.class.php';
3
$content_output = new content_output($modelid,$catid,$CATEGORYS);
4
$data = $content_output->get($rs);//对每个字段的值都按需要进行处理,然后在返回进行显示
(content_model.php)
1
//加载自定义的字段值输入控制类库(对自定义的字段的值的存入DB进行处理)
2
require_once CACHE_MODEL_PATH.'content_input.class.php';
(content.php)
1
$modelid = $category['modelid'];
2
//取模型ID,依模型ID来生成对应的表单
3
require CACHE_MODEL_PATH.'content_form.class.php';
4
$content_form = new content_form($modelid,$catid,$this->categorys);
5
$forminfos = $content_form->get();
上面的这些都是调用相关处理类的代码;那么这些文件都是怎么得来的呢?里面的内容又是什么呢?这里就要从更新后台缓存说起了。
后台更新缓存(admin/cache_all.php文件)这个文件会调用缓存操作类文件cache_api.class.php文件。我们这里主要来看sitemodel()方法里面的部分代码。
01
require MODEL_PATH.'fields.inc.php';//返回$fields数组
02
//更新内容模型类:表单生成、入库、更新、输出
03
$classtypes = array('form','input','update','output');
04
//一次从自定义字段文件夹中获取form.inc.php,input.inc.php,update.inc.php,output.inc.php,放到cache_model/**.class.php文件中
05
foreach($classtypes as $classtype) {
06
$cache_data = file_get_contents(MODEL_PATH.'content_'.$classtype.'.class.php');
07
$cache_data = str_replace('}?>','',$cache_data);
08
//对字段的相关文件夹里面的数据进行处理
09
foreach($fields as $field=>$fieldvalue) {
10
if(file_exists(MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php')) {
11
$cache_data .= file_get_contents(MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php');
12
}
13
}
14
$cache_data .= "\r\n } \r\n?>";
15
file_put_contents(CACHE_MODEL_PATH.'content_'.$classtype.'.class.php',$cache_data);
16
chmod(CACHE_MODEL_PATH.'content_'.$classtype.'.class.php',0777);
17
}
这里通过遍历fields.inc.php文件中字段来遍历获取每个字段文件夹下面的 orm.inc.php,input.inc.php,update.inc.php,output.inc.php的内容,然后将这些文件中的函数写到 content_{classtype}.class.php文件中,这里就解释了刚刚调用的那些cache_model/下面的那些文件的由来。主要就 是将每个自定义文件夹下面的操作函数添加到{modules}/fields/content_{classtype}.class.php文件中,然后 把文件的内容写到缓存中去,方便我们在后期的直接加载该文件进行调用。
content_form.class.php文件的使用情况:
当我们要为一个模型添加数据的时候,这个时候就需要利用很传统的表单了。那么这个为模型添加数据的表单在PC中不是固定的。而是根据字段的情况来显示的。那么这里就要用到这个文件里。当要添加数据时,会调用这个文件来显示相关的表单控件
1
$modelid = $category['modelid'];
2
//取模型ID,依模型ID来生成对应的表单
3
require CACHE_MODEL_PATH.'content_form.class.php';
接下来介绍一下字段的存在原理吧
首先就对原先存在的字段进行分析:就拿modules/content/fields/images这个字段来说明。这个字段文件夹(images)下面的一些文件在这里做简要的说明:
1、config.inc.php:这个文件里面主要是一些初始化的控制信息。对表单中的一些控件设置初始值的;
2、form.inc.php:这个文件主要对该字段在表单中如何显示,以及设置相应的属性和值等的设置;(必)
3、input.inc.php:这个文件主要是对该字段的值在插入数据库之前要进行那些处理的一个函数;(选)
4、ouput.inc.php:这个文件主要是对该字段从数据库取出数据之后,经过这个文件内定义的函数处理之后再显示到页面上;(选)
5、field_add_form.inc.php:这个文件主要是一些html代码,当我们在后台添加字段时,会有选择字段类型的一个下拉框。这 个框里面的数据都是通过{mocule}/fields/fields.inc.php文件中获得的。这个里面的数组包括了当前自定义的所有字段值。而每 一个字段值都有一个文件夹。这个文件就如同我们上面讲的images,这个下面有很多处理该字段的文件。当我们选择某一个字段类型的时候,会通过json 来取这个类型所对应的文件夹下面的field_add_form.inc.php,一次来设置该字段的属性。(必)
6、field_edit_form.inc.php:这个文件的功能和上面的功能基本上是一样的。这个是在编辑字段的时候通过json获取。(必)
在后台添加字段的时候,会根据你的选择,判断是将该字段的值添加到主表(如:news)还是添加到从表(如:news_data),看如下代码(sitemodel_field.php):
1
//判断添加的字段是选择在主表还是在从表
2
$tablename = $_POST['issystem'] ? $this->db->db_tablepre.$model_table : $this->db->db_tablepre.$model_table.'_data';
然后按照格式修改那个模型表的字段(添加一个字段,调用add.sql.php文件),之后后现将该字段的所有信息插入到数据表pc_model_field中;
我们先来看下下面这段代码(content.php)
1
//加载自定义的字段值输出控制类库(对自定义的字段的值的输出进行处理)
2
require_once CACHE_MODEL_PATH.'content_output.class.php';
3
$content_output = new content_output($modelid,$catid,$CATEGORYS);
4
$data = $content_output->get($rs);//对每个字段的值都按需要进行处理,然后在返回进行显示
(content_model.php)
1
//加载自定义的字段值输入控制类库(对自定义的字段的值的存入DB进行处理)
2
require_once CACHE_MODEL_PATH.'content_input.class.php';
(content.php)
1
$modelid = $category['modelid'];
2
//取模型ID,依模型ID来生成对应的表单
3
require CACHE_MODEL_PATH.'content_form.class.php';
4
$content_form = new content_form($modelid,$catid,$this->categorys);
5
$forminfos = $content_form->get();
上面的这些都是调用相关处理类的代码;那么这些文件都是怎么得来的呢?里面的内容又是什么呢?这里就要从更新后台缓存说起了。
后台更新缓存(admin/cache_all.php文件)这个文件会调用缓存操作类文件cache_api.class.php文件。我们这里主要来看sitemodel()方法里面的部分代码。
01
require MODEL_PATH.'fields.inc.php';//返回$fields数组
02
//更新内容模型类:表单生成、入库、更新、输出
03
$classtypes = array('form','input','update','output');
04
//一次从自定义字段文件夹中获取form.inc.php,input.inc.php,update.inc.php,output.inc.php,放到cache_model/**.class.php文件中
05
foreach($classtypes as $classtype) {
06
$cache_data = file_get_contents(MODEL_PATH.'content_'.$classtype.'.class.php');
07
$cache_data = str_replace('}?>','',$cache_data);
08
//对字段的相关文件夹里面的数据进行处理
09
foreach($fields as $field=>$fieldvalue) {
10
if(file_exists(MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php')) {
11
$cache_data .= file_get_contents(MODEL_PATH.$field.DIRECTORY_SEPARATOR.$classtype.'.inc.php');
12
}
13
}
14
$cache_data .= "\r\n } \r\n?>";
15
file_put_contents(CACHE_MODEL_PATH.'content_'.$classtype.'.class.php',$cache_data);
16
chmod(CACHE_MODEL_PATH.'content_'.$classtype.'.class.php',0777);
17
}
这里通过遍历fields.inc.php文件中字段来遍历获取每个字段文件夹下面的 orm.inc.php,input.inc.php,update.inc.php,output.inc.php的内容,然后将这些文件中的函数写到 content_{classtype}.class.php文件中,这里就解释了刚刚调用的那些cache_model/下面的那些文件的由来。主要就 是将每个自定义文件夹下面的操作函数添加到{modules}/fields/content_{classtype}.class.php文件中,然后 把文件的内容写到缓存中去,方便我们在后期的直接加载该文件进行调用。
content_form.class.php文件的使用情况:
当我们要为一个模型添加数据的时候,这个时候就需要利用很传统的表单了。那么这个为模型添加数据的表单在PC中不是固定的。而是根据字段的情况来显示的。那么这里就要用到这个文件里。当要添加数据时,会调用这个文件来显示相关的表单控件
1
$modelid = $category['modelid'];
2
//取模型ID,依模型ID来生成对应的表单
3
require CACHE_MODEL_PATH.'content_form.class.php';