Filter by Site
How to fetch JSON:API resources filtered by site.
Note: This is available for Drupal 9.3.x only. See the change record here.
If you have multiple Next.js sites built from one Drupal source, you can filter JSON:API resources by site using the site machine_name
.
Collection
You can filter resource collection using FIELD_NAME.meta.drupal_internal__target_id
.
// Fetch all Article nodes where the entity reference field `field_sites` has value blog.const nodes = await drupal.getResourceCollection<DrupalNode[]>( "node--article", { params: { filter: { "field_sites.meta.drupal_internal__target_id": "blog", }, }, })
field_sites
is a Next.js site entity reference field on theArticle
content type.blog
is the ID of the Next.js site.
In getStaticProps
you can use:
export async function getStaticProps( context): Promise<GetStaticPropsResult<IndexPageProps>> { const nodes = await drupal.getResourceCollectionFromContext<DrupalNode[]>( "node--article", context, { params: { include: "field_image,uid", sort: "-created", filter: { "field_sites.meta.drupal_internal__target_id": "blog", }, }, } )
return { props: { nodes, }, }}
Dynamic Routes
In getStaticPaths
you can filter by site by passing params
:
export async function getStaticPaths(context): Promise<GetStaticPathsResult> { const paths = await drupal.getStaticPathsFromContext( ["node--article"], context, { params: { filter: { "field_sites.meta.drupal_internal__target_id": "blog", }, }, } )
return { paths, fallback: false, }}