适用于3.5.1以上版本
POSCMS自带的字段类别有:

除了这些字段外,还需要一些特殊字段来满足项目的需求怎么办?开发者可以使用DIY类别来写一些简单化的程序,如果过于复杂的字段,DIY也满足不了的。
或者是这种情况,当默认的类别需要自己修改调整时,怎么办?因为不建议直接修改poscms目录文件,会影响后期的程序稳定性和升级问题。
本教材来讲解如何定义自己的字段类别
自定义字段类别目录:
diy/my/field/
默认是未创建的,开发者可以创建这个目录。
自定义字段类别文件命名:
diy/my/field/Text2.php
首字母必须大写
自定义字段类别内容格式:
<?php
class F_Text2 extends A_Field {
/**
* 构造函数
*/
public function __construct() {
parent::__construct();
$this->name = IS_ADMIN ? fc_lang('单行文本') : ''; // 字段名称
$this->fieldtype = TRUE; // TRUE表全部可用字段类型,自定义格式为 array('可用字段类型名称' => '默认长度', ... )
$this->defaulttype = 'VARCHAR'; // 当用户没有选择字段类型时的缺省值
}
/**
* 字段相关属性参数
*
* @param array $value 值
* @return string
*/
public function option($option) {
}
/**
* 字段入库值
*
* @param array $field 字段信息
* @return void
*/
public function insert_value($field) {
// 格式化入库值
$value = $this->ci->post[$field['fieldname']];
if (in_array($field['setting']['option']['fieldtype'], array('INT', 'TINYINT', 'SMALLINT'))) {
$this->ci->data[$field['ismain']][$field['fieldname']] = $value ? (int)$value : 0;
} elseif (in_array($field['setting']['option']['fieldtype'], array('DECIMAL', 'FLOAT'))) {
$this->ci->data[$field['ismain']][$field['fieldname']] = $value ? (float)$value : 0;
} elseif ($field['setting']['option']['fieldtype'] == 'MEDIUMINT') {
$this->ci->data[$field['ismain']][$field['fieldname']] = $value ? $value : 0;
} else {
$this->ci->data[$field['ismain']][$field['fieldname']] = htmlspecialchars($value);
}
}
/**
* 字段表单输入
*
* @param string $cname 字段别名
* @param string $name 字段名称
* @param array $cfg 字段配置
* @param array $value 值
* @param array $id 当前内容表的id(表示非发布操作)
* @return string
*/
public function input($cname, $name, $cfg, $value = NULL, $id = 0) {
// 字段显示名称
$text = (isset($cfg['validate']['required']) && $cfg['validate']['required'] == 1 ? '<font color="red">*</font>' : '').''.$cname.':';
// 是否密码框
$type = isset($cfg['option']['ispwd']) && $cfg['option']['ispwd'] ? 'password' : 'text';
// 表单宽度设置
if (IS_MOBILE && empty($cfg['option']['is_mb_auto'])) {
$width = '100%';
} else {
$width = isset($cfg['option']['width']) && $cfg['option']['width'] ? $cfg['option']['width'] : '200';
}
$style = 'style="width:'.$width.(is_numeric($width) ? 'px' : '').';"';
// 表单附加参数
$attr = isset($cfg['validate']['formattr']) && $cfg['validate']['formattr'] ? $cfg['validate']['formattr'] : '';
// 字段提示信息
$tips = ($name == 'title' && APP_DIR) || (isset($cfg['validate']['tips']) && $cfg['validate']['tips']) ? '<span class="help-block" id="dr_'.$name.'_tips">'.$cfg['validate']['tips'].'</span>' : '';
// 字段默认值
$value = (@strlen($value) ? $value : $this->get_default_value($cfg['option']['value']));
// 禁止修改
if (!IS_ADMIN && $id && $value && isset($cfg['validate']['isedit']) && $cfg['validate']['isedit']) {
$str = '<input type="hidden" name="data['.$name.']" id="dr_'.$name.'" value="'.$value.'"> <div class="form-control-static">'.$value.'</div>'.($cfg['validate']['append'] ? $cfg['validate']['append'] : '');
} else {
// 当字段必填时,加入html5验证标签
$required = isset($cfg['validate']['required']) && $cfg['validate']['required'] == 1 ? ' required="required"' : '';
if (in_array($name, array('order_quantity', 'order_volume'))) {
$required = '';
}
$str = '<input class="form-control" type="'.$type.'" name="data['.$name.']" id="dr_'.$name.'" value="'.$value.'" '.$style.$required.' '.$attr.' />';
if ($cfg['validate']['append']) {
$str = '<label>'.$str.'</label>'.$cfg['validate']['append'];
}
}
return $this->input_format($name, $text, $str.$tips);
}
}上面类是按默认的Text.php类型文件。
为模块单独创建自定义字段类别目录:
diy/app/模块目录/config/field/***.php
这样定义的话,这个字段只能在本模块的自定义字段中有效!
文档最后更新时间:2019-03-11 07:58:17