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`
.
import { getResourceCollection } from "next-drupal"// Fetch all Article nodes where the entity reference field `field_sites` has value blog.const nodes = await 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 the`Article`
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 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 getPathsFromContext(["node--article"], context, { params: { filter: { "field_sites.meta.drupal_internal__target_id": "blog", }, }, })
return { paths, fallback: false, }}