你现在的位置:首页 > PHP网站建设知识库 > phpcms > 正文

phpcms v9 模型字段详解

比如:文章模型下的时间和日期模型字段-datatime,与当前datetime模型字段相关的文件都在phpcms/content/fields/datetime/文件夹下

1.phpcms/content/fields/datetime/field_add_form.inc.php:在后台添加时间和日期模型字段时,相关参数部分表单信息
 

  1. <table cellpadding="2" cellspacing="1" bgcolor="#ffffff">  
  2.     <tr>   
  3.       <td><strong>时间格式:</strong></td>  
  4.       <td>  
  5.       <input type="radio" name="setting[fieldtype]" value="date" checked>日期(<?php echo date('Y-m-d');?><br />  
  6.       <input type="radio" name="setting[fieldtype]" value="datetime_a">日期+12小时制时间(<?php echo date('Y-m-d h:i:s');?><br />  
  7.       <input type="radio" name="setting[fieldtype]" value="datetime">日期+24小时制时间(<?php echo date('Y-m-d H:i:s');?><br />  
  8.       <input type="radio" name="setting[fieldtype]" value="int">整数 显示格式:  
  9.       <select name="setting[format]">  
  10.       <option value="Y-m-d Ah:i:s">12小时制:<?php echo date('Y-m-d h:i:s');?></option>  
  11.       <option value="Y-m-d H:i:s">24小时制:<?php echo date('Y-m-d H:i:s');?></option>  
  12.       <option value="Y-m-d H:i"><?php echo date('Y-m-d H:i');?></option>  
  13.       <option value="Y-m-d"><?php echo date('Y-m-d');?></option>  
  14.       <option value="m-d"><?php echo date('m-d');?></option>  
  15.       </select>  
  16.       </td>  
  17.     </tr>  
  18.     <tr>   
  19.       <td><strong>默认值:</strong></td>  
  20.       <td>  
  21.       <input type="radio" name="setting[defaulttype]" value="0" checked/><br />  
  22.      </td>  
  23.     </tr>  
  24. </table>  

 

\

 

2.phpcms/content/fields/datetime/field_edit_form.inc.php:在后台修改时间和日期模型字段时,相关参数部分表单信息

 

  1. <?php defined('IN_PHPCMS') or exit('No permission resources.');?>  
  2. <table cellpadding="2" cellspacing="1" bgcolor="#ffffff">  
  3.     <tr>   
  4.       <td><strong>时间格式:</strong></td>  
  5.       <td>  
  6.       <input type="radio" name="setting[fieldtype]" value="date" <?php if($setting['fieldtype']=='date') echo 'checked';?>>日期(<?=date('Y-m-d')?><br />  
  7.       <input type="radio" name="setting[fieldtype]" value="datetime_a" <?php if($setting['fieldtype']=='datetime_a') echo 'checked';?>>日期+12小时制时间(<?=date('Y-m-d h:i:s')?><br />  
  8.       <input type="radio" name="setting[fieldtype]" value="datetime" <?php if($setting['fieldtype']=='datetime') echo 'checked';?>>日期+24小时制时间(<?=date('Y-m-d H:i:s')?><br />  
  9.       <input type="radio" name="setting[fieldtype]" value="int" <?php if($setting['fieldtype']=='int') echo 'checked';?>>整数 显示格式:  
  10.       <select name="setting[format]">  
  11.       <option value="Y-m-d Ah:i:s" <?php if($setting['format']=='Y-m-d Ah:i:s') echo 'selected';?>>12小时制:<?php echo date('Y-m-d h:i:s')?></option>  
  12.       <option value="Y-m-d H:i:s" <?php if($setting['format']=='Y-m-d H:i:s') echo 'selected';?>>24小时制:<?php echo date('Y-m-d H:i:s')?></option>  
  13.       <option value="Y-m-d H:i" <?php if($setting['format']=='Y-m-d H:i') echo 'selected';?>><?php echo date('Y-m-d H:i')?></option>  
  14.       <option value="Y-m-d" <?php if($setting['format']=='Y-m-d') echo 'selected';?>><?php echo date('Y-m-d')?></option>  
  15.       <option value="m-d" <?php if($setting['format']=='m-d') echo 'selected';?>><?php echo date('m-d')?></option>  
  16.       </select>  
  17.       </td>  
  18.     </tr>  
  19.     <tr>   
  20.       <td><strong>默认值:</strong></td>  
  21.       <td>  
  22.       <input type="radio" name="setting[defaulttype]" value="0" checked/><br />  
  23.      </td>  
  24.     </tr>  
  25. </table>  


 

 

\

 

3.phpcms/content/fields/datetime/form.inc.php:后台添加文章内容时生成的时间和日期表单需通过此文件中的函数来生成;此文件中的函数会动态缓存到caches/caches_model/caches_data/content_form.class.php文件中

  1. function datetime($field, $value, $fieldinfo) {  
  2.     extract(string2array($fieldinfo['setting']));  
  3.     $isdatetime = 0;  
  4.     $timesystem = 0;  
  5.     if($fieldtype=='int') {  
  6.         if(!$value) $value = SYS_TIME;  
  7.         $format_txt = $format == 'm-d' ? 'm-d' : $format;  
  8.         if($format == 'Y-m-d Ah:i:s') $format_txt = 'Y-m-d h:i:s';  
  9.         $value = date($format_txt,$value);  
  10.           
  11.         $isdatetime = strlen($format) > 6 ? 1 : 0;  
  12.         if($format == 'Y-m-d Ah:i:s') {  
  13.               
  14.             $timesystem = 0;  
  15.         } else {  
  16.             $timesystem = 1;  
  17.         }             
  18.     } elseif($fieldtype=='datetime') {  
  19.         $isdatetime = 1;  
  20.         $timesystem = 1;  
  21.     } elseif($fieldtype=='datetime_a') {  
  22.         $isdatetime = 1;  
  23.         $timesystem = 0;  
  24.     }  
  25.     return form::date("info[$field]",$value,$isdatetime,1,'true',$timesystem);  
  26. }  

 

\

 

4.phpcms/content/fields/datetime/input.inc.php:后台添加文章内容时,对提交的表单数据进行验证入库,需要此文件中的函数完成验证和过滤;此文件中的函数会动态缓存到caches/caches_model/caches_data/content_input.class.php文件中

  1. function datetime($field, $value) {  
  2.     $setting = string2array($this->fields[$field]['setting']);  
  3.     if($setting['fieldtype']=='int') {  
  4.         $value = strtotime($value);  
  5.     }  
  6.     return $value;  
  7. }  

 

5.phpcms/content/fields/datetime/output.inc.php:在前台显示文章内容时,对要显示的内容进行过滤输出以供前台显示,需要此文件中过滤函数;此文件中的函数会动态的缓存到caches/caches_model/caches_data/content_output.class.php文件中

  1. function datetime($field, $value) {  
  2.     $setting = string2array($this->fields[$field]['setting']);  
  3.     extract($setting);  
  4.     if($fieldtype=='date' || $fieldtype=='datetime') {  
  5.         return $value;  
  6.     } else {  
  7.         $format_txt = $format;  
  8.     }  
  9.     if(strlen($format_txt)<6) {  
  10.         $isdatetime = 0;  
  11.     } else {  
  12.         $isdatetime = 1;  
  13.     }  
  14.     if(!$value) $value = SYS_TIME;  
  15.     $value = date($format_txt,$value);  
  16.     return $value;  
  17. }  


 

\

 

注意:模型字段表v9_field_data 中setting字段的值一般为字段模型相关参数的设置信息

 

\

 

6、以copyfrom模型字段为例:

①、添加模型字段时,模型字段的相关属性表单,主要用来制作复杂的模型字段,如:万能模型字段、下拉菜单模型字段等等
field_add_form.inc.php
field_edit_form.inc.php

②、模型字段生成的表单代码
form.inc.php


③、模型字段的输入输出处理函数
input.inc.php   主要用于在模型字段数据入库时对模型字段的值进行验证,比如:转义等等   ;会输出到缓存文件caches/caches_model/caches_data/content_input.class.php
output.inc.php  主要用于处理前台要显示的模型字段数据,比如:转义等等;会输出到缓存文件caches/caches_model/caches_data/content_output.class.php

 

7.在设计模型前,我们首先要想好前台的内容显示是什么,当我们确认了前台要显示什么内容的时候,模型基本也就出来了

模型复制,你可以对系统内置的任意模型(专题除外)进行复制产生一个新的模型,在新模型你可以自由增加字段,以达到在原来模型的基础上的扩展; 
分表存储,允许你在定义或模型复制时指定不同的主表和附加表,从而实现彻底的分表存储; 

内容模型指的是网站根据不同栏目有不同需求,例如说我们发布一些普通文章。它只是需要到文章模型就够了。但是例如我们的栏目是图片类型,而且一篇图片文章是一组图片组成的,那这个时候图片类型就更加适合了。而说到软件类型,顾名思义,它针对的是给广大用户下载用,它发布的文章不仅仅只是介绍内容而已,往往还带有下载地址,还有软件信息等。商品类的是涉及到产品价格购买流程,分类信息涉及到的往往是一些地区分类,或者行业性分类。 所以说不同的模型针对的对象是不一样的,这个得根据网站具体的栏目去定。而且dedecms的内容模型主要是针对开发者去用的,对于用户来说,可以不去了解其作用,因为只要知道怎么发布和普通维护就可以了。

pc系统是很灵活的,在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。

当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点,本篇将讲述如何使用系统的自定义模型管理功能来实现内容模型的构建。

模型的建立在于你的网站要显示什么样子的内容