10 changed files with 795 additions and 336 deletions
			
			
		| @ -0,0 +1,13 @@ | ||||
| import { defineContentConfig, defineCollection } from '@nuxt/content' | ||||
| 
 | ||||
| // Lookup resolved from path: rootDir/content
 | ||||
| // see: https://github.com/nuxt/content/issues/3161
 | ||||
| 
 | ||||
| export default defineContentConfig({ | ||||
|   collections: { | ||||
|     content: defineCollection({ | ||||
|       type: "page", | ||||
|       source: "**/*.md" | ||||
|     }) | ||||
|   } | ||||
| }) | ||||
| @ -0,0 +1,45 @@ | ||||
| --- | ||||
| title: "My First Blog Post" | ||||
| description: "This is a test article." | ||||
| --- | ||||
| 
 | ||||
| # Hello World | ||||
| 
 | ||||
| This is a test article. | ||||
| 
 | ||||
| ## Component Rendering | ||||
| 
 | ||||
| ::ExampleComponent | ||||
| #namedslot | ||||
| This is a Named Slot | ||||
| #default | ||||
| This is the Default Slot | ||||
| :: | ||||
| 
 | ||||
| ### Testing Some Markdown Features | ||||
| 
 | ||||
| A link: [website-vue](https://github.com/riyyi/website-vue) | ||||
| 
 | ||||
| A codeblock: | ||||
| ```js [file.js]{2} meta-info=val | ||||
| export default () => { | ||||
| console.log('Code block') | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ```cpp | ||||
| int i = 0; | ||||
| ``` | ||||
| 
 | ||||
| ```php | ||||
| protected static $router; | ||||
| $path = parse_url($_SERVER['REQUEST_URI'])['path']; | ||||
| ``` | ||||
| 
 | ||||
| Inline `hightlight`. | ||||
| 
 | ||||
| `const code: string = 'highlighted code inline'`{lang="ts"} | ||||
| 
 | ||||
| - An | ||||
| - Unordered | ||||
| - List | ||||
| @ -0,0 +1,8 @@ | ||||
| --- | ||||
| title: "My Second Blog Post" | ||||
| description: "This is another article." | ||||
| --- | ||||
| 
 | ||||
| # Test! | ||||
| 
 | ||||
| This is another article. | ||||
| @ -0,0 +1,16 @@ | ||||
| <template> | ||||
| 	<div> | ||||
| 		<h2 v-if="$slots.namedslot"> | ||||
| 			<slot name="namedslot" mdc-unwrap="p" /> | ||||
| 		</h2> | ||||
| 		<h2 v-else>Broken Slot</h2> | ||||
| 
 | ||||
| 		<slot mdc-unwrap="p" /> | ||||
| 	</div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
|  defineProps({ | ||||
| 	 namedslot: String, | ||||
|  }); | ||||
| </script> | ||||
| @ -0,0 +1,31 @@ | ||||
| <template> | ||||
| 	<div> | ||||
| 		<template v-if="article"> | ||||
| 			<h1>{{ article.title }}</h1> | ||||
| 			<p>{{ article.description }}</p> | ||||
| 			<ContentRenderer :value="article" /> | ||||
| 		</template> | ||||
| 		<template v-else> | ||||
| 			<h1>Page Not Found</h1> | ||||
| 			<p>Oops! The content you're looking for doesn't exist.</p> | ||||
| 		</template> | ||||
| 	</div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
|  const { params } = useRoute(); | ||||
| 
 | ||||
|  console.log(params); | ||||
| 
 | ||||
|  const { data: article } = await useAsyncData( | ||||
| 	 `article-${params.slug}`, | ||||
| 	 () => queryCollection("content").path("/articles/" + params.slug).first() | ||||
|  ); | ||||
| 
 | ||||
|  useSeoMeta({ | ||||
| 	 title: article.value?.title, | ||||
| 	 description: article.value?.description | ||||
|  }) | ||||
| 
 | ||||
|  console.log(article); | ||||
| </script> | ||||
| @ -0,0 +1,18 @@ | ||||
| <template> | ||||
| 	<div> | ||||
| 		<h1>Articles</h1> | ||||
| 		<ul> | ||||
| 			<li v-for="article in articles" :key="article._path"> | ||||
| 				<NuxtLink :to="article.path">{{ article.title }}</NuxtLink> | ||||
| 			</li> | ||||
| 		</ul> | ||||
| 
 | ||||
| 		<div v-for="article in articles" :key="article._path"> | ||||
| 			<pre>{{ article }}</pre> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
|  const { data: articles } = await useAsyncData("articles", () => queryCollection("content").all()) | ||||
| </script> | ||||
					Loading…
					
					
				
		Reference in new issue