Aller au contenu principal

Introduction

Définissez des champs personnalisés pour votre contenu sans toucher au code.

🎯 Que fait ce module ?

Le module AttributesSets vous permet d'utiliser des champs personnalisés pour votre contenu (produits, pages, formulaires, etc.) sans les coder en dur dans votre application.

Considérez-le comme un constructeur de formulaires pour vos données - vous définissez les champs dont vous avez besoin, et OneEntry s'occupe du reste.

📖 Explication Simple

Imaginez que vous construisez une boutique en ligne. Chaque produit a besoin de :

  • Nom (texte)
  • Prix (nombre)
  • Image (photo)
  • Description (texte long)
  • Catégorie (liste déroulante)

Au lieu de coder ces champs en dur dans votre application, vous utilisez Attributes pour les définir dans le panneau d'administration de OneEntry. Ensuite, vous pouvez :

  • ✅ Ajouter de nouveaux champs à tout moment (pas de modifications de code !)
  • ✅ Réutiliser des champs à travers différents types de contenu
  • ✅ Changer les types de champs sans redéployer
  • ✅ Gérer toute la structure de contenu en un seul endroit

Exemple concret :

Sans Attributes (codé en dur) :
- Code : const product = { name, price, image, description }
- Pour ajouter le champ "couleur" → Changer le code, redéployer, attendre ❌

Avec Attributes (dynamique) :
- Panneau d'administration : Ajouter l'attribut "couleur"
- Le code inclut automatiquement le nouveau champ ✅
- Pas de déploiement nécessaire ! ✅

✨ Concepts Clés

Qu'est-ce qu'un Attribut ?

Un attribut est un champ unique qui stocke des données.

Exemples :

  • Nom du produit (chaîne de caractères)
  • Prix du produit (flottant)
  • Image du produit (image)
  • Date de publication (date)

Qu'est-ce qu'un Ensemble d'Attributs ?

Un ensemble d'attributs est une collection d'attributs qui définissent une structure.

Exemple : Ensemble d'Attributs de Produit

