Partager cet article :

Blog
Aug 07, 20238 min read

Drupal sans tête avec Next.js - un exemple simple à suivre

Drupal sans tête avec Next.js - un exemple simple à suivre

Drupal et Next.js

Drupal est un système de gestion de contenu (CMS) populaire et puissant qui facilite la création de flux éditoriaux et d'interfaces répondant à vos besoins spécifiques. Il est basé sur des modules et est hautement personnalisable avec une communauté sisable et une maturité technologique et peut être utilisé pour créer des applications web complètes. La tendance récente, dans le développement web en général, et par conséquent dans le développement de Drupal, est d'utiliser la technologie sans tête - seulement comme une API puissante, et en la détachant de l'interface utilisateur, où d'autres technologies telles que react et Next.js excellent.

Next.js est un framework react populaire pour construire des applications react qui exploitent le rendu côté serveur. Il possède certaines caractéristiques qui le rendent bien adapté aux projets Drupal headless, notamment le découpage automatique du code, l'optimisation des performances et le rendu côté serveur.

Dans ce tutoriel, nous allons d'abord créer une application drupal pour créer et stocker des boissons au café. Nous allons ensuite créer une application Next.js, récupérer les données disponibles dans notre application drupal et enfin afficher une liste de boissons au café. Nous supposons que vous avez déjà une certaine expérience de Drupal et de Next.js.

Application Drupal

Installer Drupal

Nous commençons par créer un nouveau site Drupal. Dans notre exemple, nous allons créer une application web qui montrera différentes options de café. Pour créer le site Drupal, nous allons utiliser docksal, qui est déjà installé sur notre machine. Il nous suffit de lancer :

$ fin project create

On nous demande ensuite le nom de l'application :

