Aller au contenu

Pages

Les pages constituent le type de contenu fondamental d’ArtisanCMS. Elles permettent de construire la structure de votre site avec une hiérarchie parent-enfant, un workflow de publication complet et des fonctionnalités SEO intégrées.

Le modèle Page se trouve dans App\Models\Page et utilise plusieurs traits pour enrichir ses fonctionnalités :

class Page extends Model
{
use HasContentFeatures; // Révisions, taxonomies, champs personnalisés
use HasSiteScope; // Filtrage multi-site automatique
use SoftDeletes; // Corbeille
}
ChampTypeDescription
titlestringTitre de la page
slugstringURL-friendly, unique par site
contentjsonArbre de blocs du Page Builder
excerpttextRésumé court de la page
featured_imagestringChemin de l’image mise en avant
templatestringTemplate Blade utilisé pour le rendu
parent_idintegerRéférence vers la page parente (nullable)
orderintegerPosition dans la hiérarchie

Les pages supportent une arborescence parent-enfant via le champ parent_id. Cela permet de créer des structures comme :

/ (Accueil)
├── /a-propos
│ ├── /a-propos/equipe
│ └── /a-propos/histoire
├── /services
│ ├── /services/consulting
│ └── /services/formation
└── /contact

Le slug complet est automatiquement construit à partir de la hiérarchie parentale.

Chaque page possède un statut qui contrôle sa visibilité :

StatutDescription
draftBrouillon, visible uniquement en admin
reviewEn attente de relecture
approvedApprouvée, prête à être publiée
publishedPubliée et accessible au public

En complément du statut, chaque page définit un niveau d’accès :

  • public : accessible à tous les visiteurs
  • private : accessible uniquement aux utilisateurs connectés
  • restricted : accessible uniquement aux rôles autorisés

Les champs publish_at et unpublish_at permettent de programmer la publication et le retrait automatique d’une page :

$page->publish_at = '2026-04-01 09:00:00';
$page->unpublish_at = '2026-04-30 23:59:59';

Un job planifié se charge d’appliquer les changements de statut aux dates configurées.

Pour éviter les conflits d’édition simultanée, ArtisanCMS implémente un système de verrouillage :

// Champs de verrouillage sur le modèle Page
$page->checked_out_by; // ID de l'utilisateur qui édite
$page->checked_out_at; // Horodatage du verrouillage

Lorsqu’un utilisateur ouvre une page en édition, elle est automatiquement verrouillée. Les autres utilisateurs voient un avertissement et ne peuvent pas modifier la page tant que le verrou n’est pas libéré.

Chaque page dispose de champs dédiés au référencement :

ChampDescription
meta_titleTitre pour les moteurs de recherche
meta_descriptionDescription pour les résultats de recherche
meta_keywordsMots-clés (séparés par des virgules)

Les balises Open Graph sont générées automatiquement à partir de ces champs pour un partage optimal sur les réseaux sociaux.

La gestion des pages passe par Admin\PageController qui délègue la logique métier au PageService :

// Routes admin pour les pages
Route::resource('pages', PageController::class);

Les actions disponibles sont : création, édition, duplication, mise à la corbeille et restauration.

L’accès aux pages est contrôlé par PagePolicy qui vérifie les permissions selon le rôle de l’utilisateur :

  • viewAny : lister les pages
  • create : créer une nouvelle page
  • update : modifier une page existante
  • delete : mettre à la corbeille
  • restore : restaurer depuis la corbeille
  • forceDelete : suppression définitive

Les pages supprimées ne sont pas effacées de la base de données. Elles sont déplacées dans la corbeille grâce au trait SoftDeletes de Laravel. Un administrateur peut les restaurer ou les supprimer définitivement.

Ce trait partagé entre les pages, articles et entrées de contenu fournit automatiquement :

  • Révisions : historique complet des modifications
  • Taxonomies : catégorisation par termes
  • Champs personnalisés : données additionnelles via les groupes de champs