Browse Source

Merge branch 'master' of http://git.dever.cc:3000/dever-package/attr

rabin 6 years ago
parent
commit
8a89b19e54
1 changed files with 163 additions and 102 deletions
  1. 163 102
      src/Api.php

+ 163 - 102
src/Api.php

@@ -69,13 +69,13 @@ class Api
 	}
 
 	/**
-     * 设置数据库的结构信息
-     *
-     * @return mixed
-     */
-    public function setDatabaseConfig($attr, &$config)
-    {
-        if ($attr) {
+	 * 设置数据库的结构信息
+	 *
+	 * @return mixed
+	 */
+	public function setDatabaseConfig($attr, &$config)
+	{
+		if ($attr) {
 			foreach ($attr as $k => $v) {
 				$k = 'attr_' . $v['id'];
 				$config['struct'][$k] = array();
@@ -178,16 +178,16 @@ class Api
 				# 还要根据搜索来建立索引,另外,如果数据结构改了怎么办。暂时用varchar
 			}
 		}
-    }
-
-    /**
-     * 获取属性的值,无类别
-     *
-     * @return mixed
-     */
-    public function getValue($ids, $value, $order = 'all')
-    {
-        $result = array();
+	}
+
+	/**
+	 * 根据属性id,获取属性列表
+	 *
+	 * @return mixed
+	 */
+	public function getList($ids, $value, $order = 'all')
+	{
+		$result = array();
 		if ($ids) {
 			$where['ids'] = $ids;
 			$method = 'getAllByIds';
@@ -216,93 +216,154 @@ class Api
 		}
 
 		return $data;
-    }
-
-    /**
-     * 获取属性的值,字符类型
-     *
-     * @return mixed
-     */
-    public function string($ids, $value = '')
-    {
-        $result = $this->getInfo($ids, $value);
-
-        $table = array();
-        foreach ($result as $k => $v) {
-        	$table[$v['name']] = '';
-        	foreach ($v['attr'] as $k1 => $v1) {
-        		$table[$v['name']] .= $v1['name'] . "  ";
-        	}
-        }
+	}
+
+	/**
+	 * 获取属性的值
+	 *
+	 * @return mixed
+	 */
+	public function getValue($info)
+	{
+		# 地区
+		if ($info['type'] == 7) {
+			$info['value'] = Dever::load("area/api.string", $info['value']);
+		} elseif ($info['type'] >= 10 && $info['value']) {
+			$temp = explode("\n", $info['type_option']);
+			if ($temp) {
+				$info['value'] = $info['value'] - 1;
+				if (isset($temp[$info['value']])) {
+					$info['value'] = $temp[$info['value']];
+					if (strstr($info['value'], ',')) {
+						$temp = explode(',', $info['value']);
+						$info['value'] = $temp[0];
+					}
+				}
+			}
+			
+		}
+
+		if ($info['unit']) {
+			$info['value'] = $info['value'] . $info['unit'];
+		}
+
+		return $info['value'];
+	}
+
+	/**
+	 * 获取属性的名称,字符类型
+	 *
+	 * @return mixed
+	 */
+	public function string($ids, $value = '')
+	{
+		$result = $this->getInfo($ids, $value);
+
+		$table = array();
+		foreach ($result as $k => $v) {
+			$table[$v['name']] = '';
+			foreach ($v['attr'] as $k1 => $v1) {
+				$table[$v['name']] .= $v1['name'] . "  ";
+			}
+		}
 
 		return Dever::table($table);
-    }
-
-    /**
-     * 获取某个分类下的搜索列表
-     *
-     * @return mixed
-     */
-    public function getSearch($ids, $cate = true, $city = false, $search_value = false)
-    {
-        $value = array();
-        $search_value = Dever::preInput('attr_', $search_value);
-
-    	if ($cate && Dever::project('category')) {
-    		$attr_where['category'] = Dever::defaultValue($ids);
-    		$attr = Dever::db('category/attr')->getAttr($attr_where);
-    		if ($attr) {
-                $ids = $ids_input = array();
-    			foreach ($attr as $k => $v) {
-                    $v['attr'] = explode(',', $v['attr']);
-                    $v['attr_input'] = explode(',', $v['attr_input']);
-                    foreach ($v['attr'] as $k1 => $v1) {
-                        $ids[$v1] = $v1;
-                        if (isset($v['attr_input'][$k1])) {
-                            $ids_input[$v1] = $v['attr_input'][$k1];
-                        }
-                    }
-    			}
-    			$ids = array_keys($ids);
-    		}
-    	}
-    	$where['ids'] = $ids;
-    	$where['search_reorder'] = 1;
-        $data = Dever::db('attr/info')->getSearch($where);
-
-        if ($data) {
-            foreach ($data as $k => $v) {
-                if (isset($ids_input[$v['id']]) && $ids_input[$v['id']]) {
-                    $data[$k]['name'] = $ids_input[$v['id']];
-                }
-                $data[$k]['key'] = 'attr_' . $v['id'];
-                if ($v['type'] == 7 && $city > 0) {
-                    # 获取地区,获取最后一个级别的地区
-                    $data[$k]['option'] = Dever::db('area/county')->state(array('city_id' => $city));
-                } elseif ($v['type_option']) {
-                    $temp = explode("\n", $v['type_option']);
-                    foreach ($temp as $k1 => $v1) {
-                        $v1 = explode(',', $v1);
-                        $k1 = $k1+1;
-                        $data[$k]['option'][$k1] = array
-                        (
-                            'id' => $k1,
-                            'name' => $v1[0],
-                        );
-                        if (isset($v1[1])) {
-                            $data[$k]['option_match'][$k1] = $v1[1];
-                        }
-                    }
-                }
-
-                if (isset($search_value[$data[$k]['key']])) {
-                    $data[$k]['option_value'] = $search_value[$data[$k]['key']];
-                    $value[$data[$k]['key']] = $data[$k]['option_value'];
-                }
-            }
-        }
-        
+	}
+
+
+
+	private function attrSort(&$attr, $reorder = 'list_reorder')
+	{
+		$order = Dever::config('base')->attrOrder;
+		if ($order && $order != $reorder) {
+			$reorder = $order;
+		}
+		if ($attr) {
+			foreach ($attr as $k => $v) {
+				$sort[$k] = $v[$reorder];
+			}
+			array_multisort($sort, SORT_DESC, $attr);
+		}
+	}
+
+	public function getAttrByCate($category, $order = 'list_reorder')
+	{
+		$data = array();
+		if ($category && Dever::project('category')) {
+			$array = explode(',', $category);
+			$cate = array();
+			$total = count($array)-1;
+			foreach ($array as $k => $v) {
+				$cate[$k] = $v;
+				if ($k < $total) {
+					$cate[] = '-1';
+				}
+				$where['category'] = $cate;
+				$info = Dever::db('category/attr')->one($where);
+				if ($info) {
+					$data += Dever::load('attr/api')->getList($info['attr'], $info['attr_input']);
+				}
+			}
+			$this->attrSort($data, $order);
+		}
+
+		return $data;
+	}
+
+	/**
+	 * 获取某个分类下的搜索列表
+	 *
+	 * @return mixed
+	 */
+	public function getSearch($ids, $cate = true, $city = false, $search_value = false)
+	{
+		$value = array();
+		$search_value = Dever::preInput('attr_', $search_value);
+
+		if ($cate && $ids && Dever::project('category')) {
+			$data = $this->getAttrByCate($ids, 'search_reorder');
+			if (!$data) {
+				return array('search' => array(), 'value' => $value);
+			}
+		} else {
+			$where['ids'] = $ids;
+			$where['search_reorder'] = 1;
+			$data = Dever::db('attr/info')->getSearch($where);
+		}
+
+		if ($data) {
+			foreach ($data as $k => $v) {
+				if (isset($ids_input[$v['id']]) && $ids_input[$v['id']]) {
+					$data[$k]['name'] = $ids_input[$v['id']];
+				}
+				$data[$k]['key'] = 'attr_' . $v['id'];
+				if ($v['type'] == 7 && $city > 0) {
+					# 获取地区,获取最后一个级别的地区
+					$data[$k]['option'] = Dever::db('area/county')->state(array('city_id' => $city));
+				} elseif ($v['type_option']) {
+					$temp = explode("\n", $v['type_option']);
+					foreach ($temp as $k1 => $v1) {
+						$v1 = explode(',', $v1);
+						$k1 = $k1+1;
+						$data[$k]['option'][$k1] = array
+						(
+							'id' => $k1,
+							'name' => $v1[0],
+						);
+						if (isset($v1[1])) {
+							$data[$k]['option_match'][$k1] = $v1[1];
+						}
+					}
+				}
+
+				if (isset($search_value[$data[$k]['key']])) {
+					$data[$k]['option_value'] = $search_value[$data[$k]['key']];
+					$value[$data[$k]['key']] = $data[$k]['option_value'];
+				}
+			}
+		}
+		
 
 		return array('search' => $data, 'value' => $value);
-    }
+	}
 }