You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1094 lines
25 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. <?php
  2. // 公共函数文件
  3. //获取数据
  4. function dataList($modelname, $where = [], $size = 15, $page = 1)
  5. {
  6. $model = \DB::table($modelname);
  7. $page = 1;$skip = 0;
  8. if(isset($where['limit'])){$limit=explode(',',$where['limit']); $skip = $limit[0]; $size = $limit[1];}else{if(isset($where['row'])){$size = $where['row'];}} // 参数格式:$where['limit'] = '2,10';$where['row'] = 10;
  9. //原生sql
  10. if(isset($where['sql']))
  11. {
  12. $model = $model->whereRaw($where['sql']);
  13. }
  14. //排序
  15. if(isset($where['orderby']))
  16. {
  17. $orderby = $where['orderby'];
  18. if($orderby == 'rand()')
  19. {
  20. $model = $model->orderBy(\DB::raw('rand()'));
  21. }
  22. else
  23. {
  24. if(count($orderby) == count($orderby, 1))
  25. {
  26. $model = $model->orderBy($orderby[0], $orderby[1]);
  27. }
  28. else
  29. {
  30. foreach($orderby as $row)
  31. {
  32. $model = $model->orderBy($row[0], $row[1]);
  33. }
  34. }
  35. }
  36. }
  37. else
  38. {
  39. $model = $model->orderBy('id', 'desc');
  40. }
  41. //要返回的字段
  42. if(isset($where['field'])){$model = $model->select(\DB::raw($where['field']));}
  43. //查询条件
  44. $where = function ($query) use ($where) {
  45. if(isset($where['expression']))
  46. {
  47. foreach($where['expression'] as $row)
  48. {
  49. $query->where($row[0], $row[1], $row[2]);
  50. }
  51. }
  52. };
  53. if(!empty($where)){$model = $model->where($where);}
  54. if($skip==0){$skip = ($page-1)*$size;}
  55. return object_to_array($model->skip($skip)->take($size)->get());
  56. }
  57. //pc前台栏目、标签、内容页面地址生成
  58. function get_front_url($param='')
  59. {
  60. $url = '';
  61. if($param['type'] == 'list')
  62. {
  63. //列表页
  64. $url .= '/cat'.$param['catid'];
  65. }
  66. else if($param['type'] == 'content')
  67. {
  68. //内容页
  69. $url .= '/p/'.$param['id'];
  70. }
  71. else if($param['type'] == 'tags')
  72. {
  73. //tags页面
  74. $url .= '/tag'.$param['tagid'];
  75. }
  76. else if($param['type'] == 'page')
  77. {
  78. //单页面
  79. $url .= '/page/'.$param['pagename'];
  80. }
  81. else if($param['type'] == 'search')
  82. {
  83. //搜索关键词页面
  84. $url .= '/s'.$param['searchid'];
  85. }
  86. else if($param['type'] == 'productlist')
  87. {
  88. //商品列表页
  89. $url .= '/product'.$param['catid'];
  90. }
  91. else if($param['type'] == 'productdetail')
  92. {
  93. //商品内容页
  94. $url .= '/goods/'.$param['id'];
  95. }
  96. return $url;
  97. }
  98. //wap前台栏目、标签、内容页面地址生成
  99. function get_wap_front_url(array $param)
  100. {
  101. $url = '';
  102. if($param['type'] == 'list')
  103. {
  104. //列表页
  105. $url .= '/cat'.$param['catid'];
  106. }
  107. else if($param['type'] == 'content')
  108. {
  109. //内容页
  110. $url .= '/p/'.$param['id'];
  111. }
  112. else if($param['type'] == 'tags')
  113. {
  114. //tags页面
  115. $url .= '/tag'.$param['tagid'];
  116. }
  117. else if($param['type'] == 'page')
  118. {
  119. //单页面
  120. $url .= '/page/'.$param['pagename'];
  121. }
  122. else if($param['type'] == 'search')
  123. {
  124. //tags页面
  125. $url .= '/s'.$param['searchid'];
  126. }
  127. else if($param['type'] == 'productlist')
  128. {
  129. //商品列表页
  130. $url .= '/product'.$param['catid'];
  131. }
  132. else if($param['type'] == 'productdetail')
  133. {
  134. //商品内容页
  135. $url .= '/goods/'.$param['id'];
  136. }
  137. return $url;
  138. }
  139. /**
  140. * 获取文章列表
  141. * @param int $tuijian=0 推荐等级
  142. * @param int $typeid=0 分类
  143. * @param int $image=1 是否存在图片
  144. * @param int $row=10 需要返回的数量
  145. * @param string $orderby='id desc' 排序,默认id降序,随机rand()
  146. * @param string $limit='0,10' 如果存在$row,$limit就无效
  147. * @return string
  148. */
  149. function arclist(array $param)
  150. {
  151. $modelname = 'article';
  152. if(isset($param['table'])){$modelname = $param['table'];}
  153. $model = \DB::table($modelname);
  154. $size = sysconfig('CMS_PAGESIZE');$page = 1;$skip = 0;
  155. if(isset($param['limit'])){$limit=explode(',',$param['limit']); $skip = $limit[0]; $size = $limit[1];}else{if(isset($param['row'])){$size = $param['row'];}} // 参数格式:$param['limit'] = '2,10';$param['row'] = 10;
  156. //查询条件
  157. $where = function ($query) use ($param) {
  158. if(isset($param['tuijian']))
  159. {
  160. if(is_array($param['tuijian']))
  161. {
  162. $query->where('tuijian', $param['tuijian'][0], $param['tuijian'][1]);
  163. }
  164. else
  165. {
  166. $query->where('tuijian', $param['tuijian']);
  167. }
  168. }
  169. if(isset($param['expression']))
  170. {
  171. foreach($param['expression'] as $row)
  172. {
  173. $query->where($row[0], $row[1], $row[2]);
  174. }
  175. }
  176. if(isset($param['typeid']))
  177. {
  178. $query->where('typeid', $param["typeid"]);
  179. }
  180. if(isset($param['image']))
  181. {
  182. $query->where('litpic', '<>', '');
  183. }
  184. };
  185. if(!empty($where)){$model = $model->where($where);}
  186. //原生sql
  187. if(isset($param['sql']))
  188. {
  189. $model = $model->whereRaw($param['sql']);
  190. }
  191. //排序
  192. if(isset($param['orderby']))
  193. {
  194. $orderby = $param['orderby'];
  195. if($orderby == 'rand()')
  196. {
  197. $model = $model->orderBy(\DB::raw('rand()'));
  198. }
  199. else
  200. {
  201. if(count($orderby) == count($orderby, 1))
  202. {
  203. $model = $model->orderBy($orderby[0], $orderby[1]);
  204. }
  205. else
  206. {
  207. foreach($orderby as $row)
  208. {
  209. $model = $model->orderBy($row[0], $row[1]);
  210. }
  211. }
  212. }
  213. }
  214. else
  215. {
  216. $model = $model->orderBy('id', 'desc');
  217. }
  218. //要返回的字段
  219. if(isset($param['field'])){$model = $model->select(\DB::raw($param['field']));}
  220. if($skip==0){$skip = ($page-1)*$size;}
  221. return object_to_array($model->skip($skip)->take($size)->get());
  222. }
  223. /**
  224. * 获取tag标签列表
  225. * @param int $row=10 需要返回的数量,如果存在$limit,$row就无效
  226. * @param string $orderby='id desc' 排序,默认id降序,随机rand()
  227. * @param string $limit='0,10'
  228. * @return string
  229. */
  230. function tagslist($param="")
  231. {
  232. $tagindex = \DB::table("tagindex");
  233. $orderby=$limit="";
  234. if(isset($param['row'])){$tagindex = $tagindex->take($param['row']);}
  235. if(isset($param['orderby'])){if($param['orderby']=='rand()'){$tagindex = $tagindex->orderBy(\DB::Raw('rand()'));}else{$tagindex = $tagindex->orderBy($param['orderby'][0],$param['orderby'][1]);}}else{$tagindex = $tagindex->orderBy('id','desc');}
  236. return object_to_array($tagindex->get());
  237. }
  238. /**
  239. * 获取友情链接
  240. * @param string $orderby='id desc' 排序,默认id降序,随机rand()
  241. * @param int||string $limit='0,10'
  242. * @return string
  243. */
  244. function flinklist($param="")
  245. {
  246. return \DB::table("friendlink")->orderBy('rank','desc')->take($param['row'])->get();
  247. }
  248. /**
  249. * 获取文章上一篇,下一篇id
  250. * @param $param['aid'] 当前文章id
  251. * @param $param['typeid'] 当前文章typeid
  252. * @param string $type 获取类型
  253. * pre:上一篇 next:下一篇
  254. * @return array
  255. */
  256. function get_article_prenext(array $param)
  257. {
  258. $typeid = $res = '';
  259. if(!empty($param["typeid"]))
  260. {
  261. $typeid = $param["typeid"];
  262. }
  263. else
  264. {
  265. $Article = DB::table("article")->select('typeid')->where('id', $param["aid"])->first();
  266. $typeid = $Article["typeid"];
  267. }
  268. $res = DB::table("article")->select('id','typeid','title')->where('typeid', $typeid);
  269. if($param["type"]=='pre')
  270. {
  271. $res = $res->where('id', '<', $param["aid"])->orderBy('id', 'desc');
  272. }
  273. elseif($param["type"]=='next')
  274. {
  275. $res = $res->where('id', '>', $param["aid"])->orderBy('id', 'asc');
  276. }
  277. return object_to_array($res->first(), 1);
  278. }
  279. /**
  280. * 获取列表分页
  281. * @param $param['pagenow'] 当前第几页
  282. * @param $param['counts'] 总条数
  283. * @param $param['pagesize'] 每页显示数量
  284. * @param $param['catid'] 栏目id
  285. * @param $param['offset'] 偏移量
  286. * @return array
  287. */
  288. function get_listnav(array $param)
  289. {
  290. $catid = $param["catid"];
  291. $pagenow = $param["pagenow"];
  292. $prepage = $nextpage = '';
  293. $prepagenum = $pagenow-1;
  294. $nextpagenum = $pagenow+1;
  295. $counts=$param["counts"];
  296. $totalpage=get_totalpage(array("counts"=>$counts,"pagesize"=>$param["pagesize"]));
  297. if($totalpage<=1 && $counts>0)
  298. {
  299. return "<li><span class=\"pageinfo\">共1页/".$counts."条记录</span></li>";
  300. }
  301. if($counts == 0)
  302. {
  303. return "<li><span class=\"pageinfo\">共0页/".$counts."条记录</span></li>";
  304. }
  305. $maininfo = "<li><span class=\"pageinfo\">共".$totalpage."".$counts."条</span></li>";
  306. if(!empty($param["urltype"]))
  307. {
  308. $urltype = $param["urltype"];
  309. }
  310. else
  311. {
  312. $urltype = 'cat';
  313. }
  314. //获得上一页和下一页的链接
  315. if($pagenow != 1)
  316. {
  317. if($pagenow == 2)
  318. {
  319. $prepage.="<li><a href='/".$urltype.$catid."'>上一页</a></li>";
  320. }
  321. else
  322. {
  323. $prepage.="<li><a href='/".$urltype.$catid."/$prepagenum'>上一页</a></li>";
  324. }
  325. $indexpage="<li><a href='/".$urltype.$catid."'>首页</a></li>";
  326. }
  327. else
  328. {
  329. $indexpage="<li><a>首页</a></li>";
  330. }
  331. if($pagenow!=$totalpage && $totalpage>1)
  332. {
  333. $nextpage.="<li><a href='/".$urltype.$catid."/$nextpagenum'>下一页</a></li>";
  334. $endpage="<li><a href='/".$urltype.$catid."/$totalpage'>末页</a></li>";
  335. }
  336. else
  337. {
  338. $endpage="<li><a>末页</a></li>";
  339. }
  340. //获得数字链接
  341. $listdd="";
  342. if(!empty($param["offset"])){$offset=$param["offset"];}else{$offset=2;}
  343. $minnum=$pagenow-$offset;
  344. $maxnum=$pagenow+$offset;
  345. if($minnum<1){$minnum=1;}
  346. if($maxnum>$totalpage){$maxnum=$totalpage;}
  347. for($minnum;$minnum<=$maxnum;$minnum++)
  348. {
  349. if($minnum==$pagenow)
  350. {
  351. $listdd.= "<li class=\"thisclass\"><a>$minnum</a></li>";
  352. }
  353. else
  354. {
  355. if($minnum==1)
  356. {
  357. $listdd.="<li><a href='/".$urltype.$catid."'>$minnum</a></li>";
  358. }
  359. else
  360. {
  361. $listdd.="<li><a href='/".$urltype.$catid."/$minnum'>$minnum</a></li>";
  362. }
  363. }
  364. }
  365. $plist = '';
  366. $plist .= $indexpage; //首页链接
  367. $plist .= $prepage; //上一页链接
  368. $plist .= $listdd; //数字链接
  369. $plist .= $nextpage; //下一页链接
  370. $plist .= $endpage; //末页链接
  371. $plist .= $maininfo;
  372. return $plist;
  373. }
  374. /**
  375. * 获取列表上一页、下一页
  376. * @param $param['pagenow'] 当前第几页
  377. * @param $param['counts'] 总条数
  378. * @param $param['pagesize'] 每页显示数量
  379. * @param $param['catid'] 栏目id
  380. * @return array
  381. */
  382. function get_prenext(array $param)
  383. {
  384. $counts=$param['counts'];
  385. $pagenow=$param["pagenow"];
  386. $prepage = $nextpage = '';
  387. $prepagenum = $pagenow-1;
  388. $nextpagenum = $pagenow+1;
  389. $cat=$param['catid'];
  390. if(!empty($param["urltype"]))
  391. {
  392. $urltype = $param["urltype"];
  393. }
  394. else
  395. {
  396. $urltype = 'cat';
  397. }
  398. $totalpage=get_totalpage(array("counts"=>$counts,"pagesize"=>$param["pagesize"]));
  399. //获取上一页
  400. if($pagenow == 1)
  401. {
  402. }
  403. elseif($pagenow==2)
  404. {
  405. $prepage='<a class="prep" href="/'.$urltype.$cat.'">上一页</a> &nbsp; ';
  406. }
  407. else
  408. {
  409. $prepage='<a class="prep" href="/'.$urltype.$cat.'/'.$prepagenum.'">上一页</a> &nbsp; ';
  410. }
  411. //获取下一页
  412. if($pagenow<$totalpage && $totalpage>1)
  413. {
  414. $nextpage='<a class="nextp" href="/'.$urltype.$cat.'/'.$nextpagenum.'">下一页</a>';
  415. }
  416. $plist = '';
  417. $plist .= $indexpage; //首页链接
  418. $plist .= $prepage; //上一页链接
  419. $plist .= $nextpage; //下一页链接
  420. return $plist;
  421. }
  422. /**
  423. * 获取分页列表
  424. * @access public
  425. * @param string $list_len 列表宽度
  426. * @param string $list_len 列表样式
  427. * @return string
  428. */
  429. function pagenav(array $param)
  430. {
  431. $prepage = $nextpage = '';
  432. $prepagenum = $param["pagenow"]-1;
  433. $nextpagenum = $param["pagenow"]+1;
  434. if(!empty($param['tuijian'])){$map['tuijian']=$param['tuijian'];}
  435. if(!empty($param['typeid'])){$map['typeid']=$param['typeid'];}
  436. if(!empty($param['image'])){$map['litpic']=array('NEQ','');}
  437. if(!empty($param['row'])){$limit="0,".$param['row'];}else{if(!empty($param['limit'])){$limit=$param['limit'];}else{$limit='0,8';}}
  438. if(!empty($param['orderby'])){$orderby=$param['orderby'];}else{$orderby='id desc';}
  439. return db("article")->field('body',true)->where($map)->order($orderby)->limit($limit)->select();
  440. }
  441. //根据总数与每页条数,获取总页数
  442. function get_totalpage(array $param)
  443. {
  444. if(!empty($param['pagesize'] || $param['pagesize']==0)){$pagesize=$param["pagesize"];}else{$pagesize=CMS_PAGESIZE;}
  445. $counts=$param["counts"];
  446. //取总数据量除以每页数的余数
  447. if($counts % $pagesize)
  448. {
  449. $totalpage = intval($counts/$pagesize) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一,如果没有余数,则页数等于总数据量除以每页数的结果
  450. }
  451. else
  452. {
  453. $totalpage = $counts/$pagesize;
  454. }
  455. return $totalpage;
  456. }
  457. /**
  458. * 获得当前的页面文件的url
  459. * @access public
  460. * @return string
  461. */
  462. function GetCurUrl()
  463. {
  464. if(!empty($_SERVER['REQUEST_URI']))
  465. {
  466. $nowurl = $_SERVER['REQUEST_URI'];
  467. $nowurls = explode('?', $nowurl);
  468. $nowurl = $nowurls[0];
  469. }
  470. else
  471. {
  472. $nowurl = $_SERVER['PHP_SELF'];
  473. }
  474. return $nowurl;
  475. }
  476. /**
  477. * 获取单页列表
  478. * @param int $row=8 需要返回的数量
  479. * @param string $orderby='id desc' 排序,默认id降序,随机rand()
  480. * @param string $limit='0,8' 如果存在$row,$limit就无效
  481. * @return string
  482. */
  483. function pagelist($param="")
  484. {
  485. if(!empty($param['row'])){$limit="0,".$param['row'];}else{if(!empty($param['limit'])){$limit=$param['limit'];}else{$limit='0,8';}}
  486. if(!empty($param['orderby'])){$orderby=$param['orderby'];}else{$orderby='id desc';}
  487. return db("page")->field('body',true)->order($orderby)->limit($limit)->select();
  488. }
  489. /**
  490. * 截取中文字符串
  491. * @param string $string 中文字符串
  492. * @param int $sublen 截取长度
  493. * @param int $start 开始长度 默认0
  494. * @param string $code 编码方式 默认UTF-8
  495. * @param string $omitted 末尾省略符 默认...
  496. * @return string
  497. */
  498. function cut_str($string, $sublen=250, $omitted = '', $start=0, $code='UTF-8')
  499. {
  500. $string = strip_tags($string);
  501. $string = str_replace(" ","",$string);
  502. $string = mb_strcut($string,$start,$sublen,$code);
  503. $string.= $omitted;
  504. return $string;
  505. }
  506. //PhpAnalysis获取中文分词
  507. function get_keywords($keyword)
  508. {
  509. require_once(resource_path('org/phpAnalysis/phpAnalysis.php'));
  510. //import("Vendor.phpAnalysis.phpAnalysis");
  511. //初始化类
  512. PhpAnalysis::$loadInit = false;
  513. $pa = new PhpAnalysis('utf-8', 'utf-8', false);
  514. //载入词典
  515. $pa->LoadDict();
  516. //执行分词
  517. $pa->SetSource($keyword);
  518. $pa->StartAnalysis( false );
  519. $keywords = $pa->GetFinallyResult(',');
  520. return ltrim($keywords, ",");
  521. }
  522. //获取二维码
  523. function get_erweima($url="")
  524. {
  525. Vendor('phpqrcode.qrlib');
  526. $url = str_replace("%26","&",$url);
  527. $url = str_replace("%3F","?",$url);
  528. $url = str_replace("%3D","=",$url);
  529. return QRcode::png($url, false, "H", 6);
  530. }
  531. //根据栏目id获取栏目信息
  532. function typeinfo($typeid)
  533. {
  534. return db("arctype")->where("id=$typeid")->find();
  535. }
  536. //根据栏目id获取该栏目下文章/商品的数量
  537. function catarcnum($typeid, $modelname='article')
  538. {
  539. $map['typeid']=$typeid;
  540. return \DB::table($modelname)->where($map)->count('id');
  541. }
  542. //根据Tag id获取该Tag标签下文章的数量
  543. function tagarcnum($tagid)
  544. {
  545. $taglist = \DB::table("taglist");
  546. if(!empty($tagid)){$map['tid']=$tagid; $taglist = $taglist->where($map);}
  547. return $taglist->count();
  548. }
  549. //判断是否是图片格式,是返回true
  550. function imgmatch($url)
  551. {
  552. $info = pathinfo($url);
  553. if (isset($info['extension']))
  554. {
  555. if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png'))
  556. {
  557. return true;
  558. }
  559. else
  560. {
  561. return false;
  562. }
  563. }
  564. }
  565. //将栏目列表生成数组
  566. function get_category($modelname, $parent_id=0, $pad=0)
  567. {
  568. $arr = array();
  569. $temp = \DB::table($modelname)->where('pid', $parent_id);
  570. if(get_table_columns($modelname, 'listorder'))
  571. {
  572. $temp = $temp->orderBy('listorder', 'asc');
  573. }
  574. else
  575. {
  576. $temp = $temp->orderBy('id', 'asc');
  577. }
  578. $temp = $temp->get();
  579. $cats = object_to_array($temp);
  580. if($cats)
  581. {
  582. foreach($cats as $row)//循环数组
  583. {
  584. $row['deep'] = $pad;
  585. if($child = get_category($modelname, $row["id"], $pad+1))//如果子级不为空
  586. {
  587. $row['child'] = $child;
  588. }
  589. $arr[] = $row;
  590. }
  591. return $arr;
  592. }
  593. }
  594. function category_tree($list,$pid=0)
  595. {
  596. global $temp;
  597. if(!empty($list))
  598. {
  599. foreach($list as $v)
  600. {
  601. $temp[] = array("id"=>$v['id'],"deep"=>$v['deep'],"name"=>$v['name'],"pid"=>$v['pid']);
  602. //echo $v['id'];
  603. if(array_key_exists("child",$v))
  604. {
  605. category_tree($v['child'],$v['pid']);
  606. }
  607. }
  608. }
  609. return $temp;
  610. }
  611. //递归获取面包屑导航
  612. function get_cat_path($cat,$table='arctype',$type='list')
  613. {
  614. global $temp;
  615. $row = \DB::table($table)->select('name','pid','id')->where('id',$cat)->first();
  616. $temp = '<a href="'.get_front_url(array("catid"=>$row->id,"type"=>$type)).'">'.$row->name."</a> > ".$temp;
  617. if($row->pid<>0)
  618. {
  619. get_cat_path($row->pid, $table, $type);
  620. }
  621. return $temp;
  622. }
  623. //根据文章id获得tag,$id表示文章id,$tagid表示要排除的标签id
  624. function taglist($id,$tagid=0)
  625. {
  626. $tags="";
  627. if($tagid!=0)
  628. {
  629. $Taglist = \DB::table("taglist")->where('aid',$id)->where('tid', '<>', $tagid)->get();
  630. }
  631. else
  632. {
  633. $Taglist = \DB::table("taglist")->where('aid',$id)->get();
  634. }
  635. foreach($Taglist as $row)
  636. {
  637. if($tags==""){$tags='id='.$row->tid;}else{$tags=$tags.' or id='.$row->tid;}
  638. }
  639. if($tags!=""){return object_to_array(\DB::table("tagindex")->whereRaw(\DB::raw($tags))->get());}
  640. }
  641. //读取动态配置
  642. function sysconfig($varname='')
  643. {
  644. $sysconfig = cache('sysconfig');
  645. $res = '';
  646. if(empty($sysconfig))
  647. {
  648. cache()->forget('sysconfig');
  649. $sysconfig = \App\Http\Model\Sysconfig::orderBy('id')->select('varname', 'value')->get()->toArray();
  650. cache(['sysconfig' => $sysconfig], \Carbon\Carbon::now()->addMinutes(86400));
  651. }
  652. if($varname != '')
  653. {
  654. foreach($sysconfig as $row)
  655. {
  656. if($varname == $row['varname'])
  657. {
  658. $res = $row['value'];
  659. }
  660. }
  661. }
  662. else
  663. {
  664. $res = $sysconfig;
  665. }
  666. return $res;
  667. }
  668. //获取https的get请求结果
  669. function get_curl_data($c_url,$data='')
  670. {
  671. $curl = curl_init(); // 启动一个CURL会话
  672. curl_setopt($curl, CURLOPT_URL, $c_url); // 要访问的地址
  673. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
  674. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
  675. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
  676. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
  677. curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
  678. if($data)
  679. {
  680. curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
  681. curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
  682. }
  683. curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
  684. curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
  685. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
  686. $tmpInfo = curl_exec($curl); // 执行操作
  687. if (curl_errno($curl))
  688. {
  689. echo 'Errno'.curl_error($curl);//捕抓异常
  690. }
  691. curl_close($curl); // 关闭CURL会话
  692. return $tmpInfo; // 返回数据
  693. }
  694. //通过file_get_content获取远程数据
  695. function http_request_post($url,$data,$type='POST')
  696. {
  697. $content = http_build_query($data);
  698. $content_length = strlen($content);
  699. $options = array(
  700. 'http' => array(
  701. 'method' => $type,
  702. 'header' =>
  703. "Content-type: application/x-www-form-urlencoded\r\n" .
  704. "Content-length: $content_length\r\n",
  705. 'content' => $content
  706. )
  707. );
  708. $result = file_get_contents($url,false,stream_context_create($options));
  709. return $result;
  710. }
  711. function imageResize($url, $width, $height)
  712. {
  713. header('Content-type: image/jpeg');
  714. list($width_orig, $height_orig) = getimagesize($url);
  715. $ratio_orig = $width_orig/$height_orig;
  716. if($width/$height > $ratio_orig)
  717. {
  718. $width = $height*$ratio_orig;
  719. }
  720. else
  721. {
  722. $height = $width/$ratio_orig;
  723. }
  724. // This resamples the image
  725. $image_p = imagecreatetruecolor($width, $height);
  726. $image = imagecreatefromjpeg($url);
  727. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
  728. // Output the image
  729. imagejpeg($image_p, null, 100);
  730. }
  731. /**
  732. * 为文章内容添加内敛, 排除alt title <a></a>直接的字符替换
  733. *
  734. * @param string $body
  735. * @return string
  736. */
  737. function ReplaceKeyword($body)
  738. {
  739. $karr = $kaarr = array();
  740. //暂时屏蔽超链接
  741. $body = preg_replace("#(<a(.*))(>)(.*)(<)(\/a>)#isU", '\\1-]-\\4-[-\\6', $body);
  742. if(cache("keywordlist")){$posts=cache("keywordlist");}else{$posts = object_to_array(DB::table("keyword")->get());cache(["keywordlist"=>$posts], \Carbon\Carbon::now()->addMinutes(2592000));}
  743. foreach($posts as $row)
  744. {
  745. $keyword = trim($row['keyword']);
  746. $key_url=trim($row['rpurl']);
  747. $karr[] = $keyword;
  748. $kaarr[] = "<a href='$key_url' target='_blank'><u>$keyword</u></a>";
  749. }
  750. asort($karr);
  751. $body = str_replace('\"', '"', $body);
  752. foreach ($karr as $key => $word)
  753. {
  754. $body = preg_replace("#".preg_quote($word)."#isU", $kaarr[$key], $body, 1);
  755. }
  756. //恢复超链接
  757. return preg_replace("#(<a(.*))-\]-(.*)-\[-(\/a>)#isU", '\\1>\\3<\\4', $body);
  758. }
  759. /**
  760. * 删除非站内链接
  761. *
  762. * @access public
  763. * @param string $body 内容
  764. * @param array $allow_urls 允许的超链接
  765. * @return string
  766. */
  767. function replacelinks($body, $allow_urls=array())
  768. {
  769. $host_rule = join('|', $allow_urls);
  770. $host_rule = preg_replace("#[\n\r]#", '', $host_rule);
  771. $host_rule = str_replace('.', "\\.", $host_rule);
  772. $host_rule = str_replace('/', "\\/", $host_rule);
  773. $arr = '';
  774. preg_match_all("#<a([^>]*)>(.*)<\/a>#iU", $body, $arr);
  775. if( is_array($arr[0]) )
  776. {
  777. $rparr = array();
  778. $tgarr = array();
  779. foreach($arr[0] as $i=>$v)
  780. {
  781. if( $host_rule != '' && preg_match('#'.$host_rule.'#i', $arr[1][$i]) )
  782. {
  783. continue;
  784. }
  785. else
  786. {
  787. $rparr[] = $v;
  788. $tgarr[] = $arr[2][$i];
  789. }
  790. }
  791. if( !empty($rparr) )
  792. {
  793. $body = str_replace($rparr, $tgarr, $body);
  794. }
  795. }
  796. $arr = $rparr = $tgarr = '';
  797. return $body;
  798. }
  799. /**
  800. * 获取文本中首张图片地址
  801. * @param [type] $content
  802. * @return [type]
  803. */
  804. function getfirstpic($content)
  805. {
  806. if(preg_match_all("/(src)=([\"|']?)([^ \"'>]+\.(gif|jpg|jpeg|bmp|png))\\2/i", $content, $matches))
  807. {
  808. $file=$_SERVER['DOCUMENT_ROOT'].$matches[3][0];
  809. if(file_exists($file))
  810. {
  811. return $matches[3][0];
  812. }
  813. }
  814. else
  815. {
  816. return false;
  817. }
  818. }
  819. /**
  820. * 更新配置文件 / 更新系统缓存
  821. */
  822. function updateconfig()
  823. {
  824. $str_tmp="<?php\r\n"; //得到php的起始符。$str_tmp将累加
  825. $str_end="?>"; //php结束符
  826. $str_tmp.="//全站配置文件\r\n";
  827. $param = db("sysconfig")->select();
  828. foreach($param as $row)
  829. {
  830. $str_tmp .= 'define("'.$row['varname'].'","'.$row['value'].'"); // '.$row['info']."\r\n";
  831. }
  832. $str_tmp .= $str_end; //加入结束符
  833. //保存文件
  834. $sf = APP_PATH."common.inc.php"; //文件名
  835. $fp = fopen($sf,"w"); //写方式打开文件
  836. fwrite($fp,$str_tmp); //存入内容
  837. fclose($fp); //关闭文件
  838. }
  839. //清空文件夹
  840. function dir_delete($dir)
  841. {
  842. //$dir = dir_path($dir);
  843. if (!is_dir($dir)) return FALSE;
  844. $handle = opendir($dir); //打开目录
  845. while(($file = readdir($handle)) !== false)
  846. {
  847. if($file == '.' || $file == '..')continue;
  848. $d = $dir.DIRECTORY_SEPARATOR.$file;
  849. is_dir($d) ? dir_delete($d) : @unlink($d);
  850. }
  851. closedir($handle);
  852. return @rmdir($dir);
  853. }
  854. //对象转数组
  855. function object_to_array($object, $get=0)
  856. {
  857. $res = '';
  858. if(!empty($object))
  859. {
  860. if($get==0)
  861. {
  862. foreach($object as $key=>$value)
  863. {
  864. $res[$key] = (array)$value;
  865. }
  866. }
  867. elseif($get==1)
  868. {
  869. $res = (array)$object;
  870. }
  871. }
  872. return $res;
  873. }
  874. /**
  875. * 操作错误跳转的快捷方法
  876. * @access protected
  877. * @param string $msg 错误信息
  878. * @param string $url 页面跳转地址
  879. * @param mixed $time 当数字时指定跳转时间
  880. * @return void
  881. */
  882. function error_jump($msg='', $url='', $time=3)
  883. {
  884. if ($url=='' && isset($_SERVER["HTTP_REFERER"]))
  885. {
  886. $url = $_SERVER["HTTP_REFERER"];
  887. }
  888. if(!headers_sent())
  889. {
  890. header("Location:".route('admin_jump')."?error=$msg&url=$url&time=$time");
  891. exit();
  892. }
  893. else
  894. {
  895. $str = "<meta http-equiv='Refresh' content='URL=".route('admin_jump')."?error=$msg&url=$url&time=$time"."'>";
  896. exit($str);
  897. }
  898. }
  899. /**
  900. * 操作成功跳转的快捷方法
  901. * @access protected
  902. * @param string $msg 提示信息
  903. * @param string $url 页面跳转地址
  904. * @param mixed $time 当数字时指定跳转时间
  905. * @return void
  906. */
  907. function success_jump($msg='', $url='', $time=1)
  908. {
  909. if ($url=='' && isset($_SERVER["HTTP_REFERER"]))
  910. {
  911. $url = $_SERVER["HTTP_REFERER"];
  912. }
  913. if(!headers_sent())
  914. {
  915. header("Location:".route('admin_jump')."?message=$msg&url=$url&time=$time");
  916. exit();
  917. }
  918. else
  919. {
  920. $str = "<meta http-equiv='Refresh' content='URL=".route('admin_jump')."?message=$msg&url=$url&time=$time"."'>";
  921. exit($str);
  922. }
  923. }
  924. //获取表所有字段
  925. function get_table_columns($table, $field='')
  926. {
  927. $res = \Illuminate\Support\Facades\Schema::getColumnListing($table);
  928. if($field != '')
  929. {
  930. //判断字段是否在表里面
  931. if(in_array($field, $res))
  932. {
  933. return true;
  934. }
  935. else
  936. {
  937. return false;
  938. }
  939. }
  940. return $res;
  941. }