area.model.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. /**
  3. * 地区模型
  4. *
  5. */
  6. defined('InShopNC') or exit('Access Invalid!');
  7. class areaModel extends Model {
  8. public function __construct() {
  9. parent::__construct('area');
  10. }
  11. /**
  12. * 获取地址列表
  13. *
  14. * @return mixed
  15. */
  16. public function getAreaList($condition = array(), $fields = '*', $group = '') {
  17. return $this->where($condition)->field($fields)->limit(false)->group($group)->select();
  18. }
  19. /**
  20. * 获取地址详情
  21. *
  22. * @return mixed
  23. */
  24. public function getAreaInfo($condition = array(), $fileds = '*') {
  25. return $this->where($condition)->field($fileds)->find();
  26. }
  27. /**
  28. * 获取一级地址(省级)名称数组
  29. *
  30. * @return array 键为id 值为名称字符串
  31. */
  32. public function getTopLevelAreas() {
  33. $data = $this->getCache();
  34. $arr = array();
  35. foreach ($data['children'][0] as $i) {
  36. $arr[$i] = $data['name'][$i];
  37. }
  38. return $arr;
  39. }
  40. /**
  41. * 获取获取市级id对应省级id的数组
  42. *
  43. * @return array 键为市级id 值为省级id
  44. */
  45. public function getCityProvince() {
  46. $data = $this->getCache();
  47. $arr = array();
  48. foreach ($data['parent'] as $k => $v) {
  49. if ($v && $data['parent'][$v] == 0) {
  50. $arr[$k] = $v;
  51. }
  52. }
  53. return $arr;
  54. }
  55. /**
  56. * 获取地区缓存
  57. *
  58. * @return array
  59. */
  60. public function getAreas() {
  61. return $this->getCache();
  62. }
  63. /**
  64. * 获取全部地区名称数组
  65. *
  66. * @return array 键为id 值为名称字符串
  67. */
  68. public function getAreaNames() {
  69. $data = $this->getCache();
  70. return $data['name'];
  71. }
  72. /**
  73. * 获取用于前端js使用的全部地址数组
  74. *
  75. * @return array
  76. */
  77. public function getAreaArrayForJson() {
  78. $data = $this->getCache();
  79. $arr = array();
  80. foreach ($data['children'] as $k => $v) {
  81. foreach ($v as $vv) {
  82. $arr[$k][] = array($vv, $data['name'][$vv]);
  83. }
  84. }
  85. return $arr;
  86. }
  87. /**
  88. * 获取地区数组 格式如下
  89. * array(
  90. * 'name' => array(
  91. * '地区id' => '地区名称',
  92. * // ..
  93. * ),
  94. * 'parent' => array(
  95. * '子地区id' => '父地区id',
  96. * // ..
  97. * ),
  98. * 'children' => array(
  99. * '父地区id' => array(
  100. * '子地区id 1',
  101. * '子地区id 2',
  102. * // ..
  103. * ),
  104. * // ..
  105. * ),
  106. * 'region' => array(array(
  107. * '华北区' => array(
  108. * '省级id 1',
  109. * '省级id 2',
  110. * // ..
  111. * ),
  112. * // ..
  113. * ),
  114. * )
  115. *
  116. * @return array
  117. */
  118. protected function getCache() {
  119. // 对象属性中有数据则返回
  120. if ($this->cachedData !== null)
  121. return $this->cachedData;
  122. // 缓存中有数据则返回
  123. if ($data = rkcache('area')) {
  124. $this->cachedData = $data;
  125. return $data;
  126. }
  127. // 查库
  128. $data = array();
  129. $area_all_array = $this->limit(false)->select();
  130. foreach ((array) $area_all_array as $a) {
  131. $data['name'][$a['area_id']] = $a['area_name'];
  132. $data['parent'][$a['area_id']] = $a['area_parent_id'];
  133. $data['children'][$a['area_parent_id']][] = $a['area_id'];
  134. if ($a['area_deep'] == 1 && $a['area_region'])
  135. $data['region'][$a['area_region']][] = $a['area_id'];
  136. }
  137. wkcache('area', $data);
  138. $this->cachedData = $data;
  139. return $data;
  140. }
  141. protected $cachedData;
  142. }