Tutoriel du schéma
Tutoriel du schémaLeçon 2 : Interroger des données dynamiques

Leçon 2 : Interroger des données dynamiques

Gato GraphQL peut encore augmenter les capacités de WordPress pour rechercher des données via l'utilisation de champs "fonction" (un type de champ distinct qui fournit des fonctionnalités plutôt que des données), nous permettant de calculer dynamiquement des données, de les réinjecter dans la requête, et d'affecter la réponse avec un contrôle granulaire.

Exemples

Gato GraphQL fournit des champs de fonction sous le concept de Champs globaux : des champs accessibles sous tous les types du schéma GraphQL. (Les champs normaux dans GraphQL, en revanche, ne sont accessibles que sous un type spécifique, comme Post ou User).

Par convention, les champs globaux dans Gato GraphQL commencent par _ (et les champs normaux non).

L'extension PHP Functions Via Schema fournit de nombreuses fonctions PHP les plus courantes comme champs globaux, notamment :

  • _arrayItem
  • _arrayJoin
  • _date
  • _equals
  • _inArray
  • _intAdd
  • _isEmpty
  • _isNull
  • _makeTime
  • _objectProperty
  • _sprintf
  • _strContains
  • _strRegexReplace
  • _strSubstr
  • _time,
  • Et bien d'autres...

Nous pouvons créer des données générées dynamiquement, et les passer comme entrée à un filtre pour récupérer des articles, des commentaires, etc.

Cette requête récupère le nombre de commentaires ajoutés au site au cours des dernières 24 h, calculé comme « heure actuelle moins 86400 secondes » :

query {
  timeNow: _time  
  time24HsAgo: _intSubtract(
    subtract: 86400,
    from: $__timeNow
  )
  date24HsAgo: _date(
    format: "Y-m-d\\TH:i:sO",
    timestamp: $__time24HsAgo
  )  
  commentsAddedInLast24Hs: commentCount(
    filter: {
      dateQuery: {
        after: $__date24HsAgo
      }
    }
  ) 
}

$__timeNow est une variable créée dynamiquement par l'extension Field To Input, qui nous permet d'obtenir la valeur d'un champ et de la passer comme entrée à un autre champ dans cette même opération.

Le champ dont on souhaite obtenir la valeur est référencé en utilisant la syntaxe « Variable » $, et __ avant l'alias ou le nom du champ :

{
  posts {
    excerpt
 
    # Referencing previous field with name "excerpt"
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
 
    # Referencing previous field with alias "isEmptyExcerpt"
    isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
  }
}

Cette requête récupère le nombre de commentaires ajoutés au site à partir de « il y a 24 heures », « il y a 1 an », « début du mois » et « début de l'année » :

query {
  timeNow: _time  
  time24HsAgo: _intSubtract(subtract: 86400, from: $__timeNow)
  date24HsAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time24HsAgo)  
  time1YearAgo: _intSubtract(subtract: 31536000, from: $__timeNow)
  date1YearAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time1YearAgo)
  timeBegOfThisMonth: _makeTime(hour: 0, minute: 0, second: 0, day: 1)
  dateBegOfThisMonth: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisMonth)
  timeBegOfThisYear: _makeTime(hour: 0, minute: 0, second: 0, month: 1, day: 1)
  dateBegOfThisYear: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisYear)
  
  commentsAddedInLast24Hs: commentCount(filter: { dateQuery: { after: $__date24HsAgo } } )  
  commentsAddedInLast1Year: commentCount(filter: { dateQuery: { after: $__date1YearAgo } } )  
  commentsAddedSinceBegOfThisMonth: commentCount(filter: { dateQuery: { after: $__dateBegOfThisMonth } } )  
  commentsAddedSinceBegOfThisYear: commentCount(filter: { dateQuery: { after: $__dateBegOfThisYear } } )
}

Cette requête est identique à la précédente, mais elle récupère le format de temps standardisé "Y-m-d\\TH:i:sO" depuis la constante PHP DATE_ISO8601 :

query {
  # This PHP constant will provide standard time format "Y-m-d\\TH:i:sO"
  DATE_ISO8601: _env(name: DATE_ISO8601)
  timeNow: _time  
  time24HsAgo: _intSubtract(
    subtract: 86400,
    from: $__timeNow
  )
  date24HsAgo: _date(
    format: $__DATE_ISO8601,
    timestamp: $__time24HsAgo
  )
}

Le champ _env est fourni via l'extension Constantes PHP et Variables d'Environnement via Schema.

Via la Schema Configuration appliquée et les paramètres du plugin, nous pouvons configurer quelles constantes et variables d'environnement peuvent être interrogées.