brand_helper.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2016/12/28
  6. * Time: 下午12:31
  7. */
  8. require_once(BASE_ROOT_PATH . '/helper/img_helper.php');
  9. require_once(BASE_ROOT_PATH . '/helper/special_helper.php');
  10. require_once(BASE_ROOT_PATH . '/helper/time_interval.php');
  11. require_once(BASE_ROOT_PATH . '/helper/util_helper.php');
  12. require_once(BASE_CORE_PATH . '/framework/libraries/pinyin.php');
  13. class brand_helper
  14. {
  15. //todo 合并后需要单步测试
  16. static private $stInstance = null;
  17. private $mBrandPageResult;
  18. private $mBaseInfo;
  19. private $mNameID;
  20. private $mAlphaList;
  21. private function __construct()
  22. {
  23. $this->mBrandPageResult = [];
  24. $this->mBaseInfo = [];
  25. $this->mAlphaList = [];
  26. }
  27. static public function instance()
  28. {
  29. if (self::$stInstance == null) {
  30. self::$stInstance = new brand_helper();
  31. }
  32. if(StatesHelper::fetch_state('brands')) {
  33. Log::record("brand_helper reload data.",Log::DEBUG);
  34. self::$stInstance->init();
  35. }
  36. return self::$stInstance;
  37. }
  38. public function findByname($name)
  39. {
  40. $name = trim($name);
  41. if(array_key_exists($name,$this->mNameID)) {
  42. $brand_id = $this->mNameID[$name];
  43. return $this->mBaseInfo[$brand_id];
  44. } else {
  45. return false;
  46. }
  47. }
  48. public function name($brand_id)
  49. {
  50. $brand_id = intval($brand_id);
  51. if(array_key_exists($brand_id,$this->mBaseInfo)) {
  52. return $this->mBaseInfo[$brand_id]['brand_name'];
  53. } else {
  54. return '';
  55. }
  56. }
  57. public function country($brand_id)
  58. {
  59. $brand_id = intval($brand_id);
  60. if(array_key_exists($brand_id,$this->mBaseInfo)) {
  61. return $this->mBaseInfo[$brand_id]['brand_country'];
  62. } else {
  63. return '';
  64. }
  65. }
  66. public function country_logo($brand_id)
  67. {
  68. $brand_id = intval($brand_id);
  69. if(array_key_exists($brand_id,$this->mBaseInfo)) {
  70. return $this->mBaseInfo[$brand_id]['brand_country_logo'];
  71. } else {
  72. return '';
  73. }
  74. }
  75. public function author_desc($brand_id)
  76. {
  77. $brand_id = intval($brand_id);
  78. if(array_key_exists($brand_id,$this->mBaseInfo)) {
  79. return $this->mBaseInfo[$brand_id]['author_desc'];
  80. } else {
  81. return '';
  82. }
  83. }
  84. public function alpha_list()
  85. {
  86. return $this->mAlphaList;
  87. }
  88. static function alpha_compare($left,$right)
  89. {
  90. $l = $left['brand_prefix'][0];
  91. $r = $right['brand_prefix'][0];
  92. if($l > $r) {
  93. return 1;
  94. }
  95. elseif($l == $r) {
  96. $l_name = $left['brand_name'];
  97. $r_name = $right['brand_name'];
  98. return strcmp($l_name,$r_name);
  99. }
  100. else {
  101. return -1;
  102. }
  103. }
  104. private function init()
  105. {
  106. $data = $this->read_cache();
  107. $this->mBrandPageResult = $data;
  108. $this->mBaseInfo = $data['base_info'];
  109. $alpha_list = [];
  110. foreach ($this->mBaseInfo as $item)
  111. {
  112. $name = trim($item['brand_name']);
  113. if(!empty($name)) {
  114. $this->mNameID[$name] = intval($item['brand_id']);
  115. }
  116. $alpha = Pinyin::getAlpha($name);
  117. if(empty($alpha)) continue;
  118. $alpha = strtoupper($alpha);
  119. $item['brand_prefix'] = $alpha;
  120. $alpha_list[] = $item;
  121. }
  122. usort($alpha_list,['brand_helper','alpha_compare']);
  123. $brand_series = [];
  124. if(defined('SERVER_TYPE') && SERVER_TYPE == 'car')
  125. {
  126. $i = 0;
  127. while (true)
  128. {
  129. $start = $i * 1000;
  130. $items = Model()->table('car_series')->field('*')->order('brand_id asc,series_id asc')->limit("{$start},1000")->select();
  131. if (empty($items)) break;
  132. $i++;
  133. foreach ($items as $item)
  134. {
  135. $brand_id = intval($item['brand_id']);
  136. $series_id = intval($item['series_id']);
  137. $series_name = $item['series_name'];
  138. if(!array_key_exists($brand_id,$brand_series)) {
  139. $brand_series[$brand_id] = [];
  140. }
  141. $brand_series[$brand_id][] = ['series_id' => $series_id,'series_name' => $series_name];
  142. }
  143. }
  144. }
  145. $this->mAlphaList = [];
  146. foreach ($alpha_list as $item)
  147. {
  148. $val = [];
  149. $val['brand_name'] = $item['brand_name'];
  150. $val['brand_prefix'] = $item['brand_prefix'];
  151. $val['brand_logo'] = $item['brand_logo'];
  152. $val['brand_id'] = $item['brand_id'];
  153. if(defined('SERVER_TYPE') && SERVER_TYPE == 'car') {
  154. $brand_id = intval($item['brand_id']);
  155. $subs = $brand_series[$brand_id];
  156. $val['subs'] = empty($subs) ? [] : $subs;
  157. }
  158. $this->mAlphaList[] = $val;
  159. }
  160. }
  161. private function read_cache()
  162. {
  163. $ret = rcache('brandex', 'mb_');
  164. if (!empty($ret)) {
  165. return unserialize($ret['data']);
  166. }
  167. global $config;
  168. $exbrands = $config['exclude_brands'];
  169. $brands = [];
  170. $base_info = [];
  171. $model = Model('brand');
  172. $items = $model->field('brand_id,brand_logo,brand_name,brand_country,brand_country_logo,author_desc')
  173. ->where(array('brand_apply' => '1'))
  174. ->order('brand_sort asc')
  175. ->limit(false)
  176. ->select();
  177. foreach ($items as $item)
  178. {
  179. $image = UPLOAD_SITE_URL . $item['brand_logo'];
  180. $ret = util::imgsize($image);
  181. if ($ret != false) {
  182. $item['brand_logo'] = $image;
  183. } else {
  184. Log::record("cant get {$item['brand_name']}." ,Log::ERR);
  185. continue;
  186. }
  187. if(empty($item['brand_country_logo'])) {
  188. $conuntry_logo = '';
  189. Log::record("cant get {$item['brand_name']} brand_country_logo." ,Log::ERR);
  190. } else {
  191. $conuntry_logo = UPLOAD_SITE_URL . $item['brand_country_logo'];
  192. }
  193. $item['brand_country_logo'] = $conuntry_logo;
  194. $brand_id = intval($item['brand_id']);
  195. $base_info[$brand_id] = $item;
  196. if(!empty($exbrands) && is_array($exbrands) && in_array($brand_id,$exbrands)) {
  197. continue;
  198. } else {
  199. $brands[] = $item;
  200. }
  201. }
  202. $block = special_formater::format_grid_brands($brands);
  203. $result = array("brands" => $brands, "block" => $block,'base_info' => $base_info);
  204. wcache("brandex", array("data" => serialize($result)), 'mb_');
  205. return $result;
  206. }
  207. public function brandex()
  208. {
  209. return $this->mBrandPageResult;
  210. }
  211. //////////for old interface/////////////////////////////////////////////////////////////////////////////////////////
  212. static function brands()
  213. {
  214. $prefix = 'mb_';
  215. $ret = rcache('brand', $prefix);
  216. if (empty($ret)) {
  217. $model = Model();
  218. $brand_area_list = $model->table('brand_area')->order('area_sort asc')->limit(false)->select();
  219. $filed = 'brand_id,brand_name,brand_pic,brand_img_bg,brand_img_logo,brand_area_id';
  220. $brand_c_list = $model->table('brand')->field($filed)->where(array('brand_apply' => '1'))->order('brand_sort asc')->limit(false)->select();
  221. $brands = array();
  222. foreach ($brand_area_list as $brand_area) {
  223. foreach ($brand_c_list as $brand) {
  224. $brand['brand_pic'] = image_helper::format_brand_img_rect($brand['brand_pic']);
  225. $brand['brand_img_bg'] = image_helper::format_brand_img_bg($brand['brand_img_bg']);
  226. $brand['brand_img_logo'] = image_helper::format_brand_img_circle($brand['brand_img_logo']);
  227. if ($brand['brand_area_id'] == $brand_area['area_id']) {
  228. if (empty($brand_area['data'])) {
  229. $brand_area['data'] = array();
  230. }
  231. array_push($brand_area['data'], $brand);
  232. }
  233. }
  234. if (!empty($brand_area['data'])) {
  235. array_push($brands, $brand_area);
  236. }
  237. }
  238. wcache("brand", array("brands" => serialize($brands)), $prefix);
  239. } else {
  240. $brands = unserialize($ret['brands']);
  241. }
  242. return $brands;
  243. }
  244. }