国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
啟動博客
熟悉內(nèi)容模型
向類別類型添加slug
關(guān)於Sanity 源插件如何工作的簡短說明
在Gatsby 中添加類別頁面模板
創(chuàng)建分類頁面!
首頁 web前端 css教學(xué) 如何用蓋茨比和理智製作分類頁面

如何用蓋茨比和理智製作分類頁面

Apr 06, 2025 am 10:24 AM

How to Make Taxonomy Pages With Gatsby and Sanity.io

本教程將介紹如何使用Gatsby 和Sanity.io 的結(jié)構(gòu)化內(nèi)容創(chuàng)建分類頁面。您將學(xué)習(xí)如何使用Gatsby 的節(jié)點創(chuàng)建API 向Gatsby 的GraphQL API 中的內(nèi)容類型添加字段。具體來說,我們將為Sanity 的博客啟動器創(chuàng)建類別頁面。

需要注意的是,此處介紹的內(nèi)容與Sanity 本身無關(guān)。無論您使用哪個內(nèi)容源,都可以執(zhí)行此操作。我們只是為了演示而使用Sanity.io。

啟動博客

如果您想使用您自己的Gatsby 項目學(xué)習(xí)本教程,請?zhí)^在Gatsby 中創(chuàng)建新頁面模板的部分。否則,請訪問sanity.io/create 並啟動Gatsby 博客啟動器。它會將Sanity Studio 和Gatsby 前端的代碼放入您的GitHub 帳戶中,並在Netlify 上為兩者設(shè)置部署。所有配置(包括示例內(nèi)容)都已就緒,以便您可以直接開始學(xué)習(xí)如何創(chuàng)建分類頁面。

項目啟動後,請確保將新的GitHub 存儲庫克隆到本地,並安裝依賴項:

 git clone [email protected]:username/your-repository-name.git
cd your-repository-name
npm i

如果您想在本地同時運行Sanity Studio(CMS)和Gatsby 前端,則可以從項目根目錄的終端運行命令npm run dev 。您也可以進入web文件夾,並使用相同的命令運行Gatsby。

您還應(yīng)該安裝Sanity CLI 並從終端npm i -g @sanity/cli && sanity login login 。這將為您提供與Sanity 項目交互的工具和有用的命令。您可以添加--help標誌以獲取有關(guān)其功能和命令的更多信息。

我們將對gatsby-node.js文件進行一些自定義。要查看更改的結(jié)果,請重新啟動Gatsby 的開發(fā)服務(wù)器。這在大多數(shù)係統(tǒng)中都是通過在終端中按CTRL C 並再次運行npm run dev來完成的。

熟悉內(nèi)容模型

查看/studio/schemas/documents文件夾。這裡有我們主要內(nèi)容類型的架構(gòu)文件:作者、類別、站點設(shè)置和帖子。每個文件都導(dǎo)出一個JavaScript 對象,該對象定義了這些內(nèi)容類型的字段和屬性。在post.js中是類別的字段定義:

 {
  name: 'categories',
  type: 'array',
  title: 'Categories',
  of: [
    {
      type: 'reference',
      to: [{
        type: 'category'
      }]
    }
  ]
},

這將創(chuàng)建一個具有對類別文檔的引用對象的數(shù)組字段。在博客的工作室中,它將如下所示:

向類別類型添加slug

轉(zhuǎn)到/studio/schemas/documents/category.js 。類別有一個簡單的內(nèi)容模型,它由標題和描述組成?,F(xiàn)在我們正在為類別創(chuàng)建專用頁面,擁有slug 字段也很方便。我們可以在架構(gòu)中這樣定義它:

 // studio/schemas/documents/category.js
export default {
  name: 'category',
  type: 'document',
  title: 'Category',
  fields: [
    {
      name: 'title',
      type: 'string',
      title: 'Title'
    },
    {
      name: 'slug',
      type: 'slug',
      title: 'Slug',
      options: {
        // 添加一個按鈕以根據(jù)標題字段生成slug
        source: 'title'
      }
    },
    {
      name: 'description',
      type: 'text',
      title: 'Description'
    }
  ]
}

現(xiàn)在我們已經(jīng)更改了內(nèi)容模型,我們需要更新GraphQL 架構(gòu)定義。通過在studio 文件夾中執(zhí)行npm run graphql-deploy (或者sanity graphql deploy )來執(zhí)行此操作。您將收到有關(guān)重大更改的警告,但由於我們只是添加了一個字段,因此您可以繼續(xù)進行而無需擔心。如果您希望該字段在Netlify 上的工作室中可用,請將更改檢入git(使用git add . && git commit -m"add slug field" )並將其推送到您的GitHub 存儲庫( git push origin master )。

