Content Modelling
Pages
The page content type is designed to work as a template for a page on your website. You can create a new page content type for each different page layout that you require e.g. General Page, Blog Landing Page, Blog Post Page etc.
General Page Settings
All Pages have a Name and Handle Field. The Handle is auto generated from the name in snake_case
and can be edited before the first save. After the blocks initial save - when you click Create, the handle is not editable.
The URI is the routing structure for the page and accepts dynamic {slug}
and {id}
parameters. This is everything after your base domain, for example if your website domain is https://www.example-site.com
the URI for your blog could be blog/{slug} which would mean the final URL would become https://www.example-site.com/blog/{slug}
Once you have created your page, you will be able to add fields of your choice from the Fields list.
![](https://assets.contento.io/assets/VK6vBK72xR/CMPages1.1.png?fit=max&w=640&dpr=2)
The editor will be shown the fields that are created in the page content model. The page comes automatically with a title
field which is used as the name. The slug auto generates in kebab-case
from the title
field.
![](https://assets.contento.io/assets/VK6vBK72xR/CMPages1.2.png?fit=max&w=640&dpr=2)
The content
field is an example of where your editor could then choose from a range of blocks allowed in the general_page
content model for them to build out the rest of the page layout. Check out our BlockMatcher function that can be used to help you create a list of flexible block options for your editor to choose from.
Code Examples
JSON
This is an example of the JSON
object for a Page.
{
id: 'c_01hwdG5pdy0nDPa61DcDxY7X5n',
published_at: '2024-04-26T14:19:34+00:00',
slug: 'home',
name: 'Home',
uri: 'home',
url: 'http://www.example-site.com/home',
created_at: '2024-04-26T15:25:22+00:00',
updated_at: '2024-04-26T15:25:22+00:00',
author: {
id: 'u_01hv8wF8as1HnV6nBDhwe13HDx',
name: 'Hollie Duncan',
email: '[email protected]',
profile_photo_url: 'https://ui-avatars.com/api/?name=H+D&bold=true&size=256&color=008673&background=00D6B5&font-size=0.4&format=svg'
},
content_type: {
id: 'ct_01HwDG4hmXEm7Vtn0PyTf043PC',
name: 'General Page',
handle: 'general_page',
object_type: 'page'
},
seo: {...}
},
fields: {...}
}
TypeScript
This is an example of how you can request specific page data from the API and use it in a page layout component such as <Home />
.
export default async function page() {
const content = await createClient(draftMode().isEnabled)
.getContentBySlug('home', 'general_page')
.catch(() => {
notFound()
})
return <Home initialContent={content} />
}