Gatsby / Drupal8 解耦:如何在从 Drupal 文件目录中提取的 Gatsby 页面上呈现图像?

Posted

技术标签:

【中文标题】Gatsby / Drupal8 解耦:如何在从 Drupal 文件目录中提取的 Gatsby 页面上呈现图像?【英文标题】:Gatsby / Drupal8 decouple: How do I render an image on a Gatsby page that pulls from a Drupal file directory? 【发布时间】:2019-05-18 04:27:40 【问题描述】:

目标:使用 Gatsby 渲染与节点关联的 Drupal 8 图像

我可以使用 GraphQL 查询很好地呈现默认的 Drupal 8 文章节点信息。我无法获取要呈现的默认图像字段 (field_image) - 它只是呈现图像的 url。所以我快到了,但肯定缺少一些基本的东西。请帮忙?

import React from "react"
import  Link, graphql  from "gatsby"
import Img from "gatsby-image"

const BlogPage = (data) => ( 
  <div> 
    <h1>Know What Grinds My Gears?</h1> 
     data.allNodeArticle.edges.map(
      (
         node ) => ( 

          <div> 
#the next Img line doesn't work (renders nothing)
            <Img fluid= node.relationships.field_image.uri.url  /> 
            <h3>  node.title  </h3>
            <div dangerouslySetInnerhtml= __html: node.body.summary  />
            <Link to=  node.id  >read</Link>
#the next <figure> line doesn't work (renders correct url to image file)
            <figure>  node.relationships.field_image.uri.url </figure>
         </div>

        )
      )
     
  </div> 
) 

export default BlogPage
export const query = graphql`
  query allNodeArticle 
    allNodeArticle  
    edges  
      node  
        id
        title
        body  
          value
          format
          processed
          summary
        
        relationships 
          field_image 
            uri 
              value
              url
            
          
        
       
    
  

  `

我做错了什么?

【问题讨论】:

node.relationships.field_image.uri.url 是一个有效的网址吗?例如,您可以将其用作&lt;img&gt; 的 href 属性吗? 感谢您的评论。 node.relationships.field_image.uri.url 给了我这个/sites/default/files/images/photo1.jpg 这是正确的。我需要以某种方式在它前面加上../path-to-my-drupal-site 才能正确提取图像,但我在gatsby-config.js 中设置了路径,所以我仍然认为我只是没有通过 GraphQL 正确访问它......? 【参考方案1】:

我们管理这个的方式是在节点图像的 GraphQL 上:

    field_image 
      relationships 
        field_media_image 
          localFile 
            publicURL
            childImageSharp 
              fluid(maxWidth: 520 maxHeight: 520, cropFocus: CENTER) 
                ...GatsbyImageSharpFluid
              
            
          
        
      
    

然后将其用作

    <Img
      fluid=
          data.nodePage.relationships.field_image.relationships.field_media_image.localFile.childImageSharp.fluid
        
    />

【讨论】:

感谢您的回复@jmolivas。我正在踏上这段旅程,很大程度上是基于你今年在 BadCamp 上的演讲。我在 GraphQL 中没有这些选项可供我使用。我不能从field_image 开始,如果我向下钻取allNodeArticle/edges/node/relationships/field_image,那么我唯一的选择是node__article,而不是field_media_image? I wonder if I don't have a required dependency? I'm on the Gatsby Starter Default and using gatsby-image`?再次感谢您的回复。 对不起,我在上面的评论中弄错了反引号。我现在无法编辑... =/ @TristanTheKnightAway 我计划下周发布 Drupal 发行版和 Gatsby 入门版,请保持联系。 @TristanTheKnightAway 您使用的是核心媒体模块还是贡献者? @TristanTheKnightAway 请注意此 GraphQL 片段 GatsbyImageSharpFluid 将无法在 GraphiQL 工具上运行。

以上是关于Gatsby / Drupal8 解耦:如何在从 Drupal 文件目录中提取的 Gatsby 页面上呈现图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 graphql 获得 drupal 节点的特定翻译

如何修复 drupal8 的错误“drush - command not found”?

如何在drupal8的配置实体中添加自定义属性

drupal8 如何更新

Drupal GraphQL 集成问题

使用fetchAPI和Drupal作为解耦后端的无效X-CSRF-Token请求标头