- name (chaîne de caractères)
- price (flottant)
- description (texte)
- images (groupe d'images)
- category (liste)
- inStock (entier)

Pourquoi Utiliser des Ensembles d'Attributs ?

Sans AttributesAvec Attributes
❌ Champs codés en dur✅ Champs dynamiques
❌ Modifications de code nécessaires✅ Éditez dans le panneau d'administration
❌ Redéploiement requis✅ Mises à jour en direct
❌ Structure rigide✅ Structure flexible
❌ Code dupliqué✅ Ensembles réutilisables

📋 Ce Que Vous Devez Savoir

Trois Termes Importants

TermeCe Que C'estExemple
MarkerIdentifiant de code unique"product_name"
TypeQuel type de données il stocke"string", "integer", "image"
ValueValeur de l'attribut"Nom du Produit"

Important concernant les Markers :

  • Doit être unique
  • Pas d'espaces autorisés (utilisez _ à la place)
  • Ne peut pas commencer par un chiffre
  • Utilisez des minuscules pour la cohérence

Exemples :

  • ✅ Bon : product_name, price_usd, main_image
  • ❌ Mauvais : product name, 2nd_price, Product Name

Réutilisabilité

Les ensembles d'attributs peuvent être réutilisés à travers différentes entités :

Ensemble d'Attributs "Infos de Base" :
- title (chaîne de caractères)
- description (texte)
- publish_date (date)

Utilisé par :
✅ Articles de blog
✅ Articles d'actualité
✅ Pages de produits
✅ Annonces d'événements

Pourquoi cela compte : Changez une fois, mises à jour partout !


📚 Types de Données Disponibles

Les attributs peuvent stocker différents types de données. Choisissez le bon type pour chaque champ.

Tableau de Référence Rapide

TypeMeilleur PourUtilisation Exemple
stringTexte courtNom du produit, email
textTexte long formatéArticle de blog, description
textWithHeaderTexte avec titreSections d'articles
integerNombres entiersQuantité, âge
realDécimales de haute précisionDonnées scientifiques
floatNombres décimauxPrix, évaluation
dateJuste la dateDate de naissance, date limite
dateTimeDate + heureDébut d'événement, publié à
timeJuste l'heureHeures d'ouverture
fileTout fichierPDF, document
imageImage uniqueAvatar, logo
groupOfImagesPlusieurs imagesGalerie photo
radioButtonChoix uniqueTaille (S/M/L)
listSélection déroulantePays, catégorie
entityLien vers d'autres contenusProduits associés
timeIntervalPlage de datesPériode de promotion
jsonDonnées structurées personnaliséesRéponse API

🔍 Descriptions Détaillées des Types de Données

Types de Texte

Quand utiliser quoi :

  • string - Ligne unique, moins de 255 caractères (nom, email, titre)
  • text - Plusieurs paragraphes, prend en charge le formatage (articles, descriptions)
  • textWithHeader - Texte nécessitant un titre (sections de blog, FAQ)

Types de Nombres

Quand utiliser quoi :

  • integer - Pas de décimales nécessaires (âge, quantité, vues)
  • float - Décimales standard (prix 19,99 $, évaluation 4,5)
  • real - Précision supplémentaire nécessaire (calculs scientifiques)

Types de Date/Heure

Quand utiliser quoi :

  • date - Juste le jour (anniversaire, date limite)
  • time - Juste l'heure (heures d'affaires, heure de rendez-vous)
  • dateTime - Les deux nécessaires (début d'événement, article publié)
  • timeInterval - Période entre les dates (durée de vente, dates de vacances)

Types de Fichiers et d'Images

Quand utiliser quoi :

  • file - Tout document (PDF, DOC, ZIP)
  • image - Une image (photo de produit, avatar)
  • groupOfImages - Plusieurs images (galerie, images de produit)

Types de Sélection

Quand utiliser quoi :

  • radioButton - Choisissez UNE seule option (Oui/Non, Taille S/M/L)
  • list - Menu déroulant avec options (Pays, Catégorie, Statut)

Types Avancés

  • entity - Lien vers d'autres pages/produits (Articles Associés, Catégories)
  • json - Stocker des structures de données complexes (réponses API, paramètres)

📖 Exemples de Types de Données

Voici des exemples techniques de la structure de chaque type de données.

Cliquez pour voir tous les exemples de types de données

Référence des Types de Données

Les types de données peuvent être des types suivants :

  • String : Texte simple, par exemple, "Bonjour, le monde !".

Exemple :

{
"type": "string",
"value": {},
"marker": "string",
"position": 1,
"listTitles": [],
"validators": {
"requiredValidator": {
"strict": true
}
},
"localizeInfos": {
"title": "String"
},
"additionalFields": [
{
"type": "integer",
"value": "10",
"marker": "Extra"
}
]
}

  • Text : Texte plus long, souvent formaté, par exemple, un article ou une lettre.

Exemple :

{
"type": "text",
"value": {},
"marker": "text",
"position": 2,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Text"
},
"additionalFields": []
}

  • Text with Header : Texte avec un en-tête qui peut être utilisé pour désigner un sujet ou une catégorie.

Exemple :

{
"type": "textWithHeader",
"value": {},
"marker": "text_with_header",
"position": 3,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Text With Header"
},
"additionalFields": []
}

  • Integer : Un entier, par exemple, 5, 100, -2.

Exemple :

{
"type": "integer",
"value": {},
"marker": "integer",
"position": 4,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Integer"
},
"additionalFields": []
}

  • Real : Identique à Float, mais avec une précision plus élevée.

Exemple :

{
"type": "real",
"value": {},
"marker": "real_number",
"position": 5,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Real Number"
},
"additionalFields": []
}

  • Float : Un type de données pour les nombres à virgule flottante qui peuvent avoir une partie décimale, par exemple, 3,14, 1,5, -0,25.

Exemple :

{
"type": "float",
"value": {},
"marker": "float",
"position": 6,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Float"
},
"additionalFields": []
}

  • Date and Time : Une combinaison de date et d'heure, par exemple, 2023-10-27 10:00:00.

Exemple :

{
"type": "dateTime",
"value": {},
"marker": "date_time",
"position": 7,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "DateTime"
},
"additionalFields": []
}

  • Date : Une date, par exemple, 2023-10-27.

Exemple :

{
"type": "date",
"value": {},
"marker": "date",
"position": 8,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Date"
},
"additionalFields": []
}

  • Time : Une heure, par exemple, 10:00:00.

Exemple :

{
"type": "date",
"value": {},
"marker": "date",
"position": 8,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Date"
},
"additionalFields": []
}

  • File : Tout fichier sur votre ordinateur, par exemple, un document, une image, de la musique.

Exemple :

{
"type": "file",
"value": {},
"marker": "file",
"position": 10,
"listTitles": [],
"validators": {
"checkingFilesValidator": {
"maxUnits": "kb",
"maxValue": "2000",
"minUnits": "kb",
"minValue": 0,
"extensions": []
}
},
"localizeInfos": {
"title": "File"
},
"additionalFields": []
}

  • Image : Une image, par exemple, une photographie, un dessin.

