Extension

Query Functions

Manipulez les valeurs des champs dans la requête GraphQL, grâce à une collection d'utilitaires et de directives spéciales offrant des capacités de méta-programmation.

Logo
Target Image

Click to watch tutorial video - 12:09

Manipulez les valeurs des champs dans la requête GraphQL, grâce à une collection d'utilitaires et de directives spéciales offrant des capacités de méta-programmation.

Field to Input

Obtenez la valeur d'un champ, manipulez-la et transmettez-la en entrée à un autre champ, le tout dans la même requête.

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

Itération et manipulation des valeurs de champs

Ajout de méta-directives au schéma GraphQL pour itérer et manipuler les éléments de valeur des champs de type array et object :

  1. @underArrayItem
  2. @underJSONObjectProperty
  3. @underEachArrayItem
  4. @underEachJSONObjectProperty
  5. @objectClone

@underArrayItem fait en sorte que la directive imbriquée s'applique à un élément spécifique du tableau.

Dans la requête ci-dessous, seul le premier élément du tableau contenant les noms de catégorie est transformé en majuscules :

query {
  posts {
    categoryNames
      @underArrayItem(index: 0)
        @strUpperCase
  }
}

...produisant :

{
  "data": {
    "posts": {
      "categoryNames": [
        "NEWS",
        "sports"
      ]
    }
  }
}

Champ sur champ

Ajout de la directive @applyField, pour exécuter un certain champ sur la valeur du champ résolu.

Appliquée à un champ, la directive @applyField permet d'exécuter un autre champ (disponible sur le même type et appliqué au même objet), et soit de transmettre la valeur résultante à une autre directive, soit de remplacer la valeur du champ.

Dans la requête ci-dessous, le champ Post.title pour l'objet a la valeur "Hello world!". En ajoutant @applyField pour exécuter le champ _strUpperCase :

{
  post(by: { id: 1 }) {
    title
      @passOnwards(as: "input")
      @applyField(
        name: "_strUpperCase"
        arguments: {
          text: $input
        },
        setResultInResponse: true
      )
  }
}

...la valeur du champ est transformée en majuscules, produisant :

{
  "data": {
    "post": {
      "title": "HELLO WORLD!"
    }
  }
}

Manipulation conditionnelle des champs

Ajout des méta-directives @if et @unless au schéma GraphQL, pour exécuter conditionnellement une directive imbriquée sur le champ.

@if exécute ses directives imbriquées uniquement si une condition a la valeur true.

Dans cette requête, les utilisateurs "Leo" et "Peter" voient leurs noms convertis en majuscules, car ils figurent dans le tableau des « utilisateurs spéciaux », tandis que "Martin" ne l'est pas :

query {
  users {
    name
      @passOnwards(as: "userName")
      @applyField(
        name: "_inArray"
        arguments: {
          value: $userName
          array: ["Leo", "John", "Peter"]
        }
        passOnwardsAs: "isSpecialUser"
      )
      @if(
        condition: $isSpecialUser
      )
        @strUpperCase
  }
}

...produisant :

{
  "data": {
    "users": [
      {
        "name": "LEO"
      },
      {
        "name": "Martin"
      },
      {
        "name": "PETER"
      }
    ]
  }
}

Valeur par défaut d'un champ

Ajout de la directive @default, pour attribuer une valeur aux champs nuls ou vides.

Dans l'exemple ci-dessous, lorsqu'un article n'a pas d'image à la une, le champ featuredImage renvoie null :

{
  post(by: { id: 1 }) {
    featuredImage {
      id
      src
    }
  }
}
{
  "data": {
    "post": {
      "featuredImage": null
    }
  }
}

En utilisant @default, nous pouvons alors récupérer une image par défaut :

{
  post(by: { id: 1 }) {
    featuredImage @default(value: 55) {
      id
      src
    }
  }
}
{
  "data": {
    "post": {
      "featuredImage": {
        "id": 55,
        "src": "http://mysite.com/wp-content/uploads/my-default-image.webp"
      }
    }
  }
}

Suppression d'un champ de la réponse

Ajout de la directive @remove au schéma GraphQL, qui supprime la sortie d'un champ de la réponse.

Dans la requête ci-dessous, nous générons l'URL pour envoyer une requête HTTP en concaténant le domaine du site et le point de terminaison de l'API REST. Comme les valeurs de ces composants ne nous intéressent pas, il n'est pas nécessaire de les afficher dans la réponse, et nous pouvons les supprimer avec @remove :

query {
  siteURL: optionValue(name: "siteurl")
    @remove
 
  requestURL: _sprintf(
    string: "%s/wp-json/wp/v2/comments/11/?_fields=id,content,date",
    values: [$__siteURL]
  )
    @remove
 
  _sendJSONObjectItemHTTPRequest(
    input: {
      url: $__requestURL
    }
  )
}

...produisant cette réponse (notez que les champs siteURL et requestURL ont été supprimés) :

{
  "data": {
    "_sendJSONObjectItemHTTPRequest": {
      "id": 11,
      "date": "2020-12-12T04:07:36",
      "content": {
        "rendered": "<p>Btw, I really like this stuff<\/p>\n"
      }
    }
  }
}

Déclencheur d'erreur dans la réponse

Ajout du champ global _fail et de la directive @fail au schéma GraphQL, pour ajouter explicitement une entrée à la propriété errors dans la réponse, ainsi que du champ global _warn et de la directive @warn, pour ajouter une entrée à la propriété warnings dans la réponse.

Le champ _fail ajoute l'erreur systématiquement, et la directive @fail lorsque la condition spécifiée dans l'argument condition est remplie :

query {
  _fail(message: "Some error")
  
  posts {
    featuredImage @fail(
      condition: IS_NULL,
      message: "The post does not have a featured image"
    ) {
      id
      src
    }
  }
  
  users {
    name @fail(
      condition: IS_EMPTY,
      message: "The retrieved user does not have a name"
    )
  }
}

Acheter le pack All-Inclusive

Personnel
$79
/an
“All-Inclusive” pack
Licence pour 1 domaine
Acheter ->
  • 1 domaine
  • Support
  • Mises à jour du produit
Organisation
$99
/an
“All-Inclusive” pack
Licence pour 3 domaines
Acheter ->
  • 3 domaines
  • Support
  • Mises à jour du produit
Professionnel
$199
/an
“All-Inclusive” pack
Licence pour 10 domaines
Acheter ->
  • 10 domaines
  • Support
  • Mises à jour du produit

La licence est valable 1 an (renouvelable chaque année). Les prix sont en USD.

Besoin de plus de domaines ? Contactez-nous

Garantie de remboursement de 30 jours

Achetez n’importe quelle extension en toute confiance : vous pouvez demander un remboursement

Testimonial image

“Ce plugin est d’un autre niveau ! Il propulse votre site dans une toute nouvelle dimension et en fait une bête. Plus vous explorez ce qu’il peut faire, plus il vous impressionne. Si vous hésitez, achetez-le tout simplement : sinon, vous le regretterez. La documentation parle d’elle-même et est parmi les plus solides qui soient. Leo (le dev) est l’un des développeurs les plus vifs et perspicaces que j’aie rencontrés. Il répond très vite et on sent qu’il en sait énormément. Honnêtement, je suis emballé par tout ce que ce plugin permet de faire. Les possibilités sont quasi infinies, et si le SEO compte pour vous, cela aidera votre site à se positionner très fort.”

olmate - Développeur web

Abonnez-vous à notre newsletter

Restez au courant de toutes les nouveautés de Gato GraphQL.