隨機文章功能已上線!

2026/01/03

Categories: 技術/程式 Tags:

全文約 521 字,預計閱讀 2 分鐘

到首頁點擊「🎲 隨機文章」就可以隨機選一篇文章來閱讀!

這個功能跟「歷史上的今天」一樣,是爲了在文章數越來越多時,可以讓第一次到訪的讀者有一些方向可以看,而不會被文章列表嚇到。

如果你也想做一個

  1. 新增檔案 content/random.md
---
title: "隨機文章跳轉中..."
layout: "random"
---
  1. layouts/_default/random.html
{{ partial "header.html" . }}

<div class="article-meta">
  <h1><span class="title">{{ .Title }}</span></h1>
</div>

<main>
  <div style="text-align: center; margin-top: 50px;">
    <h2 id="status">🎲 隨機選取中...</h2>
    <p id="msgText">正在讀取文章清單,請稍候...</p>
    
    {{/* 1. 抓取網址並處理成逗點分隔字串 */}}
    {{- $urlList := slice -}}
    {{- range .Site.RegularPages -}}
        {{- if and (ne .RelPermalink "/") (ne .RelPermalink "/random/") (ne .RelPermalink "/search/") -}}
            {{- $urlList = $urlList | append .RelPermalink -}}
        {{- end -}}
    {{- end -}}
    {{- $csvUrls := delimit $urlList "," -}}

    {{/* 2. 把網址存在一個隱藏的 div 屬性裡,避開 JS 語法報錯 */}}
    <div id="url-data" data-urls="{{ $csvUrls }}" style="display: none;"></div>
  </div>

  <script>
  (function() {
      const msgText = document.getElementById('msgText');
      const dataEl = document.getElementById('url-data');
      
      if (dataEl && dataEl.dataset.urls) {
          // 3. 從 HTML 屬性拿回字串,並拆解成陣elle
          const urls = dataEl.dataset.urls.split(',');
          
          if (urls.length > 0 && urls[0] !== "") {
              const randomIndex = Math.floor(Math.random() * urls.length);
              const randomUrl = urls[randomIndex];
              
              console.log("成功抓取文章數:", urls.length);
              console.log("準備跳轉至:", randomUrl);
              
              // 4. 跳轉
              window.location.replace(randomUrl);
          } else {
              msgText.innerText = "錯誤:文章清單是空的。";
          }
      } else {
          msgText.innerText = "錯誤:找不到資料載體。";
      }
  })();
  </script>
</main>

{{ partial "footer.html" . }}

```text
>> Home