fieldtype = ['TEXT' => ''];
$this->defaulttype = 'TEXT';
}
/**
* 字段相关属性参数
*
* @param array $value 值
* @return string
*/
public function option($option) {
$str = '';
return [$this->_search_field().'
', ''];
}
/**
* 字段输出
*/
public function output($value) {
return dr_string2array($value);
}
/**
* 字段入库值
*
* @param array $field 字段信息
* @return void
*/
public function insert_value($field) {
$save = [];
$data = \Phpcmf\Service::L('Field')->post[$field['fieldname']];
if ($data) {
$data = dr_string2array($data);
if ($data) {
foreach ($data as $t) {
if ($t) {
$save[] = $t;
}
}
$save = array_unique($save);
}
}
// 判断超限
if ($field['setting']['option']['limit'] && dr_count($save) > $field['setting']['option']['limit']) {
$save = array_slice($save, 0, $field['setting']['option']['limit']);
}
\Phpcmf\Service::L('Field')->data[$field['ismain']][$field['fieldname']] = dr_array2string($save);
}
/**
* 验证字段值
*
* @param string $field 字段类型
* @param string $value 字段值
* @return
*/
public function check_value($field, $value) {
$values = dr_string2array($value);
if ($values) {
foreach ($values as $value) {
$link = dr_linkage($field['setting']['option']['linkage'], $value);
if (!$link) {
return dr_lang('选项无效');
} elseif ($field['setting']['option']['ck_child'] && $link['child']) {
return dr_lang('需要选择下级选项');
}
}
}
return '';
}
/**
* 验证必填字段值
*
* @param string $field 字段类型
* @param string $value 字段值
* @return
*/
public function check_required($field, $values) {
if (!$values) {
// 验证值为空
return dr_lang('%s不能为空', $field['name']);
}
return '';
}
/**
* 验证加载变量设置
*/
public function set_load_js($name, $value) {
\Phpcmf\Service::C()->loadjs['Linkage'] = \Phpcmf\Service::C()->loadjs[$name] = $value;
}
/**
* 字段表单输入
*
* @param string $field 字段数组
* @param array $value 值
* @return string
*/
public function input($field, $value = null) {
// 字段禁止修改时就返回显示字符串
if ($this->_not_edit($field, $value)) {
return $this->show($field, $value);
}
// 字段存储名称
$name = $field['fieldname'];
// 字段显示名称
$text = ($field['setting']['validate']['required'] ? ' * ' : '').dr_lang($field['name']);
// 字段提示信息
$tips = ($name == 'title' && APP_DIR) || $field['setting']['validate']['tips'] ? ''.$field['setting']['validate']['tips'].'' : '';
if ($field['setting']['option']['new']) {
// 字段默认值
$value = $value ? $value : $this->get_default_value($field['setting']['option']['value']);
$value = dr_string2array($value);
if (is_array($value)) {
$new = [];
foreach ($value as $t) {
$new[] = (string)$t;
}
$value = json_encode($new);
} else {
$value = '[]';
}
// 开始输出
$str = '';
if (!$this->is_load_js('Linkage')) {
$str.= '
';
$this->set_load_js('Linkage', 1);
}
// 输出js支持
$str.= '
'.$tips;
} else {
// 经典模式
// 联动菜单缓存
$linkage = dr_linkage_list($field['setting']['option']['linkage'], 0);
if (!$linkage) {
if (CI_DEBUG) {
return $this->input_format($name, $text, '联动菜单【'.$field['setting']['option']['linkage'].'】没有数据
');
}
return $this->input_format($name, $text, '');
}
// 最大几层
$linklevel = dr_linkage_level($field['setting']['option']['linkage']) + 1;
// 开始输出
$str = '';
if (!$this->is_load_js($field['fieldtype'].'_LD')) {
$str.= '';
$this->set_load_js($field['fieldtype'].'_LD', 1);
}
// 表单宽度设置
$width = \Phpcmf\Service::IS_MOBILE_USER() ? '100%' : ($field['setting']['option']['width'] ? $field['setting']['option']['width'] : '100%');
$str.= '';
$level = 1;
// 输出默认菜单
$tpl = '
';
$tpl.= '
';
$tpl.= '
';
$tpl.= '
';
$tpl.= '
';
for ($i = 1; $i <= $linklevel; $i++) {
$style = $i > $level ? 'style="display:none"' : '';
$tpl.= '';
}
$tpl.= '';
$tpl.= '
';
// 字段默认值
$values = dr_string2array($value);
if ($values) {
foreach ($values as $id => $value) {
if ($value) {
$link = dr_linkage($field['setting']['option']['linkage'], $value);
if (!$link) {
continue;
}
$pids = substr((string)$link['pids'], 2);
$level = substr_count($pids, ',') + 1;
$default = !$pids ? '["'.$value.'"]' : '["'.str_replace(',', '","', $pids).'","'.$value.'"]';
$str.= '
';
$str.= '
';
$str.= '
';
$str.= '
';
$str.= '
';
for ($i = 1; $i <= $linklevel; $i++) {
$style = $i > $level ? 'style="display:none"' : '';
$str.= '';
}
$str.= '';
$str.= '
';
$str.= '
';
}
}
}
// 整体
$str.= '
';
$str.= '';
$str.= ''.$tips.'';
}
return $this->input_format($name, $text, $str);
}
/**
* 字段表单显示
*
* @param string $field 字段数组
* @param array $value 值
* @return string
*/
public function show($field, $value = null) {
$str = '';
$values = dr_string2array($value);
if ($values) {
foreach ($values as $value) {
$str.= ''.dr_linkagepos($field['setting']['option']['linkage'], $value, ' - ').'
';
}
}
return $this->input_format($field['fieldname'], $field['name'], $str);
}
}