Exemple :

{
"type": "image",
"value": {},
"marker": "image",
"position": 11,
"listTitles": [],
"validators": {
"sizeInPixelsValidator": {
"maxX": "500",
"maxY": "500"
}
},
"localizeInfos": {
"title": "Image"
},
"additionalFields": []
}

  • Group of Images : Une collection d'images, par exemple, un album photo.

Exemple :

{
"type": "groupOfImages",
"value": {},
"marker": "image_group",
"position": 12,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Image Group"
},
"additionalFields": []
}

  • Radio Button : Un bouton de sélection à partir duquel une seule option peut être choisie.

Exemple :

{
"type": "radioButton",
"value": {},
"marker": "radio",
"position": 13,
"listTitles": [
{
"title": "A",
"value": "a",
"extended": {
"type": null,
"value": null
},
"position": 1
},
{
"title": "B",
"value": "b",
"extended": {
"type": null,
"value": null
},
"position": 2
}
],
"validators": {},
"localizeInfos": {
"title": "Radio"
},
"additionalFields": []
}

  • List : Une liste d'éléments, par exemple, une liste de courses.

Exemple :

{
"type": "list",
"value": {},
"marker": "list",
"position": 14,
"listTitles": [
{
"title": "A",
"value": "a",
"extended": {
"type": null,
"value": null
},
"position": 1
},
{
"title": "B",
"value": "b",
"extended": {
"type": null,
"value": null
},
"position": 2
},
{
"title": "C",
"value": "c",
"extended": {
"type": "string",
"value": "Valeur Supplémentaire"
},
"position": 3
}
],
"validators": {},
"localizeInfos": {
"title": "List"
},
"additionalFields": []
}

  • Entity : Une entité représentant un objet.

Exemple :

{
"type": "entity",
"value": {},
"marker": "entity",
"position": 15,
"listTitles": [
{
"title": "Produits",
"value": {
"id": 1,
"depth": 0,
"parentId": null,
"position": 1,
"selected": true
}
},
{
"title": "Page Normale",
"value": {
"id": 4,
"depth": 0,
"parentId": null,
"position": 2,
"selected": true
}
},
{
"title": "Erreur",
"value": {
"id": 2,
"depth": 0,
"parentId": null,
"position": 3,
"selected": true
}
}
],
"validators": {},
"localizeInfos": {
"title": "Entity"
},
"additionalFields": [
{
"type": "string",
"value": "Champ de Test",
"marker": "test_field"
}
]
}

  • Time interval : Un calendrier flexible avec une interface conviviale pour gérer les données d'intervalle de temps.

Exemple :

{
"type": "timeInterval",
"value": {},
"marker": "time_interval",
"position": 16,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Time Interval"
},
"additionalFields": []
}

  • JSON : Certaines données au format JSON.

Exemple :

{
"type": "json",
"value": {},
"marker": "json",
"position": 17,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Json"
},
"additionalFields": []
}

L'interface de remplissage de contenu correspondra au type de données sélectionné pour chaque champ d'attribut.


💡 Notes Importantes

Validateurs

Vous pouvez ajouter des validateurs pour les attributs afin d'assurer la qualité des données :

  • Champs requis
  • Longueur min/max pour le texte
  • Limites de taille de fichier pour les téléchargements
  • Dimensions en pixels pour les images
  • Plages de dates

En savoir plus : Consultez la section "Validateurs" pour une configuration détaillée.

Ensembles d'Attributs Partagés

⚠️ Important : Si un ensemble d'attributs est utilisé par plusieurs entités, soyez prudent lors des modifications :

Suppression d'un attribut :

  • ❌ Le supprime partout où l'ensemble est utilisé
  • ❌ Supprime tout le contenu dans ce champ
  • ⚠️ Ne peut pas être annulé !

Ajout d'un attribut :

  • ✅ Ajouté partout où l'ensemble est utilisé
  • ✅ Contenu existant inchangé
  • ℹ️ Le nouveau champ sera vide pour les éléments existants

Exemple :

"Infos Produit" utilisé par :
- Produits Physiques
- Produits Numériques
- Services

Supprimer l'attribut "poids" → Supprimé de TOUS les trois ! ⚠️

📊 Tableau de Référence Rapide - Méthodes Courantes

