You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.2 KiB
PHTML
138 lines
4.2 KiB
PHTML
2 years ago
|
<?php
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | OneThink [ WE CAN DO IT JUST THINK ]
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Author: liu21st <liu21st@gmail.com>
|
||
|
// +----------------------------------------------------------------------
|
||
|
|
||
|
namespace Common\Api;
|
||
|
class ModelApi {
|
||
|
/**
|
||
|
* 获取文档模型信息
|
||
|
* @param integer $id 模型ID
|
||
|
* @param string $field 模型字段
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function get_document_model($id = null, $field = null){
|
||
|
static $list;
|
||
|
|
||
|
/* 非法分类ID */
|
||
|
if(!(is_numeric($id) || is_null($id))){
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
/* 读取缓存数据 */
|
||
|
if(empty($list)){
|
||
|
$list = S('DOCUMENT_MODEL_LIST');
|
||
|
}
|
||
|
|
||
|
/* 获取模型名称 */
|
||
|
if(empty($list)){
|
||
|
$map = array('status' => 1, 'extend' => 1);
|
||
|
$model = M('Model')->where($map)->field(true)->select();
|
||
|
foreach ($model as $value) {
|
||
|
$list[$value['id']] = $value;
|
||
|
}
|
||
|
S('DOCUMENT_MODEL_LIST', $list); //更新缓存
|
||
|
}
|
||
|
|
||
|
/* 根据条件返回数据 */
|
||
|
if(is_null($id)){
|
||
|
return $list;
|
||
|
} elseif(is_null($field)){
|
||
|
return $list[$id];
|
||
|
} else {
|
||
|
return $list[$id][$field];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 获取模型名称
|
||
|
public static function get_model_by_id($id){
|
||
|
return $model = M('Model')->getFieldById($id,'title');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取属性信息并缓存
|
||
|
* @param integer $id 属性ID
|
||
|
* @param string $field 要获取的字段名
|
||
|
* @return string 属性信息
|
||
|
*/
|
||
|
public static function get_model_attribute($model_id, $group = true){
|
||
|
static $list;
|
||
|
|
||
|
/* 非法ID */
|
||
|
if(empty($model_id) || !is_numeric($model_id)){
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
/* 读取缓存数据 */
|
||
|
if(empty($list)){
|
||
|
$list = S('attribute_list');
|
||
|
}
|
||
|
|
||
|
/* 获取属性 */
|
||
|
if(!isset($list[$model_id])){
|
||
|
$map = array('model_id'=>$model_id);
|
||
|
$extend = M('Model')->getFieldById($model_id,'extend');
|
||
|
|
||
|
if($extend){
|
||
|
$map = array('model_id'=> array("in", array($model_id, $extend)));
|
||
|
}
|
||
|
$info = M('Attribute')->where($map)->select();
|
||
|
$list[$model_id] = $info;
|
||
|
//S('attribute_list', $list); //更新缓存
|
||
|
}
|
||
|
|
||
|
$attr = array();
|
||
|
foreach ($list[$model_id] as $value) {
|
||
|
$attr[$value['id']] = $value;
|
||
|
}
|
||
|
|
||
|
if($group){
|
||
|
$sort = M('Model')->getFieldById($model_id,'field_sort');
|
||
|
|
||
|
if(empty($sort)){ //未排序
|
||
|
$group = array(1=>array_merge($attr));
|
||
|
}else{
|
||
|
$group = json_decode($sort, true);
|
||
|
|
||
|
$keys = array_keys($group);
|
||
|
foreach ($group as &$value) {
|
||
|
foreach ($value as $key => $val) {
|
||
|
$value[$key] = $attr[$val];
|
||
|
unset($attr[$val]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!empty($attr)){
|
||
|
$group[$keys[0]] = array_merge($group[$keys[0]], $attr);
|
||
|
}
|
||
|
}
|
||
|
$attr = $group;
|
||
|
}
|
||
|
return $attr;
|
||
|
}
|
||
|
|
||
|
// 分析属性的枚举类型字段值 格式 a:名称1,b:名称2 或者 :fun(var1,var)
|
||
|
public static function parse_field_attr($string) {
|
||
|
if(0 === strpos($string,':')){
|
||
|
// 采用函数定义
|
||
|
return eval(substr($string,1).';');
|
||
|
}
|
||
|
$array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
|
||
|
if(strpos($string,':')){
|
||
|
$value = array();
|
||
|
foreach ($array as $val) {
|
||
|
list($k, $v) = explode(':', $val);
|
||
|
$value[$k] = $v;
|
||
|
}
|
||
|
}else{
|
||
|
$value = $array;
|
||
|
}
|
||
|
return $value;
|
||
|
}
|
||
|
}
|