1. Nommez votre projet (alphanumérique en minuscules, trait de soulignement et trait d'union):  ; 
drupal-headless-coffee-drinks

On nous demande ensuite le nom de l'application :

Drupal 9 (Version Composer)

Maintenant nous continuons l'installation et finalement votre application sera créée via le CLI et le terminal vous montrera un lien url vers votre application nouvellement créée.

Ouvrez http://drupal-headless-coffee-drinks-app.docksal dans votre navigateur pour vérifier la configuration. 
Recherchez les identifiants de connexion de l'administrateur dans la sortie ci-dessus. 
Fait !  Toutes les étapes d'initialisation sont terminées.

Juste au-dessus du message contenant l'url de votre application, nous voyons les informations d'identification de l'utilisateur administrateur de votre application web Drupal. Conservez ces informations ! Maintenant, nous copions les informations d'identification et nous naviguons vers le login de l'application web

(drupal_app_url)/user/login  ; 
# dans notre cas : http://drupal-headless-coffee-drinks-app.docksal/user/login

Ajouter le module Next.js

Exécutez la commande suivante pour installer le module Next.js et ses dépendances.

$ composer require drupal/next

Activer les modules API

  1. Visitez /admin/modules
  2. Activez les modules suivants : Next.js et Next.js JSON:API.

enable api modules

Créer un type de contenu "boisson au café" et ajouter des données

Créons maintenant nos données sur les boissons au café. Tout d'abord, nous devons créer notre type de contenu pour les boissons au café. Pour ce faire, admin/structure/types et cliquez sur Ajouter un type de contenu, à titre d'exemple, remplissez ce qui suit :

Nom : Boisson au café, puis :

  • Cliquez sur Enregistrer et gérer les champs.
  • Cliquer sur le champ Ajouter
  • Sélectionner le texte brut
  • Dans le champ Étiquette, tapez "description"

add description and image fields

Ajoutons également un champ Image :

  • Cliquer sur ajouter un champ
  • Vous pouvez réutiliser un champ existant (du type de contenu d'article qui est créé par défaut).

Enfin, créons du contenu dans notre base de données. Pour ce faire, naviguez vers /admin/content et cliquez sur Add Content. Nous choisissons maintenant Boisson au café et remplissons les champs suivants

add coffee drink content

J'ai fait la même chose pour Americano, Espresso et Mocha et le résultat final est que j'ai 4 éléments créés en tant que type "Boisson au café" dans notre base de données. Le résultat final est 4 éléments de contenu - Boissons au café - stockés dans notre CMS. Voyons maintenant comment les récupérer dans notre application frontale Next.js.

4 Coffee drinks content items created image

Application Next.js

Créons notre prochaine application avec les paramètres suivants lorsque nous y sommes invités

$ npx create-next-app  ; 
✔ Quel est le nom de votre projet ? ... next-coffee-app  ; 
✔ Souhaitez-vous utiliser TypeScript avec ce projet ? ... Non / Oui  ; 
✔ Souhaitez-vous utiliser ESLint avec ce projet ? ... Non / Oui

Installer Tailwind

Ensuite, en option, installez tailwind dans le projet afin de styliser l'application de manière transparente par la suite. Pour installer tailwind, procédez comme suit

  • npm install -D tailwindcss postcss autoprefixer
  • npx tailwindcss init -p
  • Dans tailwind.config.js, ajoutez ceci :
/** @type {import('tailwindcss').Config} */  ; 
module.exports = {  ; 
contenu : [  ; 
 "./pages/**/*.{js,ts,jsx,tsx}",  ; 
 "./composants/**/*.{js,ts,jsx,tsx}",  ; 
 ],  ; 
 theme : {  ; 
 extend : {},  ; 
 },  ; 
 plugins : [],  ; 
}  ;
  • Allez dans global.css, supprimez tout et ajoutez les directives suivantes à notre CSS :
@tailwind base;  ; 
@tailwind components;  ; 
@tailwind utilities ;

Créer ENV

Créer un fichier .env et ajouter des variables qui pointent vers l'url de notre API :

NEXT_PUBLIC_DRUPAL_BASE_URL=http://drupal-headless-coffee-drinks-app.docksal

Récupérer les données relatives aux boissons au café et les transmettre au composant

// pages/index.tsx  ; 
import Head from "next/head";  ; 
import { GetStaticPropsResult } from "next";  ; 
import { DrupalNode } from "next-drupal";  ; 
import { DrupalClient } from "next-drupal";  ; 
import CoffeeDrinkList from "../components/CoffeeDrinkList" ; 
 
const drupal = new DrupalClient(process.env.NEXT_PUBLIC_DRUPAL_BASE_URL) ; 
 
interface IndexPageProps {  ; 
nodes : DrupalNode[];  ; 
} 

export default function IndexPage({ nodes } : IndexPageProps) {  ; 
 return (  ; 
 <>  ; 
 <Head>  ; 
 <title>Next.js pour Drupal</title>  ; 
 <meta  ; 
 name="description"  ; 
 content="Un site Next.js propulsé par un backend Drupal."  ; 
 />  ; 
 </Head>  ; 
 <CoffeeDrinkList drinks={nodes} />  ; 
 </>  ; 
 );  ; 
} 
export async function getStaticProps() : Promise<  ; 
 GetStaticPropsResult<IndexPageProps>  ; 
> ; {  ; 
 const nodes = await drupal.getResourceCollection<DrupalNode[]> ;(  ; 
"node--coffee_drink",  ; 
 {  ; 
 params : {  ; 
"filter[status]" : 1,  ; 
"fields[node--coffee_drink]":  ; 
"title,field_image,field_description,created",  ; 
 include : "field_image,uid",  ; 
 trier : "-created",  ; 
 },  ; 
 }  ; 
 ) ;

IndexPage renvoie un élément JSX représentant une page web. La page web contient un composant Head du module next/head, qui est chargé de définir le titre et la description de la page. La page web contient également un composant CoffeeDrinkList, auquel est transmis un tableau de boissons. La fonction IndexPage reçoit comme seul argument un objet contenant un tableau d'objets DrupalNode.

Nous avons également une fonction - getStaticProps, qui est utilisée pour générer les accessoires du composant IndexPage. La fonction getStaticProps récupère une collection de nœuds à partir d'un backend Drupal (dans ce cas, les boissons au café) à l'aide de la classe DrupalClient. Les nœuds sont filtrés par statut et triés par date de création, et la fonction renvoie un objet contenant les nœuds en tant que props pour le composant IndexPage.

Afficher les données sous forme de liste

// components/CoffeeDrinksList.tsx  ; 
 import { DrupalNode } from "next-drupal" ; 
 
interface CoffeeDrinkListProps {  ; 
 drinks : DrupalNode[];  ; 
 } 
 
 const CoffeeDrinkList = ({ drinks } : CoffeeDrinkListProps) => ; {  ; 
 return (  ; 
 <div className="h-full bg-white">  ; 
 <h1 className="mb-10 text-6xl font-black text-center">  ;

Liste des boissons au café  ; 
 </h1>  ; 
 <div className="grid grid-cols-3 gap-4 items-center justify-items-center">  ; 
 {drinks ?.length ? (  ; 
boissons.map((boisson) => ; (  ; 
 <div  ; 
key={boisson.id}  ; 
 className="max-w-sm rounded overflow-hidden shadow-lg m-2"  ; 
 >  ; 
 <img  ; 
 className="w-full h-[300px]"  ; 
 src={`${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}${drink.field_image.uri.url}`}  ; 
 />  ; 
 <div className="px-6 py-4">  ; 
 <div className="font-bold text-xl mb-2">{drink.title}</div>  ; 
 <p className="text-gray-700 text-base">  ; 
 {drink.field_description}  ; 
 </p>  ; 
 </div>  ; 
 <div className="px-6 pt-4 pb-2">  ;

 <span className="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">  ; 
Créé : {boire.created}  ; 
 </span>  ; 
 </div>  ; 
 </div>  ; 
 ))  ; 
 ) : (  ; 
 <p className="py-4">No nodes found</p>  ; 
 )}  ; 
 </div>  ; 
 </div>  ; 
 );  ; 
 } ; 
 
 export default CoffeeDrinkList ;

CoffeeDrinkList est un composant qui prend un tableau d'objets DrupalNode comme argument et renvoie un élément JSX représentant une liste de boissons au café. Le composant reçoit comme seul argument un objet contenant un tableau d'objets DrupalNode. Le composant se reporte au tableau d'objets DrupalNode, créant un nouvel élément JSX pour chaque nœud. Chaque élément JSX représente une seule boisson au café et affiche le titre, la description et la date de création de la boisson, ainsi qu'une image de la boisson.

Si le tableau des boissons est vide ou nul, le composant affiche un message indiquant qu'aucun nœud n'a été trouvé.

Le composant comprend également des classes CSS qui sont utilisées pour styliser les éléments. Ces classes proviennent de la bibliothèque tailwindcss.

Résultats finaux

Exécutez maintenant l'application suivante et voyez le résultat final

$ npm run dev

Nous avons fini par obtenir une page affichant le titre, la description, l'image et la date et l'heure de création de toutes les boissons au café - des données que nous avons récupérées dans notre application Drupal.

List of Coffee Drinks fetched from drupal api

Résumé

Dans l'exemple de l'article, nous avons vu comment créer une application Drupal, ajouter des types de contenu et des données pour ce type de contenu, exposer notre api Drupal et la consommer avec une application Next.js pour montrer une liste de boissons au café extraites de la base de données à nos utilisateurs. Pour des solutions plus complexes, qui peuvent nécessiter une authentification, l'ajout, la suppression et la mise à jour de données, reportez-vous à la documentation de Next.js pour Drupal : https://next-drupal.org/

S'ABONNER À NOTRE NEWSLETTER

Partager cet article :

S'ABONNER À NOTRE NEWSLETTER

Articles de blog connexes

    Pourquoi les startups hésitent à travailler avec une agence de développement de logiciels sur mesure - et comment nous répondons à toutes leurs préoccupations

    Blog

    Pourquoi les startups hésitent à travailler avec une agence de développement de logiciels sur mesure - et comment nous répondons à toutes leurs préoccupations

    <p>Les startups hésitent souvent à travailler avec des agences de logiciels pour des raisons de coût, de contrôle et de flexibilité. Découvrez comment les solutions logicielles sur mesure de Bulcode relèvent chaque défi, garantissant ainsi croissance et agilité.</p>

    Écrit par Svetoslava Angelova
    Nov 05, 20247 min read
    Construire une équipe Agile performante : Notre approche éprouvée

    Blog

    Construire une équipe Agile performante : Notre approche éprouvée

    Découvrez comment nous construisons des équipes Agile performantes en définissant des rôles clairs, en favorisant la collaboration et en utilisant des outils flexibles.

    Écrit par Svetoslava Angelova
    Aug 27, 202411 min read
    Drupal 11 : à quoi s'attendre ? Guide complet des nouvelles fonctionnalités et des améliorations

    Blog

    Drupal 11 : à quoi s'attendre ? Guide complet des nouvelles fonctionnalités et des améliorations

    Drupal 11 est sorti ! Dans cet article, découvrez ses fonctionnalités et améliorations passionnantes. Mettez-le à jour dès maintenant pour redéfinir votre stratégie numérique avec l'aide des experts de Bulcode.

    Écrit par Svetoslava Angelova
    Aug 05, 20249 min read
    Composants d'annuaire unique dans Drupal core : Une vue d'ensemble

    Blog

    Composants d'annuaire unique dans Drupal core : Une vue d'ensemble

    Découvrez comment les composants à répertoire unique (SDC) de Drupal Core rationalisent le processus de développement en encapsulant les fichiers liés aux composants dans un répertoire unique. Découvrez les avantages des SDC et suivez un guide étape par étape pour les mettre en œuvre dans vos projets Drupal.

    Écrit par Nikolay Tsekov
    Aug 07, 20244 min read
    Qu'est-ce que la méthode Agile et pourquoi l'utiliser ?

    Blog

    Qu'est-ce que la méthode Agile et pourquoi l'utiliser ?

    La méthode Agile est une méthode de livraison de logiciels itérative et échelonnée dans le temps qui vise à fournir des logiciels progressivement tout au long du projet plutôt qu'en une seule fois vers la fin.

    Écrit par Svetoslava Angelova
    Aug 08, 20235 min read
    NVM vs NPM vs Yarn

    Blog

    NVM vs NPM vs Yarn

    Par rapport à ces trois technologies, le NVM diffère des deux autres. Node Version Manager (NVM) est utilisé pour gérer les versions de Node.js. NPM et Yarn sont des gestionnaires de paquets Node.js. Ils permettent de télécharger, d'installer et de gérer des paquets lors du développement en JavaScript.

    Écrit par Ventsislav Venkov
    Aug 07, 20235 min read
    Quel modèle d'engagement informatique vous convient le mieux ?

    Blog

    Quel modèle d'engagement informatique vous convient le mieux ?

    Prix fixe, temps et matériel, ou équipes dédiées ? Examinez attentivement les avantages et les inconvénients du modèle d'engagement pour votre projet.

    Écrit par Svetoslava Angelova
    Aug 07, 202311 min read
    Les sites web des aéroports de Varna et Burgas utilisent des composants React dans Drupal

    Blog

    Les sites web des aéroports de Varna et Burgas utilisent des composants React dans Drupal

    Drupal est un système modulaire dont les fonctions peuvent être adaptées à de nombreux besoins différents, ce qui est particulièrement important pour les projets d'administration publique.

    Écrit par Mihail Shahov
    Aug 08, 20234 min read
    Laravel Mix - un wrapper simple et puissant autour de Webpack

    Blog

    Laravel Mix - un wrapper simple et puissant autour de Webpack

    Laravel Mix fournit une API fluide pour définir les étapes de construction de webpack pour votre application Laravel en utilisant plusieurs pré-processeurs CSS et JavaScript communs.

    Écrit par Stefani Tashkova
    Aug 07, 20234 min read
    Qu'est-ce que Scrum ?

    Blog

    Qu'est-ce que Scrum ?

    Scrum fait partie de la méthodologie Agile. C'est le cadre le plus populaire pour le développement agile, et c'est un cadre de processus simple.

    Écrit par Svetoslava Angelova
    Aug 08, 20235 min read
    Rôles dans Scrum

    Blog

    Rôles dans Scrum

    Les rôles Scrum et la manière dont vous pouvez les intégrer dans votre organisation.

    Écrit par Svetoslava Angelova
    Aug 07, 20234 min read
    Événements SCRUM

    Blog

    Événements SCRUM

    Scrum définit plusieurs événements (parfois appelés cérémonies) qui se déroulent au cours de chaque sprint : la planification du sprint, la mêlée quotidienne, la revue du sprint et la rétrospective du sprint.

    Écrit par Svetoslava Angelova
    Aug 07, 20233 min read

    PRENDRE CONTACT

    Vous avez un projet à lancer ?