現(xiàn)在我們應(yīng)該瀏覽類別並為它們生成slug。請記住點擊“發(fā)布”按鈕才能使Gatsby 訪問這些更改!如果您正在運行Gatsby 的開發(fā)服務(wù)器,則也需要重新啟動它。

關(guān)於Sanity 源插件如何工作的簡短說明

在開發(fā)中啟動Gatsby 或構(gòu)建網(wǎng)站時,源插件將首先從Sanity 部署的GraphQL API 獲取GraphQL 架構(gòu)定義。源插件使用它來告訴Gatsby 哪些字段應(yīng)該可用,以防止它在某些字段的內(nèi)容消失時中斷。然後,它將訪問項目的導(dǎo)出端點,該端點將所有可訪問的文檔流式傳輸?shù)紾atsby 的內(nèi)存數(shù)據(jù)存儲中。

換句話說,整個站點都是通過兩個請求構(gòu)建的。運行開發(fā)服務(wù)器還將設(shè)置一個偵聽器,該偵聽器會實時將來自Sanity 的任何更改推送到Gatsby,而無需執(zhí)行其他API 查詢。如果我們向源插件提供具有讀取草稿權(quán)限的令牌,我們將立即看到更改。這也可以通過Gatsby 預(yù)覽體驗到。

在Gatsby 中添加類別頁面模板

現(xiàn)在我們已經(jīng)準備好GraphQL 架構(gòu)定義和一些內(nèi)容,我們可以開始在Gatsby 中創(chuàng)建類別頁面模板了。我們需要做兩件事:

  • 告訴Gatsby 為類別節(jié)點(這是Gatsby 的“文檔”術(shù)語)創(chuàng)建頁面。
  • 為Gatsby 提供一個模板文件來生成包含頁面數(shù)據(jù)的HTML。

首先打開/web/gatsby-node.js文件。這裡已經(jīng)存在可以用來創(chuàng)建博客帖子頁面的代碼。我們將主要利用這段代碼,但用於類別。讓我們一步一步來:

createBlogPostPages函數(shù)和以exports.createPages開頭的行之間,我們可以添加以下代碼。我已經(jīng)在這裡添加了註釋來解釋正在發(fā)生的事情:

 // web/gatsby-node.js

// ...

async function createCategoryPages (graphql, actions) {
  // 獲取Gatsby 創(chuàng)建新頁面的方法const {createPage} = actions
  // 查詢Gatsby 的GraphAPI 以獲取來自Sanity 的所有類別// 您可以在http://localhost:8000/___graphql 上查詢此API
  const result = await graphql(`{
    allSanityCategory {
      nodes {
        slug {
          current
        }
        id
      }
    }
  }
  `)
  // 如果查詢中存在任何錯誤,則取消構(gòu)建並告訴我們if (result.errors) throw result.errors

  // 讓我們優(yōu)雅地處理allSanityCatgogy 為null 的情況const categoryNodes = (result.data.allSanityCategory || {}).nodes || []

  categoryNodes
    // 循環(huán)遍歷類別節(jié)點,但不返回任何內(nèi)容.forEach((node) => {
      // 解構(gòu)每個類別的id 和slug 字段const {id, slug = {}} = node
      // 如果沒有slug,我們什麼也不做if (!slug) return

      // 使用當前slug 創(chuàng)建URL
      const path = `/categories/${slug.current}`

      // 使用URL 路徑和模板文件創(chuàng)建頁面,並傳遞我們可以用來在模板文件中查詢正確類別的id
      createPage({
        path,
        component: require.resolve('./src/templates/category.js'),
        context: {id}
      })
    })
}

最後,此函數(shù)需要在文件的底部:

 // /web/gatsby-node.js

// ...

exports.createPages = async ({graphql, actions}) => {
  await createBlogPostPages(graphql, actions)
  await createCategoryPages(graphql, actions) // 
}

現(xiàn)在我們已經(jīng)有了創(chuàng)建類別頁面節(jié)點的機制,我們需要添加一個模板來顯示它在瀏覽器中的實際外觀。我們將基於現(xiàn)有的博客帖子模板來獲得一些一致的樣式,但在過程中保持相當簡單。

 // /web/src/templates/category.js
import React from 'react'
import {graphql, Link} from 'gatsby'
import Container from '../components/container'
import GraphQLErrorList from '../components/graphql-error-list'
import SEO from '../components/seo'
import Layout from '../containers/layout'
import {getBlogUrl} from '../lib/helpers'