MéthodeCe Qu'elle FaitQuand l'utiliser
getAttributes()Récupérer tous les objets d'ensembles d'attributs.
getAttributesByMarker()Récupérer tous les attributs par marqueur avec des données de l'ensemble d'attributs.
getAttributeSetByMarker()Récupérer un seul objet d'ensemble d'attributs par marqueur.
getSingleAttributeByMarkerSet()Récupérer un attribut avec des données de l'ensemble d'attributs.

❓ Questions Fréquemment Posées (FAQ)

Quelle est la différence entre string et text ?

  • string - Texte court, ligne unique (max ~255 caractères). Utilisez pour les noms, titres, emails.
  • text - Texte long, plusieurs paragraphes, prend en charge le formatage et HTML. Utilisez pour les descriptions, articles.

Quand devrais-je utiliser integer vs float ?

  • integer - Nombres entiers uniquement : 1, 2, 100, -5. Utilisez pour les quantités, les comptes, les âges.
  • float - Nombres décimaux : 19.99, 4.5, -0.25. Utilisez pour les prix, les évaluations, les mesures.
  • real - Comme float mais avec une précision plus élevée. Utilisez pour les calculs scientifiques.

Meilleure pratique : Planifiez vos types d'attributs avant d'ajouter du contenu.


Que se passe-t-il si je supprime un attribut ?

  • Vous ne pouvez pas supprimer un attribut s'il est utilisé dans un ensemble d'attributs.

Puis-je réutiliser le même attribut dans différents ensembles d'attributs ?

Non, chaque attribut appartient à un seul ensemble d'attributs. Mais vous pouvez :

  • Créer des attributs similaires avec des marqueurs différents
  • Réutiliser des ensembles d'attributs entiers à travers plusieurs entités

Qu'est-ce que le "marker" et pourquoi est-il important ?

Le marker est l'identifiant technique que vous utilisez dans le code :

// Dans votre code :
product.attributeValues.product_name // ← "product_name" est le marker

// VS le nom (affiché dans l'administration) :
"Nom du Produit" // ← Ceci est juste pour les humains

Règles pour les markers :

  • Doit être unique
  • Pas d'espaces (utilisez _)
  • Ne peut pas commencer par des chiffres
  • Utilisez des minuscules
  • Choisissez des noms descriptifs

Comment savoir quel type utiliser pour mes données ?

Demandez-vous :

  1. Est-ce du texte ?

    • Court (< 255 caractères) ? → string
    • Long avec formatage ? → text
    • Nécessite un titre ? → textWithHeader
  2. Est-ce un nombre ?

    • Pas de décimales ? → integer
    • A des décimales ? → float
    • Précision scientifique ? → real
  3. Est-ce un choix ?

    • Choisissez une option ? → radioButton
    • Menu déroulant ? → list
  4. Est-ce un fichier ?

    • Image ? → image ou groupOfImages
    • Document ? → file
  5. Est-ce une date ?

    • Juste la date ? → date
    • Date + heure ? → dateTime
    • Période de temps ? → timeInterval

Puis-je avoir des attributs imbriqués (attributs à l'intérieur d'attributs) ?

Pas directement, mais vous pouvez utiliser :

  • entity type pour lier à d'autres contenus
  • json type pour stocker des données structurées
  • Plusieurs ensembles d'attributs pour organiser des champs connexes

Comment ajouter des règles de validation ?

Dans le panneau d'administration de OneEntry :

  1. Allez à votre ensemble d'attributs
  2. Cliquez sur un attribut
  3. Ajoutez des validateurs (requis, min/max, regex, etc.)
  4. Enregistrez les modifications

Validateurs courants :

  • Champ requis
  • Longueur min/max
  • Format d'email
  • Format d'URL
  • Limites de taille de fichier
  • Dimensions d'image

🎓 Meilleures Pratiques

  • Utilisez des marqueurs descriptifs (product_price pas pp)
  • Planifiez les types d'attributs avant d'ajouter du contenu
  • Réutilisez les ensembles d'attributs lorsque cela est possible
  • Ajoutez des validateurs pour garantir la qualité des données
  • Documentez l'utilisation de chaque attribut

Plus d'informations sur l'interface utilisateur du module https://doc.oneentry.cloud/docs/attributes/introduction

Définition du module AttributesSets


const { AttributesSets } = defineOneEntry(
"your-project-url", {
"token": "your-app-token"
}
);


🔗 Documentation Connexe

  • Module Produits - Utilise des ensembles d'attributs pour les données produit
  • Module Pages - Utilise des ensembles d'attributs pour le contenu des pages
  • Module Blocs - Utilise des ensembles d'attributs pour des blocs réutilisables
  • Module Formulaires - Créez des formulaires avec des champs personnalisés