国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
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.

261 line
11KB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
  6. <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
  7. <title>{dede:field.title/}-{dede:global.cfg_webname/}</title>
  8. <meta name="keywords" content="{dede:field.keywords/}">
  9. <meta name="description" content="{dede:field.description function='html2text(@me)'/}">
  10. <link rel="stylesheet" href="{dede:global.cfg_cmsurl/}/static/web/font/css/font-awesome.min.css">
  11. <link rel="stylesheet" href="{dede:global.cfg_cmsurl/}/static/web/css/bootstrap.min.css">
  12. <link rel="stylesheet" href="{dede:global.cfg_cmsurl/}/static/web/css/style.css">
  13. <link rel="shortcut icon" href="{dede:global.cfg_cmsurl/}/static/web/img/favicon.ico">
  14. <link rel="stylesheet" href="{dede:global.cfg_cmsurl/}/static/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css">
  15. </head>
  16. <body class="body-bg">
  17. {dede:include filename='top.htm'/}
  18. {dede:include filename='head.htm'/}
  19. <div class="container py-3">
  20. <div class="row">
  21. <div class="col-md-12">
  22. <nav aria-label="breadcrumb">
  23. <ol class="breadcrumb mb-0">
  24. <li class="breadcrumb-item">当前位置</li>
  25. {dede:field name='position'/}
  26. </ol>
  27. </nav>
  28. </div>
  29. </div>
  30. </div>
  31. <main class="container py-3">
  32. <div class="row">
  33. <div class="col-md-9">
  34. <article class="article-main bg-white shadow-sm rounded p-3">
  35. <h2>{dede:field.title/}</h2>
  36. <div class="article-meta">
  37. <a href="{dede:field.userurl/}" target="_blank"><span><img src="{dede:field.face/}" class="user-img-xs mr-1">{dede:field.uname/}</span></a>
  38. <span><i class="fa fa-calendar mr-1"></i>{dede:field.pubdate function="MyDate('Y-m-d',@me)"/}</span>
  39. <span><i class="fa fa-globe mr-1"></i>{dede:field.source/}</span>
  40. <span><i class="fa fa-eye mr-1"></i><script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field name='id'/}&mid={dede:field name='mid'/}&cid={dede:field name='channel'/}"></script>次</span>
  41. </div>
  42. <div class="py-3">{dede:field.body/}</div>
  43. <div class="py-3">作者:{dede:adminname/}</div>
  44. <nav class="py-3">
  45. <ul class="pagination justify-content-center">{dede:pagebreak/}</ul>
  46. </nav>
  47. <div class="alert alert-info mt-3">您会看到这个提示,因为系统无法识别某栏目的模型信息或者您新建模型后,没为模型设计单独的模板,不同模型的文档浏览页的模板为:article_模型名字标识.htm更多的信息您可以在栏目模型管理的地方查看</div>
  48. {dede:fieldlist}
  49. <table class="table">
  50. <tr>
  51. <td width="30%" align="center" bgcolor="#FBFEF5">
  52. [field:name/] 文档:<br>
  53. 模板调用标记:<br>
  54. <script>document.write("{" + "dede:field.[field:tagname/] /" + "}");</script>
  55. </td>
  56. <td width="70%">[field:value/]</td>
  57. </tr>
  58. </table>
  59. {/dede:fieldlist}
  60. <div class="py-3 row">
  61. <div class="col-md-4 prenext">
  62. <div class="pagination-previous mb-3">{dede:prenext get='pre'/}</div>
  63. <div class="pagination-next">{dede:prenext get='next'/}</div>
  64. </div>
  65. <div class="col-md-8">
  66. <div class="row actbox">
  67. <ul>
  68. <li><i class="fa fa-star-o mr-2"></i><a href="{dede:field name='phpurl'/}/stow.php?aid={dede:field.id/}" target="_blank">收藏</a></li>
  69. <li><i class="fa fa-bug mr-2"></i><a href="javascript:ErrorAddSave({dede:field.id/}, '{dede:field.title/}');">挑错</a></li>
  70. <li><i class="fa fa-thumbs-o-up mr-2"></i><a href="{dede:field name='phpurl'/}/recommend.php?aid={dede:field.id/}" target="_blank">推荐</a></li>
  71. <li><i class="fa fa-print mr-2"></i><a href="javascript:;" onclick="window.print();">打印</a></li>
  72. </ul>
  73. </div>
  74. </div>
  75. </div>
  76. {dede:include filename='widget_article_likes.htm'/}
  77. {dede:include filename='widget_article_feedback.htm'/}
  78. </article>
  79. </div>
  80. <aside class="col-md-3">
  81. <div class="pb-3">{dede:include filename='widget_search.htm'/}</div>
  82. <div class="py-3">{dede:include filename='widget_menu.htm'/}</div>
  83. <div class="pt-3">{dede:include filename='widget_hot.htm'/}</div>
  84. </aside>
  85. </div>
  86. </main>
  87. <script>const PHPURL = '{dede:field name="phpurl"/}';</script>
  88. {dede:include filename='foot.htm'/}
  89. <script src="{dede:global.cfg_cmsurl/}/static/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js"></script>
  90. <script>hljs.initHighlightingOnLoad();</script>
  91. <script>
  92. //获取顶踩数据
  93. function GetDigg(aid,cid) {
  94. let url = `{dede:global.cfg_phpurl/}/digg_ajax.php?id=${aid}&cid=${cid}&format=json`;
  95. $.get(url, function (data) {
  96. let reval = JSON.parse(data);
  97. if (reval.code === 200) {
  98. $("#goodpost").html(reval.data.goodpost);
  99. $("#badpost").html(reval.data.badpost);
  100. $("#goodper").css("width", `${reval.data.goodper}%`)
  101. $("#badper").css("width", `${reval.data.badper}%`)
  102. }
  103. })
  104. }
  105. function PostDigg(ftype, aid) {
  106. var saveid = GetCookie('diggid');
  107. if (saveid != null) {
  108. var saveids = saveid.split(',');
  109. var hasid = false;
  110. saveid = '';
  111. j = 1;
  112. for (i = saveids.length - 1; i >= 0; i--) {
  113. if (saveids[i] == aid && hasid) continue;
  114. else {
  115. if (saveids[i] == aid && !hasid) hasid = true;
  116. saveid += (saveid == '' ? saveids[i] : ',' + saveids[i]);
  117. j++;
  118. if (j == 20 && hasid) break;
  119. if (j == 19 && !hasid) break;
  120. }
  121. }
  122. if (hasid) { ShowMsg("您已经顶过该帖,请不要重复顶帖 "); return; }
  123. else saveid += ',' + aid;
  124. SetCookie('diggid', saveid, 1);
  125. }
  126. else {
  127. SetCookie('diggid', aid, 1);
  128. }
  129. let url = "{dede:global.cfg_phpurl/}/digg_ajax.php?action=" + ftype + "&id=" + aid + "&format=json&cid={dede:field.channel/}";
  130. $.get(url, function (data) {
  131. let reval = JSON.parse(data);
  132. if (reval.code === 200) {
  133. $("#goodpost").html(reval.data.goodpost);
  134. $("#badpost").html(reval.data.badpost);
  135. $("#goodper").css("width", `${reval.data.goodper}%`)
  136. $("#badper").css("width", `${reval.data.badper}%`)
  137. }
  138. });
  139. }
  140. GetDigg("{dede:field.id/}", "{dede:field.channel/}");
  141. //发表评论
  142. function SendFeedback() {
  143. let feedback = {
  144. action: "send",
  145. comtype: "comments",
  146. aid: "{dede:field name='id'/}",
  147. msg: $("#iptMsg").val(),
  148. username: $("#iptUsername").val(),
  149. validate: $("#iptValidate").val(),
  150. notuser: $("#iptAny").is(":checked") ? "1" : "",
  151. };
  152. $.post("{dede:field name='phpurl'/}/feedback.php", feedback, function (data) {
  153. let result = JSON.parse(data);
  154. if (result.code === 200) {
  155. ShowAlert("#feedback-alert", result.msg, "success");
  156. $("#iptMsg").val("");
  157. $("#iptValidate").val("");
  158. ($("#iptUsername").attr("disabled") !== "disabled") && $("#iptUsername").val("");
  159. $("#validateimg").attr("src", '{dede:global.cfg_cmspath/}/apps/vdimgck.php?' + new Date().getTime() + Math.round(Math.random() * 10000));
  160. } else {
  161. ShowAlert("#feedback-alert", `评论失败:${result.msg}`, "danger");
  162. $("#validateimg").attr("src", '{dede:global.cfg_cmspath/}/apps/vdimgck.php?' + new Date().getTime() + Math.round(Math.random() * 10000));
  163. }
  164. });
  165. }
  166. //进行回复,回复必须登录
  167. function SendReplyFeedback(fid) {
  168. let content = $(`._feedback_reply[for="${fid}"]`).find(".iptReplyContent").val();
  169. let reply = {
  170. action : "send",
  171. comtype : "reply",
  172. fid : fid,
  173. aid : "{dede:field name='id'/}",
  174. msg : content,
  175. }
  176. $.post("{dede:field name='phpurl'/}/feedback.php", reply, function (data) {
  177. let result = JSON.parse(data);
  178. if (result.code === 200) {
  179. ShowAlert(`._feedback_reply[for="${fid}"]`, result.msg, "success");
  180. } else {
  181. ShowAlert(`._feedback_reply[for="${fid}"]`, `评论失败:${result.msg}`, "danger");
  182. }
  183. })
  184. $(`._feedback_reply[for="${fid}"]`).find(".btn-send").attr("disabled", "disabled");
  185. }
  186. //回复某个评论
  187. function ReplyFeedback(fid) {
  188. let replyPannel = `<div class="form-group">
  189. <div class="input-group">
  190. <input type="text" class="form-control iptReplyContent">
  191. <button type="button" class="btn btn-success btn-send" onclick='SendReplyFeedback(${fid})'>评论</button>
  192. </div>
  193. </div>`;
  194. $.get("{dede:global.cfg_cmsurl/}/user/api.php?format=json", function(result) {
  195. if (result.code !== 200) {
  196. $(`._feedback_reply`).html("");
  197. ShowAlert(`._feedback_reply[for="${fid}"]`, '回复需要登录会员中心,您可以<a href="{dede:global.cfg_cmsurl/}/user/login.php">点击登录</a>后再来回复', 'warning', 5000);
  198. } else {
  199. $(`._feedback_reply`).html("");
  200. $(`._feedback_reply[for="${fid}"]`).html(replyPannel);
  201. }
  202. });
  203. $(`._feedback_reply[for="${fid}"]`).html('<i class="fa fa-spinner"></i>');
  204. }
  205. //加载回复评论
  206. function LoadReplyFeedbacks(fid) {
  207. $(`.feedback_replies[for="${fid}"]`).html('<i class="fa fa-spinner"></i>');
  208. $.get("{dede:field name='phpurl'/}/feedback.php", {
  209. "aid" : "{dede:field name='id'/}",
  210. "fid" : fid,
  211. }, function (data) {
  212. let result = JSON.parse(data);
  213. let tpl = `<div class="media py-3">
  214. <img src="~face~" class="face mr-3">
  215. <div class="media-body">
  216. <div class="feedback-infos pb-3">
  217. <div class="feedback-basic">
  218. <span>~username~</span>
  219. <span>~dtimestr~</span>
  220. </div>
  221. <div class="feedback-action">
  222. <a href="javascript:GoodFeedback(~id~, ~good~)">
  223. <i class="fa fa-thumbs-up"></i>
  224. <i id="feedbackGood~id~">~good~</i>
  225. </a>
  226. </div>
  227. </div>
  228. <div class="feedback-content">~msg~</div>
  229. </div>
  230. </div>`;
  231. if (result.code === 200) {
  232. $(`.feedback_replies[for="${fid}"]`).html("");
  233. for (let i = 0; i < result.data.length; i++) {
  234. const feedback = result.data[i];
  235. let rs = tpl;
  236. for (const key in feedback) {
  237. if (feedback.hasOwnProperty(key)) {
  238. rs = rs.replace(new RegExp(`~${key}~`,"gm"), feedback[key])
  239. }
  240. }
  241. $(`.feedback_replies[for="${fid}"]`).append(rs);
  242. }
  243. }
  244. })
  245. }
  246. //赞
  247. function GoodFeedback(fid, g) {
  248. let good = {
  249. action : "send",
  250. feedbacktype : "good",
  251. good : g,
  252. fid : fid,
  253. }
  254. $.post("{dede:field name='phpurl'/}/feedback.php", good, function (data) {
  255. let result = JSON.parse(data);
  256. $(`#feedbackGood${fid}`).html(result.data);
  257. })
  258. }
  259. </script>
  260. </body>
  261. </html>