Aller au contenu

Champs personnalisés

Les champs personnalisés permettent d’ajouter des métadonnées structurées à vos contenus sans modifier la base de données. ArtisanCMS propose plus de 15 types de champs organisés en groupes assignables aux différents types de contenu.

Le système repose sur trois modèles :

  • CustomFieldGroup : regroupe les champs et les assigne à un type de contenu
  • CustomField : définit un champ individuel (type, validation, options)
  • CustomFieldValue : stocke la valeur d’un champ pour un contenu donné
CustomFieldGroup (ex: "Informations produit")
├── CustomField (ex: "Prix", type: number)
├── CustomField (ex: "Référence", type: text)
└── CustomField (ex: "En stock", type: checkbox)
└── CustomFieldValue (valeur pour chaque page/article/entrée)

ArtisanCMS propose les types de champs suivants :

TypeDescriptionExemple de valeur
textChamp texte court”Référence ABC-123”
textareaZone de texte multiligneDescription longue
numberValeur numérique42, 3.14
emailAdresse email validéecontact@example.com
urlURL validéehttps://example.com
selectListe déroulanteChoix parmi des options
checkboxCase a cocher (booléen)true / false
radioBoutons radioChoix unique parmi des options
dateSélecteur de date”2026-04-15”
datetimeDate et heure”2026-04-15 14:30:00”
colorSélecteur de couleur”#FF5733”
imageSélecteur d’image (média)Référence vers un média
fileSélecteur de fichierRéférence vers un fichier
wysiwygÉditeur de texte richeContenu HTML
repeaterGroupe de sous-champs répétableListe de valeurs structurées

Les champs sont organisés en groupes via le modèle CustomFieldGroup :

// Structure d'un groupe de champs
$group = CustomFieldGroup::create([
'name' => 'Détails du produit',
'slug' => 'details-produit',
'content_type' => 'page', // Type de contenu cible
'position' => 'sidebar', // Position dans l'interface admin
'order' => 1,
]);

Un groupe de champs peut etre assigné a :

  • Pages : toutes les pages ou un template spécifique
  • Articles : tous les articles ou une catégorie spécifique
  • Entrées de contenu : un type de contenu personnalisé spécifique

Le modèle CustomFieldValue utilise une relation polymorphique pour s’attacher à n’importe quel type de contenu :

class CustomFieldValue extends Model
{
public function valuable(): MorphTo
{
return $this->morphTo(); // Page, Post ou ContentEntry
}
}

Cela permet de réutiliser le meme système de champs pour tous les contenus sans tables supplémentaires.

Chaque champ peut définir des règles de validation Laravel :

$field = CustomField::create([
'name' => 'Prix',
'slug' => 'prix',
'type' => 'number',
'validation' => 'required|numeric|min:0|max:99999',
'default_value' => '0',
]);

Les règles de validation sont appliquées cote serveur lors de la sauvegarde et cote client pour une expérience utilisateur fluide.

Le Admin\CustomFieldController fournit l’interface de gestion :

  • Création et édition de groupes de champs
  • Ajout, suppression et réorganisation des champs dans un groupe
  • Configuration des options pour les champs de type select, radio et checkbox
  • Définition des règles de validation
  • Prévisualisation du rendu

Le type repeater permet de créer des groupes de sous-champs répétables. C’est utile pour des données structurées comme une galerie, une liste de liens ou un tableau de prix :

Repeater "Galerie"
├── image (type: image)
├── legende (type: text)
└── lien (type: url)

L’utilisateur peut ajouter, supprimer et réordonner les entrées du repeater dans l’interface d’administration.

Les valeurs des champs personnalisés sont accessibles dans le Page Builder via le système de contenu dynamique. Cela permet d’insérer des données de champs personnalisés directement dans les blocs du builder sans code personnalisé.

Dans un template Blade ou un contrôleur, les valeurs sont accessibles via la relation :

// Récupérer la valeur d'un champ personnalisé
$prix = $page->customFieldValues()
->whereHas('customField', fn($q) => $q->where('slug', 'prix'))
->first()
->value;