Astro 內容集合入門:構建強大的內容模型
本文節選自 SitePoint Premium 上現已發行的《釋放 Astro 的力量》一書。我們將學習如何利用 Astro 的內容集合功能構建靈活且可擴展的內容模型。
Astro 使用特殊的 src/content
文件夾來管理內容集合。您可以創建子文件夾來組織不同的內容集合,例如 src/content/dev-blog
和 src/content/corporate-blog
。
每個內容集合都可以在配置文件(例如 /src/content/config.js
或 .ts
)中進行配置,並使用 Zod 定義集合模式。 Zod 是一個“基於 TypeScript 的模式驗證工具,具有靜態類型推斷功能”,已集成到 Astro 中。
以下是一個配置示例:
// src/content/config.js import { z, defineCollection } from 'astro:content'; const devBlogCollection = defineCollection({ schema: z.object({ title: z.string(), author: z.string().default('The Dev Team'), tags: z.array(z.string()), date: z.date(), draft: z.boolean().default(true), description: z.string(), }), }); const corporateBlogCollection = defineCollection({ schema: z.object({ title: z.string(), author: z.string(), date: z.date(), featured: z.boolean(), language: z.enum(['en', 'es']), }), }); export const collections = { devblog: devBlogCollection, corporateblog: corporateBlogCollection, };
代碼中定義了兩個內容集合:“開發者博客”和“企業博客”。 defineCollection
方法允許您為每個集合創建模式。
Markdown 文件和前端內容
本教程中的內容集合示例假設 .md
文件包含與配置文件中指定的模式匹配的前端內容。例如,一個“企業博客”文章可能如下所示:
--- title: 'Buy!!' author: 'Jack from Marketing' date: 2023-07-19 featured: true language: 'en' --- # Some Marketing Promo This is the best product!
Slug 生成
Astro 會根據文件名自動生成文章的 slug。例如,first-post.md
的 slug 為 first-post
。如果在前端內容中提供 slug
字段,Astro 將使用自定義 slug。
請注意,export const collections
對像中指定的屬性必須與內容所在的文件夾名稱匹配(並且區分大小寫)。
數據查詢
準備好 Markdown 文件(位於 src/content/devblog
和 src/content/corporateblog
)和 config.js
文件後,您可以開始查詢集合中的數據:
--- import { getCollection } from 'astro:content'; const allDevPosts = await getCollection('devblog'); const allCorporatePosts = await getCollection('corporateblog'); --- {JSON.stringify(allDevPosts)} {JSON.stringify(allCorporatePosts)}
getCollection
方法可用於檢索給定集合中的所有條目。示例中檢索了“開發者博客”(devblog
)和“企業博客”(corporateblog
)中的所有文章。模板中使用 JSON.stringify()
返回原始數據。
除了前端內容數據外,返回的數據還包含 id
、slug
和 body
屬性(body
屬性包含文章內容)。
您還可以通過迭代所有文章來過濾草稿或特定語言的文章:
import { getCollection } from 'astro:content'; const spanishEntries = await getCollection('corporateblog', ({ data }) => { return data.language === 'es'; });
getCollection
返回所有文章,但您也可以使用 getEntry
返回集合中的單個條目:
import { getEntry } from 'astro:content'; const singleEntry = await getEntry('corporateblog', 'pr-article-1');
getCollection
vs getEntries
雖然有兩種方法可以從集合中返回多篇文章,但兩者之間存在細微差別。 getCollection()
根據集合名稱檢索內容集合條目的列表,而 getEntries()
檢索來自同一集合的多個集合條目。
Astro 文檔中給出了 getEntries()
用於檢索內容的示例,其中使用了引用實體(例如,相關的文章列表)。
內容顯示
現在我們知道如何查詢數據,讓我們討論如何以格式化的方式顯示數據。 Astro 提供了一個名為 render()
的便捷方法,用於將 Markdown 的全部內容渲染到內置的 Astro 組件 <content></content>
中。構建和顯示內容的方式還取決於您使用的是靜態站點生成還是服務器端渲染模式。
對於預渲染,您可以使用 getStaticPaths()
方法:
// src/content/config.js import { z, defineCollection } from 'astro:content'; const devBlogCollection = defineCollection({ schema: z.object({ title: z.string(), author: z.string().default('The Dev Team'), tags: z.array(z.string()), date: z.date(), draft: z.boolean().default(true), description: z.string(), }), }); const corporateBlogCollection = defineCollection({ schema: z.object({ title: z.string(), author: z.string(), date: z.date(), featured: z.boolean(), language: z.enum(['en', 'es']), }), }); export const collections = { devblog: devBlogCollection, corporateblog: corporateBlogCollection, };
代碼中使用了 getStaticPaths()
。然後依靠 Astro.props
來捕獲條目,該條目將是一個包含有關條目的元數據、id
、slug
和 render()
方法的對象。此方法負責將 Markdown 條目渲染到 Astro 模板中的 HTML,它通過創建 <content></content>
組件來實現。令人驚奇的是,現在您只需將 <content></content>
組件添加到模板中,即可看到渲染到 HTML 的 Markdown 內容。
以上是從Astro開始的內容收集開始的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1
好用且免費的程式碼編輯器