Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Un exemple général du modèle de référentiel dans WordPress

39

D’après mon expérience, la façon dont nous interagissons d’abord avec le modèle de conception du référentiel influence souvent la façon dont nous pensons au modèle. (Toutes les premières impressions sont des impressions durables, n’est-ce pas ?)

Le but de cet article est de montrer comment il peut être implémenté dans WordPress spécifiquement lors de l’écriture de plugins orientés objet pour lire des données (l’écriture de données peut être couverte dans un autre article), mais avant cela, j’ai essayé de penser à quelques cohérences entre les variations du modèle que j’ai vu.

D’une manière générale, voici ce que je pense qu’un modèle de référentiel devrait faire :

  • fournir un lieu unique pour lire les données,
  • résumer les détails de l’accès aux données,
  • et avoir une interface cohérente pour le faire.

Cela signifie que tout ce que vous devez récupérer à partir de l’application peut être récupéré à partir de la base de données. Mais comment sa récupération peut être considérée comme une boîte noire. C’est au développeur d’implémenter le modèle.

Et dans le cas de ceux qui lisent ce post, c’est très probablement nous.

Le modèle de référentiel dans WordPress

Il y a quelques années, j’ai écrit sur le modèle de référentiel en donnant un exemple concret. C’est toujours pertinent, mais le but de ce que je veux couvrir dans ce post est un peu différent.

Plutôt que de montrer une implémentation particulière ancrée dans un exemple réel, je préfère expliquer comment nous pouvons utiliser ce modèle dans notre travail quotidien.

Les deux choses à garder à l’esprit lors de la lecture de ceci sont:

  1. du point de vue de l’utilisateur, le magasin de données sous-jacent n’a pas d’importance,
  2. du point de vue du développeur, le modèle nous permet de travailler avec plusieurs sources de données et également de modéliser un exemple de magasin de données afin que nous puissions tester les données à l’unité.

Lors de la mise en œuvre du modèle, la provenance des données n’a pas d’importance. Au moins tant que vous êtes le développeur ou l’objet client qui l’appelle. Le magasin de données peut être une base de données, un ensemble de fonctions API ou une combinaison des deux.

Supposons, alors, que vous travaillez avec un type de publication personnalisé pour les événements et que vous travaillez également avec des métadonnées de publication et des options liées à quelque chose comme des événements.

Vous pouvez faire quelque chose comme:

  • obtenir le nom de l’événement,
  • trouver des informations sur le lieu de l’événement,
  • récupérer le premier type de message et son statut classés par son ID

Toutes ces informations peuvent être dispersées à différents endroits et la manière dont elles sont récupérées peut varier.

1 Obtenir le nom de l’événement

Si nous travaillons avec un type de publication personnalisé et que nous devons obtenir le nom de l’événement, nous pouvons utiliser l’ID d’une publication et l’une des fonctions API de WordPress pour le faire.

<?php

/**
 * Retrieves the title of the Event, a custom post type.
 *
 * @param  int    $eventId the ID of the event post type
 * @return string          the title of the post.
 */
public function getName(int $eventId): string
{
  return get_the_title($eventId);
}

Il s’agit d’un cas dans lequel le magasin de données est toujours abstrait de nous et, à la place, exploite l’API WordPress existante.

2 Obtenir le lieu de l’événement

Dans ce cas, nous pouvons supposer que l’emplacement de l’événement a été saisi manuellement ou peut-être récupéré par une API tierce. Et puisque l’emplacement est associé à un événement spécifique, il peut se trouver dans la table des métadonnées de la publication.

Un exemple général du modèle de référentiel dans WordPress

Encore une fois, nous pouvons le récupérer en utilisant des fonctions API préexistantes ; cependant, dans des situations comme celle-ci, il est logique d’avoir une fonction d’assistance car nous aurons probablement accès à d’autres métadonnées également.

Alors d’abord, l’assistant :

<?php 
/**
 * A helper function for easily retrieving post meta data for a given Event.
 *
 * @param int    $id  the ID of the event
 * @param string $key the key for the post meta data for which we're retrieveing the data
 *
 * @return string the result of retrieiving the meta data
 */
private function get(int $id, string $key): string
{
    return get_post_meta($id, $key, true);
}

Et puis la fonction qui utilise le helper pour obtenir l’emplacement :

<?php
/**
 * @param  int    $eventID the ID of the event
 * @return string          the name of the event of an empty string
 */
public function getLocationName($eventId): string
{
    return $this->get($eventId, 'ymc-event-location-name');
}

Mais dans ces deux exemples, nous utilisons toujours des fonctions API existantes. Qu’en est-il du cas où nous devons parler à la base de données ?

3 Récupération d’une URL de publication unique

Dans ce cas, nous allons communiquer directement avec la base de données WordPress. Si vous êtes familier avec l’ objet $wpdb et SQL, ce ne sera pas un gros problème.

Un exemple général du modèle de référentiel dans WordPress

Si ce n’est pas le cas, je vous recommande de lire la fonction prepare ainsi que la fonction get_results.

Compte tenu de cela, nous pouvons écrire une requête qui fera ce qui suit :

  1. saisir tous les messages où l’ID correspond à une certaine valeur, le type de message et le statut du message sont une certaine valeur, et nous ordonnerons les résultats par valeur croissante de l’ID,
  2. Ensuite, nous utiliserons les résultats de cette requête pour obtenir une valeur unique.

Et nous pouvons le faire en accédant à la base de données et en écrivant une requête imbriquée :

<?php

/**
 * @return string the URL to the event next to the current event.
 */
public function getNextEventUrl()
{
    global $wpdb;
    $results = $wpdb->get_results(
        $wpdb->prepare(
            "
            SELECT *
            FROM $wpdb->posts
            WHERE ID > (SELECT ID
                FROM $wpdb->posts
                WHERE ID = %d
                AND post_type = '%s'
                AND post_status = '%s'
                ORDER BY ID ASC) AND post_type = '%s'
            AND post_status = '%s'
            ORDER BY ID ASC
            LIMIT 1
        ",
            get_the_ID(),
            'ymc-events',
            'publish',
            'ymc-events',
            'publish') );

  $result = (isset($result[0]))? $result[0]: '';

  return $result;
}

Et puis tout cela peut être encapsulé dans une seule classe qui serait, par exemple, le Event Repository (ou EventRepository ).

J’en aurai plus à ce sujet dans un post de suivi, cependant. À savoir, comment gérer déterminer quelles fonctions appartiennent où, les conventions de nommage et comment gérer la persistance si vous souhaitez également introduire cela dans votre référentiel.

Référentiel défini

Avant toute chose, gardez ceci à l’esprit :

Le modèle de référentiel masque la manière dont les données sont récupérées, mais fournit un moyen cohérent de récupérer les données auxquelles il est associé.

Certains peuvent également ajouter comment il peut être récupéré et comment il peut être écrit, mais j’en parlerai peut-être dans un autre article.

Source d’enregistrement: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More