xunsearch.html 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. {layout name="common/layout" /}
  2. <style>
  3. html, body {
  4. background: #fff;
  5. }
  6. .form-search label {
  7. font-weight: normal;
  8. margin-right: 5px;
  9. }
  10. .result-list {
  11. margin: 0;
  12. }
  13. .result-list dd {
  14. margin-bottom: 20px;
  15. /*border-bottom:1px solid #f3f3f3;*/
  16. }
  17. .result-list dd:last-child {
  18. margin-bottom: 0;
  19. }
  20. .result-list dd .description {
  21. font-size: 14px;
  22. color: #666;
  23. }
  24. .result-list dd .extra, .result-list dd a {
  25. font-size: 13px;
  26. color: green;
  27. margin-top: 5px;
  28. }
  29. .result-list dd .extra span {
  30. margin-right: 5px;
  31. }
  32. .result-list dd .extra strong {
  33. font-weight: 400;
  34. margin-right: 1px;
  35. }
  36. .result-list h4 {
  37. font-weight: 400;
  38. font-size: 16px;
  39. margin-bottom: 3px;
  40. line-height: 1.54;
  41. }
  42. .result-list h4 a {
  43. color: #007bff;
  44. }
  45. .result-list em {
  46. color: #c00;
  47. font-style: normal;
  48. }
  49. .result-list . field-info {
  50. }
  51. .search-suggestion {
  52. background-color: #F5F5F5;
  53. padding: 10px;
  54. margin-bottom: 15px;
  55. }
  56. .search-links {
  57. margin-top: 25px;
  58. }
  59. .search-links a {
  60. color: #007bff;
  61. margin-right: 5px;
  62. }
  63. .autocomplete-searchmenu .autocomplete-suggestion {
  64. padding: 5px 12px;
  65. }
  66. </style>
  67. <div class="p-3" style="border-bottom: 1px solid #eee;margin-bottom: 15px;">
  68. <div class="container">
  69. <form class="form-search pt-2" id="search-form" method="get">
  70. <input type="hidden" name="order" value="{$order}">
  71. <div class="row">
  72. <div class="col-xs-12 col-sm-6" id="q-input">
  73. <div class="input-group">
  74. <input type="search" class="search-query form-control" name="q" title="输入任意关键词皆可搜索" value="<?php echo htmlspecialchars($q); ?>">
  75. <span class="input-group-btn">
  76. <button class="btn btn-primary ml-2" type="submit" style="border-radius:2px;padding:6px 30px;">搜索</button>
  77. </span>
  78. </div>
  79. </div>
  80. <div class="col-xs-12 mt-2">
  81. <label><input type="radio" name="fulltext" value="0" {:$fulltext?'':'checked'} /> 标题</label>
  82. <label>
  83. <input type="radio" name="fulltext" value="1" {:$fulltext?'checked':''} /> 全文
  84. </label>
  85. <label>
  86. <input type="checkbox" name="fuzzy" value="1" {:$fuzzy?'checked':''} /> 模糊搜索
  87. </label>
  88. {if false}
  89. <label>
  90. <input type="checkbox" name="synonyms" value="1" {:$synonyms?'checked':''} /> 同义词
  91. </label>
  92. {/if}
  93. <span class="dropdown">
  94. <span class="dropdown-toggle" data-toggle="dropdown" href="javascript:">
  95. {:isset($orderList[$order])?$orderList[$order]:$orderList['relevance']} <span class="caret"></span>
  96. </span>
  97. <ul class="dropdown-menu orderlist">
  98. {foreach name="orderList" id="item"}
  99. <li role="presentation"><a role="menuitem" tabindex="-1" data-value="{$key}" href="javascript:">{$item}</a></li>
  100. {/foreach}
  101. </ul>
  102. </span>
  103. </div>
  104. </div>
  105. </form>
  106. </div>
  107. </div>
  108. <div class="container">
  109. <!-- 开始搜索 -->
  110. <?php if (!empty($q)): ?>
  111. <div class="">
  112. <div class="span12">
  113. <!-- 搜索状态 -->
  114. <p class="result text-muted">为您找到约 <?php echo number_format($count); ?> 条结果,搜索耗时:<?php printf('%.4f', $search_cost); ?>秒</p>
  115. <!-- 搜索建议 -->
  116. <?php if (count($corrected) > 0): ?>
  117. <div class="search-suggestion">
  118. 您是不是要找:
  119. <?php foreach ($corrected as $word): ?>
  120. <span><a href="<?php echo '?q=' . urlencode($word); ?>" class="text-danger"><?php echo $word; ?></a></span>
  121. <?php endforeach; ?>
  122. </div>
  123. <?php endif; ?>
  124. <!-- 未找到结果 -->
  125. <?php if ($count === 0 && empty($error)): ?>
  126. <div class="search-not-found">
  127. <p>找不到和 {$q|htmlspecialchars} 相符的内容或信息。</p>
  128. <p>建议您:</p>
  129. <ul class="list-unstyled">
  130. <li>1.请检查输入字词有无错误。</li>
  131. <li>2.请换用另外的查询字词。</li>
  132. <li>3.请改用较短、较为常见的字词。</li>
  133. </ul>
  134. </div>
  135. <?php endif; ?>
  136. <!-- 查询结果 -->
  137. <dl class="result-list">
  138. <?php foreach ($docs as $doc): ?>
  139. <dt>
  140. <h4>
  141. <a href="{$doc['url']}" target="_blank">
  142. <?php echo $highlight(htmlspecialchars($doc['title'])); ?>
  143. </a>
  144. </h4>
  145. </dt>
  146. <dd>
  147. <div class="description"><?php echo $fulltext ? $highlight(htmlspecialchars($doc['content'])) : htmlspecialchars($doc['content']); ?></div>
  148. <div class="extra">
  149. {if $doc['type']=="question"}
  150. <span class="tag tag-xs">问题</span>
  151. <span><strong>发布于</strong>{$doc.createtime|human_date}</span>
  152. <span>{$doc['comments']} 人回答</span>
  153. {elseif $doc['type']=="article" /}
  154. <span class="tag tag-xs tag-danger">文章</span>
  155. <span><strong>发布于</strong>{$doc.createtime|human_date}</span>
  156. <span>{$doc['views']} 次浏览</span>
  157. <span>{$doc['comments']} 次评论</span>
  158. {/if}
  159. </div>
  160. </dd>
  161. <?php endforeach; ?>
  162. </dl>
  163. <!-- 分页 -->
  164. <?php if (!empty($pager)): ?>
  165. <div class="pager mb-0" style="text-align:left;">
  166. <ul class="pagination">
  167. <?php echo $pager; ?>
  168. </ul>
  169. </div>
  170. <?php endif; ?>
  171. </div>
  172. </div>
  173. <?php endif; ?>
  174. <!-- 结束搜索 -->
  175. </div>
  176. <!-- 热门搜索 -->
  177. <?php if (count($hot) > 0 && false): ?>
  178. <div class="container">
  179. <div class="search-links">
  180. <h4>热门搜索</h4>
  181. <p>
  182. <?php foreach($hot as $word => $freq): ?>
  183. <span><a href="<?php echo '?q=' . urlencode($word); ?>"><?php echo $word; ?></a></span>
  184. <?php endforeach; ?>
  185. </p>
  186. </div>
  187. </div>
  188. <?php endif; ?>
  189. <!-- 相关搜索 -->
  190. <?php if (count($related) > 0): ?>
  191. <div class="container">
  192. <div class="search-links">
  193. <h4>相关搜索</h4>
  194. <p>
  195. <?php foreach ($related as $word): ?>
  196. <span><a href="<?php echo '?q=' . urlencode($word); ?>"><?php echo $word; ?></a></span>
  197. <?php endforeach; ?>
  198. </p>
  199. </div>
  200. </div>
  201. <?php endif; ?>
  202. <script data-render="script">
  203. $(function () {
  204. var form = $('#search-form');
  205. var search = $("input[name='q']", form);
  206. search.autoComplete({
  207. minChars: 1,
  208. menuClass: 'autocomplete-searchmenu',
  209. header: '',
  210. footer: '',
  211. source: function (term, response) {
  212. try {
  213. xhr.abort();
  214. } catch (e) {
  215. }
  216. xhr = $.getJSON('{:addon_url("cms/search/suggestion")}', {q: term}, function (data) {
  217. response(data);
  218. });
  219. },
  220. onSelect: function (e, term, item) {
  221. if (typeof callback === 'function') {
  222. callback.call(elem, term, item);
  223. } else {
  224. form.trigger("submit");
  225. }
  226. }
  227. });
  228. form.submit(function () {
  229. if (search.val() == '') {
  230. layer.msg('请先输入关键词');
  231. search.focus();
  232. return false;
  233. }
  234. });
  235. $(document).on("click", "ul.orderlist li a", function () {
  236. $("input[name=order]", form).val($(this).data("value"));
  237. form.trigger("submit");
  238. });
  239. });
  240. </script>