# Création d'un plugin pour Thelia Blocks ## Exemple : Création d'un plugin de citation ### Introduction Ce plugin devra pouvoir afficher un champ pour indiquer le nom de l'auteur, et un second champ permettant d'insérer la citation en question. Dans cet exemple, nous allons créer le plugin depuis un module Thelia. Si vous ne connaissez pas encore le fonctionnement des modules Thelia, nous vous conseillons vivement d'aller lire la [documentation officielle sur les modules Thelia](https://doc.thelia.net/en/documentation/modules/index.html). ### Architecture du module Lors de cet exemple, nous utiliserons une architecture bien spécifique. Vous êtes évidemment libre de structurer votre module comme vous le souhaitez. ``` . ├── ... ├── local/modules/ModuleCitation │ ├── Config/ │ │ ├── module.xml │ │ └── config.xml │ ├── Hook/ │ │ └── BackHook.php │ └── templates/ │ │ ├── frontOffice/default/blocks/ │ │ │ ├── blockCitation.html │ │ │ └── ... │ │ └── backOffice/default/ │ │ │ ├── src/ │ │ │ │ └── Citation.jsx │ │ │ ├── tsup.config.js │ │ │ └── index.js │ ├── package.json │ └── ModuleCitation.php └── ... ``` ### Installation des dépendances : ```bash npm install react tsup @openstudio/blocks-editor ``` ### 1 - Création du composant Commençons par créer un fichier `Citation.jsx` et par définir les données initiales du plugin : ```js // ./templates/backOffice/default/src/Citation.jsx const initialData = { author: "", quote: "", }; ``` Ensuite, nous allons pouvoir écrire le composant React permettant de visualiser le plugin dans l'éditeur de Thelia Blocks. :warning: Attention : un plugin Thelia Blocks prends toujours deux `props` : | Prop | Type | Description | | :--------- | :--------- | :--------------------------------------------------------- | | `data` | `any` | Objet contenant les données du plugin | | `onUpdate` | `Function` | Fonction permettant de mettre à jour les données du plugin | Exemple : ```jsx // ./templates/backOffice/default/src/Citation.jsx const BlockQuoteComponent = ({ data, onUpdate }) => { return (
onUpdate({ ...data, author: e.target.value })} />