larablog 建構日誌:規格書

larablog 建構日誌:規格書

規格書?不是企畫書嗎?

  當自己有個新的想法,想要實現而向上面的人說明、申請資源時所送上的文件稱為企劃書。

  本專案的目標是「建構一個自己覺得好使用的部落格系統」,而落實這件事所需要的功能項目在現有的 BSP(blog service provider,部落格服務提供者),或是同樣包含「larablog」關鍵字在內的 GitHub 專案幾乎都做到了。

  所以不是「我想做什麼」,而是「有這些功能要做,我是否能做到?」。

  記載要實做的功能項目,敘述項目要具備的功能細項、參考資源等內容就是規格書要做的事。

  企劃書要規劃願景,規格書則重視實踐。

  假設「部落格系統」是某個程式設計專案,那麼使用者就是專案契約中的甲方,乙方就是接案的程式設計師,只不過甲乙雙方都是自己(笑)。

從使用者層面看部落格具備的功能

  如果從使用者層面思考部落格系統需具備的功能,我會想到以下內容:

  • 一個好操作的線上編輯器,讓作者可以輕鬆加入文字、圖片、影音資料等內容。
  • 一個評論介面,提供網站訪客與部落格主互動的機會,並有基本的防 spam 能力。
  • 一個聯絡表單,如果訪客因為某些原因需要直接和部落格主聯絡時使用,要有基本防 spam 能力。
  • 一個符合 RWD 設計的頁面規劃,讓網站頁面在電腦螢幕/平板螢幕/手機螢幕都有良好的顯示。

  上面是基本清單,如果可以的話再加上:

  • 能以自動(或手動填入)方式加上 meta-description、Open Graph 等有利於搜尋引擎索引或是在社群網站分享時需要的資料。
  • 容易分享到社群平台,像是 Facebook、Twitter 等。
  • 提供以分類/標籤方式顯示關聯文章的頁面,例如不同分類文章可能擁有相同的標籤,透過以標籤檢索的方式找到跨分類的文章集合。
  • 在頁面上、下方提供導覽資訊:頁面上方有網頁路徑(或稱麵包屑,breadcrumb),下方則有前後篇文章連結。
  • 如果文章內容較長,要有文章目錄介面協助讀者快速前往文章段落。

從開發者層面思考部落格功能如何開發

  取得規格書之後,接下來就是思考規格書所列出功能該怎麼做出來。

一個好操作的線上編輯器,讓作者可以輕鬆加入文字、圖片、影音資料等內容

  因為接觸 Notion 的關係,自己對使用 Markdown 格式寫文件有更多認識,所以在網頁編輯器方面也希望能使用 Markdown 編輯器而不是使用 TinyMCE。Laravel 8 已經內建 Markdown 轉譯 HTML 函式,所以剩下的就是找個順手的 Markdown 編輯器。

  Voyager 是我的 Laravel 啟蒙導師:哥布林老師極力推薦的管理區建構套件,安裝後就可以使用 Markdown 編輯器,如果要增加其他編輯器也很簡單,我增加了 Editor.md 編輯器。

  圖片及影音資料如果要存放在網站主機,或是外部儲存空間(例如 Amazon S3)時需先規劃儲存位置及權限設定。本次專案因為資料不多所以不會使用外部儲存空間,外部儲存空間的使用流程會先用 Notion 記錄,日後工作上有用時就能快速達成。

一個評論介面,提供網站訪客與部落格主互動,並有基本的防 spam 能力

  評論功能可以自行建立(站內),或是匯入外部網站服務(Disqus、Facebook 留言等)完成。本專案的用意為 POC(概念驗證),而評論內容會與文章連動,所以在實做上使用站內方案,另加「新回應通知信件」功能,防 spam 功能則透過引入 hCAPTCHA 服務完成。

一個聯絡表單,需要直接和部落格主聯絡時使用,要有基本防 spam 能力

  一個包括 hCAPTCHA 驗證碼的聯絡表單,然後透過 Laravel 的 email 相關函式寄送到指定信箱。

一個符合 RWD 設計的頁面規劃,讓網站頁面在不同載具都有良好的顯示

  在觀看哥布林老師的部落格建構影片時,我覺得 BootstrapMade 提供的 Moderna 佈景主題,其部落格頁面設計簡約大方,所以會使用此佈景主題透過切版將其轉換為 Blade template。

【Laravel實戰】部落格從零開始實作攻略 #by Voyager

能以自動(或手動填入)方式在加上 meta-description、Open Graph 等有利於搜尋引擎索引或是在社群網站分享時需要的資料

  meta-description 內容常見的作法是節錄本文前 120 字內容,我則是傾向另外寫摘要文字儲存,這會影響資料表的規劃欄位。Open Graph 資訊則沿用文章資料表中與其相關的欄位,準備尺寸 1200 x 630 的圖片,作為 leading image 及社群網站分享文章時使用。

容易分享到社群平台,像是 Facebook、Twitter 等

  搜尋適合的套件。

提供以分類/標籤方式顯示關聯文章的頁面,提供橫向(標籤)或縱向(分類)的文章檢視

  以分類 id 或別名為依據過濾出文章項目後顯示文章標題、文章圖片及文章摘要,標籤則透過標籤 id 或別名過濾,實做上跟分類過濾差不多。

  文章路徑有套件可以使用,前後篇文章連結會用 Controller 來做。

如果文章內容較長,要有文章目錄介面協助讀者快速前往文章段落

  自動產生文章目錄的套件不難找,比較擔心的是因為 Laravel 版本更替產生的套件相容性問題,如果能以「不隨畫面捲動固定位置(Sticky)」的方式呈現就更好了。

規劃執行順序

  功能製作的大方向確認就是規劃製作順序。

  1. 建立 Laravel 專案,將程式碼交給 git 做版本控制。
  2. 作為部落格的核心,文章相關的功能肯定要先做,所以要先落實「文章」、「分類」與「標籤」三頁面的資料表規劃及設定關聯。
  3. 將 Moderna 佈景主題下載後轉化為 Blade template,將頁面上各區塊依需要切割成程式運作區塊。
  4. 安裝 Voyager 建置網站管理區,利用其功能建立資料庫關聯、建立文章分類、文章標籤、文章內容等項目。
  5. 在 Voyager 增加 Editor.md 編輯器項目作為主力編輯工具。
  6. 逐步完成頁面上各區塊顯示資訊背後的程式控制。
  7. 用 git 發佈到網站運作空間,將已完成的資料庫內容匯入線上資料庫。
  8. 申請外部網站服務(如 hCAPTCHA),測試本機開發時無法落實的部分。
作者照片

A-Bo Lee

居住在臺灣的 Joomler,期望以程式設計、開放原碼推廣活動收入養活一家老小。
35 歲後改姓李,id 作為曾為郭姓的證明。
FFXI:Abokuo@Sylph鯖、よろしくです。