modelid = $modelid; $this->catid = $catid; $this->categorys = $categorys; $this->fields = getcache('model_field_'.$modelid,'model'); } function get($data) { $this->data = $data; $this->id = $data['id']; $info = array(); foreach($this->fields as $field=>$v) { if(!isset($data[$field])) continue; $func = $v['formtype']; $value = $data[$field]; $result = method_exists($this, $func) ? $this->$func($field, $data[$field]) : $data[$field]; if($result !== false) $info[$field] = $result; } return $info; } function editor($field, $value) { $setting = string2array($this->fields[$field]['setting']); if($setting['enablekeylink']) { $data = $this->_keylinks($value, $setting['replacenum'],$setting['link_mode']); } return $data; } function _base64_encode($t,$str) { return $t."\"".base64_encode($str)."\""; } function _base64_decode($t,$str) { return $t."\"".base64_decode($str)."\""; } function _keylinks($txt, $replacenum = '',$link_mode = 1) { $txt = addslashes($txt); $search = "/(alt\s*=\s*|title\s*=\s*)[\"|\'](.+?)[\"|\']/ise"; $replace = "$this->_base64_encode('\\1','\\2')"; $replace1 = "$this->_base64_decode('\\1','\\2')"; $txt = preg_replace($search, $replace, $txt); $keywords = $this->data['keywords']; if($keywords) $keywords = strpos(',',$keywords) === false ? explode(' ',$keywords) : explode(',',$keywords); if($link_mode && !empty($keywords)) { foreach($keywords as $keyword) { $linkdatas[] = $keyword; } } else { //TODO $linkdatas = array( 0 => array(0=>'网站',1=>'http://www.phpip.com'), 1 => array(0=>'百度',1=>'http://www.baidu.com'), ); } if($linkdatas) { $word = $replacement = array(); foreach($linkdatas as $v) { if($link_mode && $keywords) { $word1[] = '/'.preg_quote($v, '/').'/'; $word2[] = $v; $replacement[] = ''.$v.''; } else { $word1[] = '/'.preg_quote($v[0], '/').'/'; $word2[] = $v[0]; $replacement[] = ''.$v[0].''; } } if($replacenum != '') { $txt = preg_replace($word1, $replacement, $txt, $replacenum); } else { $txt = str_replace($word2, $replacement, $txt); } } $txt = preg_replace($search, $replace1, $txt); $txt = stripslashes($txt); return $txt; } function box($field, $value) { extract(string2array($this->fields[$field]['setting'])); if($outputtype) { return $value; } else { $options = explode("\n",$this->fields[$field]['options']); foreach($options as $_k) { $v = explode("|",$_k); $k = trim($v[1]); $option[$k] = $v[0]; } $string = ''; switch($this->fields[$field]['boxtype']) { case 'radio': $string = $option[$value]; break; case 'checkbox': $value_arr = explode(',',$value); foreach($value_arr as $_v) { if($_v) $string .= $option[$_v].' 、'; } break; case 'select': $string = $option[$value]; break; case 'multiple': $value_arr = explode(',',$value); foreach($value_arr as $_v) { if($_v) $string .= $option[$_v].' 、'; } break; } return $string; } } function images($field, $value) { return string2array($value); } function datetime($field, $value) { $setting = string2array($this->fields[$field]['setting']); extract($setting); if($fieldtype=='date') { $format_txt = 'Y-m-d'; } elseif($fieldtype=='datetime') { $format_txt = 'Y-m-d H:i:s'; } else { $format_txt = $format; } if(strlen($format_txt)<6) { $isdatetime = 0; } else { $isdatetime = 1; } if(!$value) $value = SYS_TIME; $value = date($format_txt,$value); return $value; } function linkage($field, $value) { $setting = string2array($this->fields[$field]['setting']); $datas = getcache($setting['linkageid'],'linkage'); $infos = $datas['data']; if($setting['showtype']==1) { $result = $this->_get_parent($value, $setting['linkageid'], $setting['space']); } elseif($setting['showtype']==2) { $result = $value; } else { $result = $infos[$value]['name']; } return $result; } function _get_parent($linkageid, $keyid, $space = '>', $result = array(), $infos = array()) { if($space=='' || !isset($space))$space = '>'; if(!$infos) { $datas = getcache($keyid,'linkage'); $infos = $datas['data']; } if(array_key_exists($linkageid,$infos)) { $result[]=$infos[$linkageid]['name']; return $this->_get_parent($infos[$linkageid]['parentid'], $keyid, $space, $result, $infos); } else { if(count($result)>0) { krsort($result); $result = implode($space,$result); return $result; } else { return $result; } } } } ?>