用途:专注 Perfex CRM 自定义字段的读取、写入、安装与调试。自定义字段是 Perfex 为联系人、客户、线索、发票、工单等实体添加用户自定义字段的扩展机制,涉及两张表:tblcustomfields(定义)与 tblcustomfieldsvalues(以 relid 关联的值)。
主要能力与关键约定:
- 表结构陷阱:列名为 only_admin(非 only_admin_area);列名为 disalow_client_to_edit(拼写错误但为规范,核心按此查询,不可重命名,只在 PHP 层做别名)。
- 类型:input、textarea、number、select、multiselect、checkbox、date_picker、date_picker_time、link、colorpicker;没有 date、datetime 或 file。options 为逗号分隔(非 JSON、非换行),选项值不能含逗号。checkbox/multiselect 存为“A, B”。
- bs_column 控制 Bootstrap 3 栅格宽度,取值 12、6、4、3,0 或空回退为 12。
- 模块自有字段建议以模块名前缀 + 实体命名 slug,避免冲突。
必要用法: 读取用 get_custom_field_value($rel_id, $field_id_or_slug, $field_to, $format = true),无值时返回空字符串;需要原始日期比较时传 false。 表单写入用 handle_custom_fields_post($contact_id, $this->input->post('custom_fields')),会做类型归一化与 upsert。 程序化安装可在 install.php 中先按 fieldto + slug 判断存在,再执行 $CI->db->insert(db_prefix() . 'customfields', [...])。 渲染用 render_custom_fields($belongs_to, $rel_id = false, $where = [], $items_cf_params = []),第三个参数是传给 $db->where() 的数组;客户端区域需显式传 ['show_on_client_portal' => 1],否则隐藏字段也会渲染。
限制:仅 items 预定义项的值以 fieldto = 'items_pr' 存储;Perfex 3.3.0 起 items + required + select 在保存时做服务端校验;旧版本可能缺列(show_on_client_portal、only_admin、bs_column、default_value),写迁移或安装代码前建议执行 SHOW COLUMNS FROM tblcustomfields; 并做防御性列包含。核心不支持按员工可见性,也不存在 show_on_picker 等列。其他细节暂未提供。