adv.model.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. <?php
  2. /**
  3. * 广告模型类
  4. *
  5. */
  6. defined('InShopNC') or exit('Access Invalid!');
  7. class advModel
  8. {
  9. /**
  10. * 新增广告位
  11. *
  12. * @param array $param 参数内容
  13. * @return bool 布尔类型的返回结果
  14. */
  15. public function ap_add($param){
  16. if (empty($param)){
  17. return false;
  18. }
  19. if (is_array($param)){
  20. $tmp = array();
  21. foreach ($param as $k => $v){
  22. $tmp[$k] = $v;
  23. }
  24. $result = Db::insert('adv_position',$tmp);
  25. return $result;
  26. }else {
  27. return false;
  28. }
  29. }
  30. /**
  31. * 新增广告
  32. *
  33. * @param array $param 参数内容
  34. * @return bool 布尔类型的返回结果
  35. */
  36. public function adv_add($param){
  37. if (empty($param)){
  38. return false;
  39. }
  40. if (is_array($param)){
  41. $tmp = array();
  42. foreach ($param as $k => $v){
  43. $tmp[$k] = $v;
  44. }
  45. $result = Db::insert('adv',$tmp);
  46. // drop cache
  47. $apId = (int) $tmp['ap_id'];
  48. dkcache("adv/{$apId}");
  49. return $result;
  50. }else {
  51. return false;
  52. }
  53. }
  54. /**
  55. * 删除一条广告
  56. *
  57. * @param array $param 参数内容
  58. * @return bool 布尔类型的返回结果
  59. */
  60. public function adv_del($adv_id)
  61. {
  62. $adv_array = Model()->table('adv')->find($adv_id);
  63. if ($adv_array) {
  64. // drop cache
  65. $apId = (int) $adv_array['ap_id'];
  66. dkcache("adv/{$apId}");
  67. }
  68. $where = "where adv_id = '$adv_id'";
  69. $result = Db::delete("adv",$where);
  70. return $result;
  71. }
  72. /**
  73. * 删除一个广告位
  74. *
  75. * @param array $param 参数内容
  76. * @return bool 布尔类型的返回结果
  77. */
  78. public function ap_del($ap_id)
  79. {
  80. // drop cache
  81. $apId = (int) $ap_id;
  82. dkcache("adv/{$apId}");
  83. $where = "where ap_id = '$ap_id'";
  84. $result = Db::delete("adv_position",$where);
  85. return $result;
  86. }
  87. /**
  88. * 获取广告位列表
  89. *
  90. * @param array $condition 查询条件
  91. * @param obj $page 分页对象
  92. * @return array 二维数组
  93. */
  94. public function getApList($condition=array(), $page='', $orderby=''){
  95. $param = array();
  96. $param['table'] = 'adv_position';
  97. $param['where'] = $this->getCondition($condition);
  98. if($orderby == ''){
  99. $param['order'] = 'ap_id desc';
  100. }else{
  101. $param['order'] = $orderby;
  102. }
  103. return Db::select($param,$page);
  104. }
  105. /**
  106. * 根据条件查询多条记录
  107. *
  108. * @param array $condition 查询条件
  109. * @param obj $page 分页对象
  110. * @return array 二维数组
  111. */
  112. public function getList($condition=array(), $page='', $limit='', $orderby=''){
  113. $param = array();
  114. $param['table'] = 'adv';
  115. $param['field'] = $condition['field']?$condition['field']:'*';
  116. $param['where'] = $this->getCondition($condition);
  117. if($orderby == ''){
  118. $param['order'] = 'slide_sort, adv_id desc';
  119. }else{
  120. $param['order'] = $orderby;
  121. }
  122. $param['limit'] = $limit;
  123. return Db::select($param,$page);
  124. }
  125. /**
  126. * 根据id查询一条记录
  127. *
  128. * @param int $id 广告id
  129. * @return array 一维数组
  130. */
  131. public function getOneById($id){
  132. $param = array();
  133. $param['table'] = 'adv';
  134. $param['field'] = 'adv_id';
  135. $param['value'] = $id;
  136. return Db::getRow($param);
  137. }
  138. /**
  139. * 更新记录
  140. *
  141. * @param array $param 更新内容
  142. * @return bool
  143. */
  144. public function update($param)
  145. {
  146. $adv_array = Model()->table('adv')->find($param['adv_id']);
  147. if ($adv_array) {
  148. // drop cache
  149. $apId = (int) $adv_array['ap_id'];
  150. dkcache("adv/{$apId}");
  151. }
  152. return Db::update('adv',$param,"adv_id='{$param['adv_id']}'");
  153. }
  154. /**
  155. * 更新广告位记录
  156. *
  157. * @param array $param 更新内容
  158. * @return bool
  159. */
  160. public function ap_update($param)
  161. {
  162. $apId = (int) $param['ap_id'];
  163. dkcache("adv/{$apId}");
  164. return Db::update('adv_position',$param,"ap_id='{$param['ap_id']}'");
  165. }
  166. /**
  167. * 构造查询条件
  168. *
  169. * @param array $condition
  170. * @return string
  171. */
  172. private function getCondition($condition = array()){
  173. $return = '';
  174. $time = time();
  175. if($condition['adv_type'] != ''){
  176. $return .= " and adv_type='".$condition['adv_type']."'";
  177. }
  178. if($condition['adv_code'] != ''){
  179. $return .= " and adv_code='".$condition['adv_code']."'";
  180. }
  181. if($condition['no_adv_type'] != ''){
  182. $return .= " and adv_type!='".$condition['no_adv_type']."'";
  183. }
  184. if ($condition['adv_state'] != '') {
  185. $return .= " and adv_state='".$condition['adv_state']."'";
  186. }
  187. if ($condition['ap_id'] != '') {
  188. $return .= " and ap_id='".$condition['ap_id']."'";
  189. }
  190. if ($condition['adv_id'] != '') {
  191. $return .= " and adv_id='".$condition['adv_id']."'";
  192. }
  193. if ($condition['adv_end_date'] == 'over'){
  194. $return .= " and adv_end_date<'".$time."'";
  195. }
  196. if ($condition['adv_end_date'] == 'notover'){
  197. $return .= " and adv_end_date>'".$time."'";
  198. }
  199. if ($condition['ap_name'] != ''){
  200. $return .= " and ap_name like '%".$condition['ap_name']."%'";
  201. }
  202. if ($condition['adv_title'] != ''){
  203. $return .= " and adv_title like '%".$condition['adv_title']."%'";
  204. }
  205. if ($condition['add_time_from'] != ''){
  206. $return .= " and adv_start_date > '{$condition['add_time_from']}'";
  207. }
  208. if ($condition['add_time_to'] != ''){
  209. $return .= " and adv_end_date < '{$condition['add_time_to']}'";
  210. }
  211. if ($condition['member_name'] != ''){
  212. $return .= " and member_name ='".$condition['member_name']."'";
  213. }
  214. if($condition['is_allow'] != ''){
  215. $return .= " and is_allow = '".$condition['is_allow']."' ";
  216. }
  217. if($condition['buy_style'] != ''){
  218. $return .= " and buy_style = '".$condition['buy_style']."' ";
  219. }
  220. if($condition['adv_start_date'] == 'nowshow'){
  221. $return .= " and adv_start_date <'".$time."'";
  222. }
  223. if($condition['member_id'] != ''){
  224. $return .= " and member_id = '".$condition['member_id']."'";
  225. }
  226. if($condition['is_use'] != ''){
  227. $return .= " and is_use = '".$condition['is_use']."' ";
  228. }
  229. if ($condition['adv_buy_id'] != '') {
  230. $return .= " and ap_id not in (".$condition['adv_buy_id'].")";
  231. }
  232. return $return;
  233. }
  234. public function delapcache($id)
  235. {
  236. if (!is_numeric($id))
  237. return;
  238. dkcache("adv/{$id}");
  239. return true;
  240. }
  241. /**
  242. * 广告
  243. *
  244. * @return array
  245. */
  246. public function makeApAllCache(){
  247. if (C('cache_open')) {
  248. // *kcache() doesnt support iterating on keys
  249. } else {
  250. delCacheFile('adv');
  251. }
  252. $model = Model();
  253. $ap_list =$model->table('adv_position')->where(array('is_use'=>1))->select();
  254. $adv_list =$model->table('adv')->where(array('adv_end_date'=>array('gt',time())))->order('slide_sort, adv_id desc')->select();
  255. $array = array();
  256. foreach ((array)$ap_list as $v) {
  257. foreach ((array)$adv_list as $xv) {
  258. if ($v['ap_id'] == $xv['ap_id']){
  259. $v['adv_list'][] = $xv;
  260. }
  261. }
  262. // 写入缓存
  263. $apId = (int) $v['ap_id'];
  264. if (C('cache_open')) {
  265. wkcache("adv/{$apId}", $v);
  266. } else {
  267. write_file(BASE_DATA_PATH . '/cache/adv/' . $apId . '.php', $v);
  268. }
  269. }
  270. }
  271. public function getApById($apId)
  272. {
  273. $apId = (int) $apId;
  274. return rkcache("adv/{$apId}", array($this, 'getApByCacheId'));
  275. }
  276. /**
  277. * 通过缓存id获取广告,生成缓存时使用
  278. *
  279. * @param $apCacheId 格式为 adv/{ap_id}
  280. */
  281. public function getApByCacheId($apCacheId)
  282. {
  283. $apId = substr($apCacheId, strlen('adv/'));
  284. return $this->getAp($apId);
  285. }
  286. /**
  287. * 生成广告位
  288. *
  289. * @param int $ap_id
  290. */
  291. protected function getAp($ap_id)
  292. {
  293. $model = Model();
  294. $ap_info = $model->table('adv_position')->find($ap_id);
  295. $ap_info['adv_list'] = $model->table('adv')->where(array(
  296. 'ap_id' => $ap_id,
  297. 'adv_end_date' => array('gt',time()),
  298. ))->order('slide_sort, adv_id desc')->select();
  299. return $ap_info;
  300. }
  301. /**
  302. * 删除缓存
  303. */
  304. public function dropApCacheByAdvIds($advIds)
  305. {
  306. $apIds = array_keys((array) Model()->table('adv')->field('ap_id')->where(array(
  307. 'adv_id' => array('in', (array) $advIds),
  308. ))->key('ap_id')->select());
  309. foreach ($apIds as $apId) {
  310. $apId = (int) $apId;
  311. dkcache("adv/{$apId}");
  312. }
  313. }
  314. }