export const query = graphql`
  query CategoryTemplateQuery($id: String!) {
    category: sanityCategory(id: {eq: $id}) {
      title
      description
      posts {
        _id
        title
        publishedAt
        slug {
          current
        }
      }
    }
  }
`

const CategoryPostTemplate = props => {
  const {data = {}, errors} = props
  const {title, description, posts} = data.category || {}

  return (
    <layout>
      <container>
        {errors &&<graphqlerrorlist errors="{errors}"></graphqlerrorlist> }
        {!data.category &&<p> No category data</p> }
        <seo title="{title}" description="{description}"></seo>
        <h1>Category: {title}</h1>
        <p>{description}</p>
        {posts && (
          
            <h2>Posts</h2>
            <ul>
              {posts.map(post => (
                <li key="{post._id}">
                  <link to="{getBlogUrl(post.publishedAt," post.slug.current>{post.title}
                </li>
              ))}
            </ul>
          >
        )}
      </container>
    </layout>
  )
}

export default CategoryPostTemplate

這段代碼將生成一個簡單的類別頁面,其中包含鏈接帖子的列表——就像我們想要的那樣!

創(chuàng)建分類頁面!

我們剛剛完成了在Gatsby 中使用自定義頁面模板創(chuàng)建新頁麵類型的過程。我們介紹了Gatsby 的一個節(jié)點API,名為createResolver ,並用它向類別節(jié)點添加了一個新的posts字段。

這應(yīng)該為您提供創(chuàng)建其他類型的分類頁面所需的內(nèi)容!您的博客上有多個作者嗎?您可以使用相同的邏輯來創(chuàng)建作者頁面。 GraphQL 過濾器的有趣之處在於,您可以使用它來超越使用引用建立的顯式關(guān)係。它還可以用於使用正則表達式或字符串比較來匹配其他字段。它非常靈活!

以上是如何用蓋茨比和理智製作分類頁面的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
CSS教程,用於創(chuàng)建加載旋轉(zhuǎn)器和動畫 CSS教程,用於創(chuàng)建加載旋轉(zhuǎn)器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉(zhuǎn)器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉(zhuǎn)器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調(diào)了設(shè)計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異並合理使用廠商前綴。 1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動畫表現(xiàn)不同;2.查閱CanIuse確認特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動添加前綴;5.安裝PostCSS並配置browserslist指定目標瀏覽器;6.構(gòu)建時自動處理兼容性;7.老項目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什麼區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什麼區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo????ntalpadding/margins—idealforinlinetextstyling

造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

設(shè)置訪問過鏈接的樣式能提升用戶體驗,尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導(dǎo)航。 1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出於隱私限制僅允許修改部分屬性;3.顏色選擇應(yīng)與整體風格協(xié)調(diào),避免突兀;4.移動端可能不顯示該效果,建議結(jié)合其他視覺提示如icon輔助標識。

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無需依賴圖片或SVG。其優(yōu)勢包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應(yīng)式調(diào)整,適配移動端;3.易於動畫化,可結(jié)合hover或JavaScript實現(xiàn)動態(tài)效果;4.不影響佈局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

如何使用CSS創(chuàng)建響應(yīng)式圖像? 如何使用CSS創(chuàng)建響應(yīng)式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應(yīng)式圖片,主要可通過以下方法實現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時自適應(yīng)容器寬度;2.結(jié)合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控製圖片裁剪與焦點展示。這些方法共同確保圖片在不同設(shè)備上清晰、美觀地呈現(xiàn)。

揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 Jul 08, 2025 am 02:16 AM

CSS單位的選擇取決於設(shè)計需求和響應(yīng)式要求。 1.px用於固定尺寸,適合精確控制但缺乏彈性;2.em是相對單位,受父元素影響易導(dǎo)致級聯(lián)問題,rem則基於根元素更穩(wěn)定,適合全局縮放;3.vw/vh基於視口大小,適合響應(yīng)式設(shè)計,但需注意極端屏幕下的表現(xiàn);4.選擇時應(yīng)根據(jù)是否需要響應(yīng)式調(diào)整、元素層級關(guān)係及視口依賴程度來決定,合理搭配使用可提升佈局靈活性與維護性。

什麼是常見的CSS瀏覽器不一致? 什麼是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對CSS解析存在差異,導(dǎo)致顯示效果不一致,主要包括默認樣式差異、盒模型計算方式、Flexbox和Grid佈局支持程度及某些CSS屬性行為不一致。 1.默認樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應(yīng)多測試並使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse並提供降級

See all articles