Avant de créer les fonctionnalités pour les produits et catégories, réfléchissons aux informations nécessaires pour nos clients et administrateurs du site. Il faut fournir suffisamment d’informations sur le produit : nous devons afficher le nom, une description détaillée, et le prix. Nous pouvons aussi inclure une photo principale ainsi que des images supplémentaires. Le poids du produit peut être nécessaire pour calculer les frais de livraison. La quantité en stock est importante pour ne pas vendre un produit indisponible. Pour l’administrateur, un ID produit est requis ainsi qu’une URL lisible par les moteurs de recherche.
Au minimum, nous devons avoir ces champs :
Donnée |
Description |
ID |
Numéro interne du produit pour le fonctionnement du site |
Nom |
Nom du produit |
URL lisible (alias) |
Principalement pour les moteurs de recherche |
Description |
Informations détaillées sur le produit |
SKU |
Référence produit pour les utilisateurs |
Prix |
Prix du produit |
Stock |
Quantité disponible |
Image principale |
Image principale du produit |
Images supplémentaires |
Images additionnelles |
Nous compléterons cette liste dans des articles ultérieurs, pour l’instant cela suffit.
Les catégories de produits ont leur propre liste de champs :
Donnée |
Description |
ID |
Numéro interne de la catégorie pour le fonctionnement du site |
Nom |
Nom de la catégorie |
Description |
Description de la catégorie |
URL lisible (alias) |
URL lisible par les moteurs de recherche |
Nous pourrions commencer à implémenter la structure et la fonctionnalité pour afficher produits et catégories avec notre framework, mais cela limiterait beaucoup la flexibilité. La majorité du contenu partage beaucoup d’informations communes. En créant un type de contenu abstrait, notre framework sera plus flexible. Nous pourrions appliquer des fonctionnalités variées à ces types sans dupliquer le code, telles que :
- Versionnage du contenu
- Gestion des droits d’accès
- Commentaires sur le contenu, pages, produits
- Notation des pages, produits
Pages
Les pages seront des sections statiques classiques du site : contacts, informations sur la livraison et paiement, etc. Voici leurs données :
Donnée |
Description |
Nom |
Nom de la page |
URL lisible (alias) |
URL de la page |
ID |
Numéro interne de la page |
Heading |
Contenu de la balise h1 |
Titre |
Contenu de la balise <title> |
Contenu |
Contenu de la page |
Mots-clés |
Contenu de la méta-balise mots-clés |
Description |
Contenu de la méta-balise description |
Contenu
Les pages sont le type principal de contenu, que nous étendrons si besoin en ajoutant plus de champs. Les pages de catégorie sont des pages similaires, mais avec plus de champs pour relier aux produits.
Donnée |
Description |
ID |
Numéro interne |
Nom |
Nom du contenu |
URL lisible (alias) |
|
Contenu |
Contenu de la page |
Type |
Type de contenu (ex : page, produit, catégorie) |
Ordre |
Ordre pour tri, par exemple dans les menus |
Parent |
Parent du contenu, pour la hiérarchie (sous-catégories, catalogue de pages) |
Méta mots-clés |
Mots-clés |
Méta description |
Description méta |
Date de création |
Date de création |
Auteur |
Auteur du contenu |
Actif |
Afficher ou non le contenu aux visiteurs |
Sécurisé |
Champ de restriction d’accès, par exemple visible seulement par les utilisateurs connectés |
Révisions
Drupal possède un système de révision, nous aurons un système similaire.
Donnée |
Description |
ID |
Numéro interne du contenu |
Révision actuelle |
Numéro de la révision courante |
Maintenant que nous avons planifié nos types de contenu, passons à la création de la base de données. Pour chaque type, nous créerons une table distincte. Voici les tables attendues :
Table |
Description |
Content |
Pour stocker les liens des versions actives du contenu avec les informations qui ne changent pas entre versions, comme l’auteur. |
Versions |
Pour stocker les données de chaque version du contenu |
Content types |
Pour enregistrer les types de contenu de notre framework, en associant le contenu à son type. |
Products |
Pour étendre les données des produits |
Revision history |
Pour garder l’historique des révisions |
Content
Tous les contenus du site seront stockés dans cette table. Pour étendre un type de contenu, on utilise une table séparée. Par exemple, les produits seront stockés dans la table Content, mais liés à la table Products via l’ID.
Champ |
Type |
Description |
ID |
Integer (auto-incrément) |
Champ de liaison avec d’autres tables |
Current_revision |
Integer |
Champ de liaison avec la table des versions |
Active |
Boolean |
Indique si le contenu est publié ou non |
Secure |
Boolean |
Indique si le contenu est accessible uniquement aux utilisateurs authentifiés |
Parent |
Integer |
Lien vers le contenu parent |
Order |
Integer |
Champ pour ordonner le contenu |
Author |
Integer |
ID de l’utilisateur ayant créé le contenu |
Type |
Integer |
ID du type de contenu pour étendre les données |
Path |
Varchar |
Champ pour stocker l’URL lisible |
Voici la requête SQL pour créer la table Content :
CREATE TABLE `content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`current_revision` int(11) NOT NULL,
`active` tinyint(1) NOT NULL,
`secure` tinyint(1) NOT NULL,
`parent` int(11) NOT NULL,
`order` int(11) NOT NULL,
`author` int(11) NOT NULL,
`type` int(11) NOT NULL,
`path` char(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;