Cms.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  1. <?php
  2. namespace addons\cms\taglib;
  3. use fast\Random;
  4. use think\Cache;
  5. use think\template\TagLib;
  6. class Cms extends TagLib
  7. {
  8. /**
  9. * 定义标签列表
  10. */
  11. protected $tags = [
  12. // 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
  13. 'channel' => ['attr' => 'name', 'close' => 0],
  14. 'archives' => ['attr' => 'name', 'close' => 0],
  15. 'special' => ['attr' => 'name', 'close' => 0],
  16. 'tag' => ['attr' => 'name', 'close' => 0],
  17. //@deprecated use tag instead
  18. 'tags' => ['attr' => 'name', 'close' => 0],
  19. 'block' => ['attr' => 'id,name,field', 'close' => 0],
  20. 'config' => ['attr' => 'name', 'close' => 0],
  21. 'page' => ['attr' => 'name', 'close' => 0],
  22. 'diyform' => ['attr' => 'name', 'close' => 0],
  23. 'nav' => ['attr' => 'name,maxlevel,condition,cache', 'close' => 0],
  24. 'execute' => ['attr' => 'sql,bind', 'close' => 0],
  25. 'query' => ['attr' => 'id,empty,key,mod,sql,cache,bind', 'close' => 1],
  26. 'prevnext' => ['attr' => 'id,empty,type,archives,channel,condition', 'close' => 1],
  27. 'blocklist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,imgwidth,imgheight,condition,name,paginate', 'close' => 1],
  28. 'commentlist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,condition,type,aid,pid,fragment', 'close' => 1],
  29. 'breadcrumb' => ['attr' => 'id,empty,key,mod', 'close' => 1],
  30. 'channellist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,imgwidth,imgheight,condition,model,type,typeid,field,paginate', 'close' => 1],
  31. 'arclist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,imgwidth,imgheight,condition,model,type,special,field,flag,channel,tags,addon,paginate', 'close' => 1],
  32. 'speciallist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,imgwidth,imgheight,condition,flag,paginate', 'close' => 1],
  33. 'taglist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,condition,type,paginate', 'close' => 1],
  34. //@deprecated use taglist instead
  35. 'tagslist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,condition,type,paginate', 'close' => 1],
  36. 'userlist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,imgwidth,imgheight,condition,name,paginate', 'close' => 1],
  37. 'diydatalist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,condition,diyform,paginate', 'close' => 1],
  38. 'pagefilter' => ['attr' => 'id,empty,key,mod', 'close' => 1],
  39. 'pageorder' => ['attr' => 'id,empty,key,mod', 'close' => 1],
  40. 'pagelist' => ['attr' => 'id,empty,key,mod,imgwidth,imgheight,paginate', 'close' => 1],
  41. 'spagelist' => ['attr' => 'id,row,limit,empty,key,mod,cache,orderby,orderway,imgwidth,imgheight,condition,type,paginate', 'close' => 1],
  42. 'spageinfo' => ['attr' => 'id,sid,empty,cache,imgwidth,imgheight,orderby,orderway,condition', 'close' => 1],
  43. 'pageinfo' => ['attr' => 'type', 'close' => 0],
  44. 'commentinfo' => ['attr' => 'type', 'close' => 0],
  45. ];
  46. public function tagBreadcrumb($tag, $content)
  47. {
  48. $id = isset($tag['id']) ? $tag['id'] : 0;
  49. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  50. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  51. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  52. $var = Random::alnum(10);
  53. $parse = '<?php ';
  54. $parse .= '$__' . $var . '__ = \addons\cms\model\Channel::getBreadcrumb($__CHANNEL__??[], $__ARCHIVES__??[], $__TAGS__??[], $__PAGE__??[], $__DIYFORM__??[]);';
  55. $parse .= ' ?>';
  56. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  57. $parse .= $content;
  58. $parse .= '{/volist}';
  59. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  60. return $parse;
  61. }
  62. public function tagExecute($tag, $content)
  63. {
  64. $sql = isset($tag['sql']) ? $tag['sql'] : '';
  65. $bind = isset($tag['bind']) ? $tag['bind'] : '';
  66. $bind = explode(',', $bind);
  67. $sql = addslashes($sql);
  68. $parse = '<?php ';
  69. $parse .= '\think\Db::execute(\'' . $sql . '\', ' . json_encode($bind) . ');';
  70. $parse .= ' ?>';
  71. return $parse;
  72. }
  73. public function tagQuery($tag, $content)
  74. {
  75. $id = isset($tag['id']) ? $tag['id'] : 'item';
  76. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  77. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  78. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  79. $params = [];
  80. foreach ($tag as $k => & $v) {
  81. $origin = $v;
  82. if (in_array($k, ['bind'])) {
  83. $this->autoBuildVar($v);
  84. }
  85. $v = $origin == $v ? '"' . $v . '"' : $v;
  86. $params[] = '"' . $k . '"=>' . $v;
  87. }
  88. $var = Random::alnum(10);
  89. $parse = '<?php ';
  90. $parse .= '$__' . $var . '__ = \addons\cms\model\Archives::getQueryList([' . implode(',', $params) . ']);';
  91. $parse .= ' ?>';
  92. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  93. $parse .= $content;
  94. $parse .= '{/volist}';
  95. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  96. return $parse;
  97. }
  98. public function tagPrevNext($tag, $content)
  99. {
  100. $id = isset($tag['id']) ? $tag['id'] : 'prevnext';
  101. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  102. $params = [];
  103. foreach ($tag as $k => & $v) {
  104. $origin = $v;
  105. if (in_array($k, ['archives', 'channel', 'condition'])) {
  106. $this->autoBuildVar($v);
  107. }
  108. $v = $origin == $v ? '"' . $v . '"' : $v;
  109. $params[] = '"' . $k . '"=>' . $v;
  110. }
  111. $parse = '<?php ';
  112. $parse .= '$' . $id . ' = \addons\cms\model\Archives::getPrevNext([' . implode(',', $params) . ']);';
  113. $parse .= 'if($' . $id . '):';
  114. $parse .= ' ?>';
  115. $parse .= $content;
  116. $parse .= '<?php else:?>';
  117. $parse .= $empty;
  118. $parse .= '<?php endif;?>';
  119. return $parse;
  120. }
  121. public function tagChannel($tag)
  122. {
  123. return '{$__CHANNEL__.' . $tag['name'] . '}';
  124. }
  125. public function tagArchives($tag)
  126. {
  127. return '{$__ARCHIVES__.' . $tag['name'] . '}';
  128. }
  129. public function tagSpecial($tag)
  130. {
  131. return '{$__SPECIAL__.' . $tag['name'] . '}';
  132. }
  133. public function tagPage($tag)
  134. {
  135. return '{$__PAGE__.' . $tag['name'] . '}';
  136. }
  137. public function tagDiyform($tag)
  138. {
  139. return '{$__DIYFORM__.' . $tag['name'] . '}';
  140. }
  141. /**
  142. * @deprecated use tagTag instead
  143. */
  144. public function tagTags($tag)
  145. {
  146. return $this->tagTag($tag);
  147. }
  148. public function tagTag($tag)
  149. {
  150. return '{$__TAG__.' . $tag['name'] . '}';
  151. }
  152. public function tagBlock($tag)
  153. {
  154. return \addons\cms\model\Block::getBlockContent($tag);
  155. }
  156. public function tagNav($tag)
  157. {
  158. $params = [];
  159. foreach ($tag as $k => & $v) {
  160. $origin = $v;
  161. if (in_array($k, ['condition'])) {
  162. $this->autoBuildVar($v);
  163. }
  164. $v = $origin == $v ? '"' . $v . '"' : $v;
  165. $params[] = '"' . $k . '"=>' . $v;
  166. }
  167. $var = Random::alnum(10);
  168. $parse = '<?php ';
  169. $parse .= '$__' . $var . '__ = \addons\cms\model\Channel::getNav(isset($__CHANNEL__)?$__CHANNEL__:[], [' . implode(',', $params) . ']);';
  170. $parse .= ' ?>';
  171. $parse .= '{$__' . $var . '__}';
  172. return $parse;
  173. }
  174. public function tagBlocklist($tag, $content)
  175. {
  176. $id = $tag['id'];
  177. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  178. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  179. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  180. $params = [];
  181. foreach ($tag as $k => & $v) {
  182. $origin = $v;
  183. if (in_array($k, ['condition'])) {
  184. $this->autoBuildVar($v);
  185. }
  186. $v = $origin == $v ? '"' . $v . '"' : $v;
  187. $params[] = '"' . $k . '"=>' . $v;
  188. }
  189. $var = Random::alnum(10);
  190. $parse = '<?php ';
  191. $parse .= '$__' . $var . '__ = \addons\cms\model\Block::getBlockList([' . implode(',', $params) . ']);';
  192. $parse .= ' ?>';
  193. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  194. $parse .= $content;
  195. $parse .= '{/volist}';
  196. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  197. return $parse;
  198. }
  199. public function tagPagefilter($tag, $content)
  200. {
  201. $id = $tag['id'];
  202. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  203. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  204. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  205. $params = [];
  206. foreach ($tag as $k => & $v) {
  207. $origin = $v;
  208. if (in_array($k, ['condition'])) {
  209. $this->autoBuildVar($v);
  210. }
  211. $v = $origin == $v ? '"' . $v . '"' : $v;
  212. $params[] = '"' . $k . '"=>' . $v;
  213. }
  214. $var = Random::alnum(10);
  215. $parse = '<?php ';
  216. $parse .= '$__' . $var . '__ = $__FILTERLIST__;';
  217. $parse .= ' ?>';
  218. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  219. $parse .= $content;
  220. $parse .= '{/volist}';
  221. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  222. return $parse;
  223. }
  224. public function tagPageorder($tag, $content)
  225. {
  226. $id = $tag['id'];
  227. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  228. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  229. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  230. $params = [];
  231. foreach ($tag as $k => & $v) {
  232. $origin = $v;
  233. if (in_array($k, ['condition'])) {
  234. $this->autoBuildVar($v);
  235. }
  236. $v = $origin == $v ? '"' . $v . '"' : $v;
  237. $params[] = '"' . $k . '"=>' . $v;
  238. }
  239. $var = Random::alnum(10);
  240. $parse = '<?php ';
  241. $parse .= '$__' . $var . '__ = $__ORDERLIST__;';
  242. $parse .= ' ?>';
  243. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  244. $parse .= $content;
  245. $parse .= '{/volist}';
  246. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  247. return $parse;
  248. }
  249. public function tagPagelist($tag, $content)
  250. {
  251. $id = $tag['id'];
  252. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  253. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  254. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  255. $params = [];
  256. foreach ($tag as $k => & $v) {
  257. $origin = $v;
  258. if (in_array($k, ['condition'])) {
  259. $this->autoBuildVar($v);
  260. }
  261. $v = $origin == $v ? '"' . $v . '"' : $v;
  262. $params[] = '"' . $k . '"=>' . $v;
  263. }
  264. $var = Random::alnum(10);
  265. $parse = '<?php ';
  266. $parse .= '$__' . $var . '__ = $__PAGELIST__;';
  267. $parse .= ' ?>';
  268. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  269. $parse .= $content;
  270. $parse .= '{/volist}';
  271. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  272. return $parse;
  273. }
  274. public function tagSpagelist($tag, $content)
  275. {
  276. $id = $tag['id'];
  277. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  278. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  279. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  280. $params = [];
  281. foreach ($tag as $k => & $v) {
  282. $origin = $v;
  283. if (in_array($k, ['condition'])) {
  284. $this->autoBuildVar($v);
  285. }
  286. $v = $origin == $v ? '"' . $v . '"' : $v;
  287. $params[] = '"' . $k . '"=>' . $v;
  288. }
  289. $var = Random::alnum(10);
  290. $parse = '<?php ';
  291. $parse .= '$__' . $var . '__ = \addons\cms\model\Page::getPageList([' . implode(',', $params) . ']);';
  292. $parse .= ' ?>';
  293. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  294. $parse .= $content;
  295. $parse .= '{/volist}';
  296. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  297. return $parse;
  298. }
  299. public function tagSpageinfo($tag, $content)
  300. {
  301. $id = $tag['id'];
  302. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  303. $params = [];
  304. foreach ($tag as $k => & $v) {
  305. $origin = $v;
  306. if (in_array($k, ['condition'])) {
  307. $this->autoBuildVar($v);
  308. }
  309. $v = $origin == $v ? '"' . $v . '"' : $v;
  310. $params[] = '"' . $k . '"=>' . $v;
  311. }
  312. $parse = '<?php ';
  313. $parse .= '$' . $id . ' = \addons\cms\model\Page::getPageInfo([' . implode(',', $params) . ']);';
  314. $parse .= ' ?>';
  315. $parse .= '{if $' . $id . '}';
  316. $parse .= $content;
  317. $parse .= '{else /}';
  318. $parse .= '{$' . $empty . '}';
  319. $parse .= '{/if}';
  320. return $parse;
  321. }
  322. public function tagPageinfo($tag, $content)
  323. {
  324. $params = [];
  325. foreach ($tag as $k => & $v) {
  326. $origin = $v;
  327. if (in_array($k, ['condition'])) {
  328. $this->autoBuildVar($v);
  329. }
  330. $v = $origin == $v ? '"' . $v . '"' : $v;
  331. $params[] = '"' . $k . '"=>' . $v;
  332. }
  333. $parse = '{$__PAGELIST__->render([' . implode(',', $params) . '])}';
  334. return $parse;
  335. }
  336. /**
  337. * 标签列表
  338. * @param array $tag
  339. * @param string $content
  340. * @return string
  341. */
  342. public function tagTaglist($tag, $content)
  343. {
  344. $id = $tag['id'];
  345. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  346. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  347. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  348. $params = [];
  349. foreach ($tag as $k => & $v) {
  350. $origin = $v;
  351. if (in_array($k, ['condition'])) {
  352. $this->autoBuildVar($v);
  353. }
  354. $v = $origin == $v ? '"' . $v . '"' : $v;
  355. $params[] = '"' . $k . '"=>' . $v;
  356. }
  357. $var = Random::alnum(10);
  358. $parse = '<?php ';
  359. $parse .= '$__' . $var . '__ = \addons\cms\model\Tag::getTagList([' . implode(',', $params) . ']);';
  360. $parse .= ' ?>';
  361. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  362. $parse .= $content;
  363. $parse .= '{/volist}';
  364. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  365. return $parse;
  366. }
  367. /**
  368. * @deprecated use tagTaglist instead
  369. */
  370. public function tagTagslist($tag, $content)
  371. {
  372. return $this->tagTaglist($tag, $content);
  373. }
  374. /**
  375. * 评论列表
  376. * @param array $tag
  377. * @param string $content
  378. * @return string
  379. */
  380. public function tagCommentlist($tag, $content)
  381. {
  382. $id = $tag['id'];
  383. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  384. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  385. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  386. $params = [];
  387. foreach ($tag as $k => & $v) {
  388. $origin = $v;
  389. if (in_array($k, ['condition'])) {
  390. $this->autoBuildVar($v);
  391. }
  392. $v = $origin == $v ? '"' . $v . '"' : $v;
  393. $params[] = '"' . $k . '"=>' . $v;
  394. }
  395. $parse = '<?php ';
  396. $parse .= '$__COMMENTLIST__ = \addons\cms\model\Comment::getCommentList([' . implode(',', $params) . ']);';
  397. $parse .= ' ?>';
  398. $parse .= '{volist name="$__COMMENTLIST__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  399. $parse .= $content;
  400. $parse .= '{/volist}';
  401. $parse .= '{php}$__LASTLIST__=$__COMMENTLIST__;{/php}';
  402. return $parse;
  403. }
  404. /**
  405. * 评论分页
  406. * @param array $tag
  407. * @param string $content
  408. * @return string
  409. */
  410. public function tagCommentinfo($tag, $content)
  411. {
  412. $params = [];
  413. foreach ($tag as $k => & $v) {
  414. $origin = $v;
  415. if (in_array($k, ['condition'])) {
  416. $this->autoBuildVar($v);
  417. }
  418. $v = $origin == $v ? '"' . $v . '"' : $v;
  419. $params[] = '"' . $k . '"=>' . $v;
  420. }
  421. $parse = '{$__COMMENTLIST__->render([' . implode(',', $params) . '])}';
  422. return $parse;
  423. }
  424. /**
  425. * 栏目标签
  426. * @param array $tag
  427. * @param string $content
  428. * @return string
  429. */
  430. public function tagChannellist($tag, $content)
  431. {
  432. $id = $tag['id'];
  433. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  434. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  435. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  436. $paginate = !isset($tag['paginate']) ? false : $tag['paginate'];
  437. $params = [];
  438. foreach ($tag as $k => & $v) {
  439. $origin = $v;
  440. if (in_array($k, ['typeid', 'model', 'condition', 'special'])) {
  441. $this->autoBuildVar($v);
  442. }
  443. $v = $origin == $v ? '"' . $v . '"' : $v;
  444. $params[] = '"' . $k . '"=>' . $v;
  445. }
  446. $var = Random::alnum(10);
  447. $parse = '<?php ';
  448. $parse .= '$__' . $var . '__ = \addons\cms\model\Channel::getChannelList([' . implode(',', $params) . ']);';
  449. $parse .= ' ?>';
  450. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  451. $parse .= $content;
  452. $parse .= '{/volist}';
  453. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  454. if ($paginate) {
  455. $parse .= '{php}$__PAGELIST__=$__' . $var . '__;{/php}';
  456. }
  457. return $parse;
  458. }
  459. public function tagArclist($tag, $content)
  460. {
  461. $id = $tag['id'];
  462. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  463. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  464. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  465. $params = [];
  466. foreach ($tag as $k => & $v) {
  467. $origin = $v;
  468. if (in_array($k, ['channel', 'model', 'condition', 'tags'])) {
  469. $this->autoBuildVar($v);
  470. }
  471. $v = $origin == $v ? '"' . $v . '"' : $v;
  472. $params[] = '"' . $k . '"=>' . $v;
  473. }
  474. $var = Random::alnum(10);
  475. $parse = '<?php ';
  476. $parse .= '$__' . $var . '__ = \addons\cms\model\Archives::getArchivesList([' . implode(',', $params) . ']);';
  477. $parse .= ' ?>';
  478. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  479. $parse .= $content;
  480. $parse .= '{/volist}';
  481. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  482. return $parse;
  483. }
  484. /**
  485. * 专题列表
  486. * @param array $tag
  487. * @param string $content
  488. * @return string
  489. */
  490. public function tagSpeciallist($tag, $content)
  491. {
  492. $id = $tag['id'];
  493. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  494. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  495. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  496. $params = [];
  497. foreach ($tag as $k => & $v) {
  498. $origin = $v;
  499. if (in_array($k, ['condition'])) {
  500. $this->autoBuildVar($v);
  501. }
  502. $v = $origin == $v ? '"' . $v . '"' : $v;
  503. $params[] = '"' . $k . '"=>' . $v;
  504. }
  505. $var = Random::alnum(10);
  506. $parse = '<?php ';
  507. $parse .= '$__' . $var . '__ = \addons\cms\model\Special::getSpecialList([' . implode(',', $params) . ']);';
  508. $parse .= ' ?>';
  509. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  510. $parse .= $content;
  511. $parse .= '{/volist}';
  512. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  513. return $parse;
  514. }
  515. public function tagUserlist($tag, $content)
  516. {
  517. $id = $tag['id'];
  518. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  519. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  520. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  521. $params = [];
  522. foreach ($tag as $k => & $v) {
  523. $origin = $v;
  524. if (in_array($k, ['condition'])) {
  525. $this->autoBuildVar($v);
  526. }
  527. $v = $origin == $v ? '"' . $v . '"' : $v;
  528. $params[] = '"' . $k . '"=>' . $v;
  529. }
  530. $var = Random::alnum(10);
  531. $parse = '<?php ';
  532. $parse .= '$__' . $var . '__ = \addons\cms\model\User::getUserList([' . implode(',', $params) . ']);';
  533. $parse .= ' ?>';
  534. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  535. $parse .= $content;
  536. $parse .= '{/volist}';
  537. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  538. return $parse;
  539. }
  540. public function tagDiydatalist($tag, $content)
  541. {
  542. $id = $tag['id'];
  543. $empty = isset($tag['empty']) ? $tag['empty'] : '';
  544. $key = !empty($tag['key']) ? $tag['key'] : 'i';
  545. $mod = isset($tag['mod']) ? $tag['mod'] : '2';
  546. $params = [];
  547. foreach ($tag as $k => & $v) {
  548. $origin = $v;
  549. if (in_array($k, ['condition'])) {
  550. $this->autoBuildVar($v);
  551. }
  552. $v = $origin == $v ? '"' . $v . '"' : $v;
  553. $params[] = '"' . $k . '"=>' . $v;
  554. }
  555. $var = Random::alnum(10);
  556. $parse = '<?php ';
  557. $parse .= '$__' . $var . '__ = \addons\cms\model\Diyform::getDiydataList([' . implode(',', $params) . ']);';
  558. $parse .= ' ?>';
  559. $parse .= '{volist name="$__' . $var . '__" id="' . $id . '" empty="' . $empty . '" key="' . $key . '" mod="' . $mod . '"}';
  560. $parse .= $content;
  561. $parse .= '{/volist}';
  562. $parse .= '{php}$__LASTLIST__=$__' . $var . '__;{/php}';
  563. return $parse;
  564. }
  565. public function tagConfig($tag)
  566. {
  567. $name = $tag['name'];
  568. $parse = '<?php ';
  569. $parse .= 'echo \think\Config::get("' . $name . '");';
  570. $parse .= ' ?>';
  571. return $parse;
  572. }
  573. public function autoBuildVar(&$name)
  574. {
  575. //如果是字符串则特殊处理
  576. if (preg_match("/^('|\")(.*)('|\")\$/i", $name, $matches)) {
  577. $quote = $matches[1] == '"' ? "'" : '"';
  578. $name = $quote . $matches[2] . $quote;
  579. return $name;
  580. }
  581. return parent::autoBuildVar($name);
  582. }
  583. }