show_download.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. {layout name="common/layout" /}
  2. <style>
  3. .entry-box .media-left {
  4. padding-right: 20px;
  5. }
  6. .entry-box .media-content {
  7. margin-top: 15px;
  8. color: #a1a0a0;
  9. font-size: 14px;
  10. }
  11. .entry-box .media-extend {
  12. margin-top: 15px;
  13. }
  14. .entry-box .media-object {
  15. width: 150px;
  16. height: 150px;
  17. }
  18. .download-num {
  19. border-bottom: 1px #e5e5e5 solid;
  20. margin-bottom: 30px;
  21. padding-bottom: 30px;
  22. color: #444;
  23. }
  24. .download-num .num {
  25. padding: 10px 0;
  26. font-size: 36px;
  27. font-weight: 700;
  28. text-align: center;
  29. height: 65px;
  30. }
  31. .download-num .text {
  32. font-size: 18px;
  33. line-height: 25px;
  34. text-align: center;
  35. color: #8e8f94;
  36. }
  37. .base-info h2 {
  38. font-size: 18px;
  39. margin-bottom: 20px;
  40. }
  41. .base-info .row {
  42. margin-bottom: 15px;
  43. font-size: 14px;
  44. }
  45. .base-info .row .col-xs-8 {
  46. text-align: right;
  47. }
  48. .base-info .link {
  49. color: #0084ff;
  50. }
  51. .screenshots-box {
  52. margin-top: 30px;
  53. position: relative;
  54. }
  55. .swiper-container .swiper-wrapper .swiper-slide {
  56. width: auto;
  57. cursor: pointer;
  58. height: 400px;
  59. border-radius: 5px;
  60. border: 1px solid rgba(0, 0, 0, 0.1);
  61. margin-right: 20px;
  62. }
  63. .swiper-container .swiper-wrapper .swiper-slide img {
  64. height: 100%;
  65. border-radius: 5px;
  66. }
  67. .screenshots-box > h2, .download-box > h2, .intro-box > h2, .history-box > h2 {
  68. font-size: 18px;
  69. color: #444;
  70. }
  71. .intro-box {
  72. line-height: 30px;
  73. }
  74. .intro-box img {
  75. max-width: 100%;
  76. }
  77. </style>
  78. <div class="container" id="content-container">
  79. <div class="row">
  80. <main class="col-md-8">
  81. <div class="panel panel-default article-content">
  82. <div class="panel-heading">
  83. <ol class="breadcrumb">
  84. <!-- S 面包屑导航 -->
  85. {cms:breadcrumb id="item"}
  86. <li><a href="{$item.url}">{$item.name}</a></li>
  87. {/cms:breadcrumb}
  88. <!-- E 面包屑导航 -->
  89. </ol>
  90. </div>
  91. <div class="panel-body">
  92. <div class="entry-box mt-4">
  93. <div class="media-left">
  94. <div style="width:120px;height:120px;">
  95. <div class="embed-responsive embed-responsive-square">
  96. <img class="embed-responsive-image" src="{cms:archives name='image|cdnurl'}">
  97. </div>
  98. </div>
  99. </div>
  100. <div class="media-body">
  101. <h2 class="media-heading" {if $__ARCHIVES__.style}style="{$__ARCHIVES__.style_text}" {/if}>{cms:archives name="title" /}</h2>
  102. <div class="media-content">
  103. {cms:archives name="description" /}
  104. </div>
  105. <div class="media-extend">
  106. <a href="#download" class="btn btn-primary btn-download-now"><i class="fa fa-download"></i> {:$__ARCHIVES__.price>0?'立即下载':'免费下载'}</a>
  107. </div>
  108. </div>
  109. </div>
  110. {if isset($__ARCHIVES__.screenshots) && $__ARCHIVES__.screenshots}
  111. <div class="screenshots-box">
  112. <h2>预览截图</h2>
  113. <div class="swiper-container">
  114. <div class="swiper-wrapper">
  115. {foreach name=":explode(',', $__ARCHIVES__.screenshots)" id="item"}
  116. <div class="swiper-slide">
  117. <img itemprop="screenshot" layer-src="{$item|cdnurl}" src="{$item|cdnurl}"/>
  118. </div>
  119. {/foreach}
  120. </div>
  121. </div>
  122. <div class="swiper-button-prev"></div>
  123. <div class="swiper-button-next"></div>
  124. </div>
  125. {/if}
  126. <div class="intro-box">
  127. <h2>应用介绍</h2>
  128. <!-- S 正文 -->
  129. <p>
  130. {cms:archives name="content" /}
  131. </p>
  132. <!-- E 正文 -->
  133. </div>
  134. <div class="copyright-box alert alert-warning"><p>©软件著作权归作者所有。本站所有软件均来源于网络,仅供学习使用,请支持正版!</p>
  135. <p>
  136. 转载请注明出处:
  137. <a href="{cms:config name='site.indexurl' /}">{cms:config name="site.name" /}</a> »
  138. <a href="{cms:archives name='fullurl' /}">{cms:archives name="title" /}</a>
  139. </p>
  140. </div>
  141. {include file="common/donate" /}
  142. {include file="common/share" type="archives" image="__ARCHIVES__.image" aid="__ARCHIVES__.id"}
  143. <div class="clearfix"></div>
  144. </div>
  145. </div>
  146. <div class="panel panel-default" id="download">
  147. <div class="panel-heading">
  148. <h3 class="panel-title">立即下载</h3>
  149. </div>
  150. <div class="panel-body">
  151. <!-- S 下载按钮 -->
  152. <div class="">
  153. <!--@formatter:off-->
  154. {if $__ARCHIVES__.ispaid}
  155. {if isset($__ARCHIVES__.downloadurl)}
  156. {foreach name="$__ARCHIVES__.downloadurl_list" id="item"}
  157. <a href="{$item.url}" class="btn btn-primary btn-download" target="_blank" data-url="{$item.url}" data-id="{cms:archives name='id'/}" data-clipboard-text="{$item.password}">{$item.title}下载</a>
  158. {/foreach}
  159. {/if}
  160. {else /}
  161. {if isset($user.vip) && $__CHANNEL__.vip>0 && $user.vip<$__CHANNEL__.vip}
  162. <div class="alert alert-danger">
  163. <strong>温馨提示!</strong> 升级 <b>VIP {$__CHANNEL__.vip}</b> 免费下载,你当前 <b>VIP {$user.vip|default=0}</b>
  164. <div class="mt-3">
  165. <a href="{:url('index/vip/viplist')}" target="_blank" class="btn btn-warning"><i class="fa fa-diamond"></i> 升级VIP {$__CHANNEL__.vip}</a>
  166. </div>
  167. </div>
  168. {/if}
  169. {if $__ARCHIVES__.price>0}
  170. <div class="alert alert-danger">
  171. <strong>温馨提示!</strong> 你需要支付 <b>¥{cms:archives name='price' /}</b> 元后才可以下载
  172. <div class="mt-3">
  173. {include file="common/paytype" /}
  174. </div>
  175. </div>
  176. {/if}
  177. {/if}
  178. <!--@formatter:on-->
  179. </div>
  180. <!-- E 下载按钮 -->
  181. </div>
  182. </div>
  183. <div class="panel panel-default">
  184. <div class="panel-heading">
  185. <h3 class="panel-title">相关下载</h3>
  186. </div>
  187. <div class="panel-body">
  188. <ul class="list-unstyled download-list">
  189. {cms:arclist id="item" tags="__ARCHIVES__.tags" model="__ARCHIVES__.model_id" limit="6" condition="`id`!=$__ARCHIVES__->id"}
  190. <li>
  191. <a href="{$item.url}" class="link img-zoom">
  192. <div class="embed-responsive embed-responsive-square">
  193. <img src="{$item.image}" class="embed-responsive-item">
  194. </div>
  195. <p>{$item.title}</p>
  196. </a>
  197. <em>{$item.channel.name}</em>
  198. <a href="{$item.url}" class="btn btn-primary">立即下载</a>
  199. </li>
  200. {/cms:arclist}
  201. </ul>
  202. </div>
  203. </div>
  204. <div class="panel panel-default" id="comments">
  205. <div class="panel-heading">
  206. <h3 class="panel-title">{:__('Comment list')}
  207. <small>共有 <span>{cms:archives name="comments" /}</span> 条评论</small>
  208. </h3>
  209. </div>
  210. <div class="panel-body">
  211. <!--@formatter:off-->
  212. {if $__ARCHIVES__.iscomment}
  213. {include file="common/comment" type="archives" aid="__ARCHIVES__.id"}
  214. {else/}
  215. <div class="text-muted text-center">评论功能已关闭</div>
  216. {/if}
  217. <!--@formatter:on-->
  218. </div>
  219. </div>
  220. </main>
  221. <aside class="col-xs-12 col-sm-4">
  222. <div class="panel panel-default">
  223. <div class="panel-body">
  224. <div class="download-num counter-box">
  225. <div class="num counter number-count" data-from="0" data-to="{cms:archives name='downloads|default=0' /}" data-speed="2000" data-refresh-interval="50">{cms:archives name='downloads|default=0|number_format' /}</div>
  226. <div class="text">下载次数</div>
  227. </div>
  228. <div class="entry-meta">
  229. <div class="base-info"><h2>信息</h2>
  230. <div class="row">
  231. <div class="col-xs-4">类别</div>
  232. <div class="col-xs-8">
  233. <a href="{cms:channel name='url' /}" class="link" itemprop="category">{cms:channel name="name" /}</a>
  234. </div>
  235. </div>
  236. <div class="row">
  237. <div class="col-xs-4">兼容性</div>
  238. <div class="col-xs-8">
  239. <span itemprop="operatingSystem">
  240. <!--@formatter:off-->
  241. {if isset($__ARCHIVES__.os)}
  242. {foreach name="__ARCHIVES__.os_list" id="item"}
  243. <a href="{cms:channel name='url' /}?filter[os]={$key}">{$item}</a>
  244. {/foreach}
  245. {/if}
  246. <!--@formatter:on-->
  247. </span>
  248. </div>
  249. </div>
  250. <div class="row">
  251. <div class="col-xs-4">最新版本</div>
  252. <div class="col-xs-8"><span itemprop="softwareVersion">{cms:archives name="version|default=''" /}</span></div>
  253. </div>
  254. <div class="row">
  255. <div class="col-xs-4">文件大小</div>
  256. <div class="col-xs-8"><span itemprop="fileSize">{cms:archives name="filesize|default=0" /}</span></div>
  257. </div>
  258. <div class="row">
  259. <div class="col-xs-4">更新日期</div>
  260. <div class="col-xs-8"><span itemprop="datePublished">{cms:archives name="publishtime|date='Y-m-d',###" /}</span></div>
  261. </div>
  262. <div class="row">
  263. <div class="col-xs-4">语言</div>
  264. <div class="col-xs-8">
  265. <span itemprop="language">
  266. <!--@formatter:off-->
  267. {if isset($__ARCHIVES__.language)}
  268. {foreach name="__ARCHIVES__.language_list" id="item"}
  269. <a href="{cms:channel name='url' /}?filter[language]={$key}">{$item}</a>
  270. {/foreach}
  271. {/if}
  272. <!--@formatter:on-->
  273. </span>
  274. </div>
  275. </div>
  276. <div class="row">
  277. <div class="col-xs-4">浏览次数</div>
  278. <div class="col-xs-8"><span itemprop="views">{cms:archives name="views" /}</span> 次浏览</div>
  279. </div>
  280. <div class="row">
  281. <div class="col-xs-4">标签</div>
  282. <div class="col-xs-8">
  283. {volist name="$__ARCHIVES__.taglist" id="tag" empty="无"}<a href="{$tag.url}" itemprop="keywords" class="tag" rel="tag">{$tag.name}</a>{/volist}
  284. </div>
  285. </div>
  286. </div>
  287. </div>
  288. </div>
  289. </div>
  290. {if $config['userpage'] && $__ARCHIVES__['user']}
  291. <!-- S 关于作者 -->
  292. <div class="panel panel-default about-author" data-id="{$__ARCHIVES__.user.id}" itemProp="author" itemscope="" itemType="http://schema.org/Person">
  293. <meta itemProp="name" content="{$__ARCHIVES__.user.nickname}"/>
  294. <meta itemProp="image" content="{$__ARCHIVES__.user.avatar|cdnurl}"/>
  295. <meta itemProp="url" content="{$__ARCHIVES__.user.url}"/>
  296. <div class="panel-heading">
  297. <h3 class="panel-title">关于作者</h3>
  298. </div>
  299. <div class="panel-body">
  300. <div class="media">
  301. <div class="media-left">
  302. <a href="{$__ARCHIVES__.user.url}">
  303. <img class="media-object img-circle img-medium" style="width:64px;height:64px;" src="{$__ARCHIVES__.user.avatar|cdnurl}"
  304. data-holder-rendered="true">
  305. </a>
  306. </div>
  307. <div class="media-body">
  308. <h3 style="margin-top:10px;" class="media-heading">
  309. <a href="{$__ARCHIVES__.user.url}">{$__ARCHIVES__.user.nickname}</a>
  310. </h3>
  311. {$__ARCHIVES__.user.bio|default="这家伙很懒,什么也没写!"}
  312. </div>
  313. </div>
  314. </div>
  315. </div>
  316. <!-- E 关于作者 -->
  317. {/if}
  318. {include file="common/sidebar" /}
  319. </aside>
  320. </div>
  321. </div>
  322. <script type="text/html" id="downloadtpl">
  323. <div class="p-4" style="min-width:300px;">
  324. <div class="p-2 mb-4 text-center" style="background:#eee;border-radius:5px;">
  325. <h4>提取码 <span class="text-danger"><%=code%></span> 已复制</h4>
  326. </div>
  327. <p><a href="<%=url%>" target="_blank" data-id="{cms:archives name='id'/}" class="btn btn-block btn-primary btn-download btn-lg">前往下载</a></p>
  328. </div>
  329. </script>
  330. <script data-render="script" src="__ADDON__/js/clipboard.min.js"></script>
  331. <script data-render="script">
  332. $(function () {
  333. //格式化数字
  334. var number_format = function (text) {
  335. return text.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
  336. };
  337. //动画数字
  338. $('.number-count').each(function () {
  339. var $this = $(this);
  340. $({from: 0, to: $this.data("to"), elem: $this}).animate({from: $this.data("to")}, {
  341. duration: 1000,
  342. easing: 'swing',
  343. step: function () {
  344. $this.text(number_format(Math.ceil(this.from)));
  345. },
  346. complete: function () {
  347. if (number_format(this.to) != this.elem.text()) {
  348. this.elem.text(number_format(this.to));
  349. }
  350. }
  351. });
  352. });
  353. //立即下载
  354. $(document).on('click', '.btn-download-now', function () {
  355. $('html,body').animate({
  356. scrollTop: $("#download").offset().top - 60
  357. }, 700);
  358. return false;
  359. });
  360. //点击复制
  361. var clipboard = new ClipboardJS('.btn-download');
  362. clipboard.on('success', function (e) {
  363. layer.open({
  364. title: '',
  365. content: template("downloadtpl", {code: e.text, url: $(e.trigger).data("url")}),
  366. btn: false
  367. });
  368. e.clearSelection();
  369. });
  370. //下载统计
  371. $(document).on('click', '.btn-download', function () {
  372. var id = $(this).data("id");
  373. if ($(this).data("clipboard-text")) {
  374. return false;
  375. }
  376. if (!CMS.api.storage("download." + id)) {
  377. CMS.api.ajax({
  378. url: "{:addon_url('cms/archives/download')}",
  379. data: {id: $(this).data("id")}
  380. }, function () {
  381. CMS.api.storage("download." + id, true);
  382. return false;
  383. }, function () {
  384. return false;
  385. });
  386. }
  387. });
  388. //预览图片
  389. var swiper = new Swiper('.swiper-container', {
  390. slidesPerView: 'auto', height: 300,
  391. navigation: {
  392. nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev',
  393. }, on: {
  394. slideNextTransitionEnd: function () {
  395. if (swiper.progress == 1) {
  396. swiper.activeIndex = swiper.slides.length - 1;
  397. }
  398. }
  399. }
  400. });
  401. layer.photos({
  402. photos: '.screenshots-box'
  403. , anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
  404. });
  405. });
  406. </script>