I’m looking into using Forestry with Gatsby (and use gatsby-plugin-image to optimize the images), but I’m stuck on how to get it working and not sure if it’s even possible.
- The first approach I tried (not working with Gatsby Image) is:
The image path is set in JSON files (to make all page content editable) and the images are uploaded to the static/uploads
folder because Forestry requires an absolute path for the images:
content/pages/home.json
:
{
"title": "Home",
"hero_image": "../../uploads/hero_image.png",
"hero_image_alt": "An image",
...
}
–> This approach will not make it queryable in GraphQL by Gatsby so I can only use it in a normal img
tag:
pages/index.js
:
import { useStaticQuery, graphql } from "gatsby"
...
const { allPagesJson } = useStaticQuery(
graphql`
{
allPagesJson {
nodes {
hero_image_alt
hero_image
}
}
}
`
const data = allPagesJson.nodes[0]
<img src={data.hero_image} alt={data.hero_image_alt} />
- Second approach I tried (queryable but still not working) is:
The images are uploaded to content/images
and then a relative path is added in the JSON files:
content/pages/home.json
:
{
"title": "Home",
"hero_image": "../images/hero_image.png",
"hero_image_alt": "A picture"
}
–> This approach makes it queryable, so I’d think I can use it in the GatsbyImage
component, but it always returns a 404 error:
pages/index.js
:
import { useStaticQuery, graphql } from "gatsby"
import { GatsbyImage, getImage } from "gatsby-plugin-image"
...
const { allPagesJson } = useStaticQuery(
graphql`
{
allPagesJson{
nodes {
hero_image_alt
hero_image {
childImageSharp {
gatsbyImageData
}
}
}
}
}
`
)
...
const data = allPagesJson.nodes[0]
const hero_image = getImage(data.hero_image)
...
<GatsbyImage image={hero_image} alt={data.hero_image_alt} />
This returns the error:
GET http://localhost:8000/static/130e6fa61e2ebe523785c187e562a5f8/61d51/hero_image.webp 404 (Not Found)
I’ve been struggling with this all afternoon and not sure what else I can try to get it working with Forestry.
My basic requirements are that I need to be able to make all page content editable (text/images) for users instead of only being able to create posts + optimize the images with GatsbyImage so if there’s a better way in general to make that happen I’m also all ears.