Voordat we beginnen met het ontwikkelen van de functionaliteit voor producten en categorieën, laten we nadenken over welke informatie nodig is voor onze klanten en websitebeheerders. We moeten voldoende productinformatie aanbieden: de naam van het product, een gedetailleerde beschrijving en de prijs. We kunnen ook een hoofdfoto van het product weergeven, evenals extra afbeeldingen. Mogelijk is het gewicht van het product nodig om de verzendkosten te berekenen. Daarnaast hebben we het aantal producten op voorraad nodig om te voorkomen dat we iets verkopen dat we niet hebben. Voor de sitebeheerder zijn het product-ID en een leesbare URL (voor zoekmachines) belangrijk.
Uiteindelijk zouden we ten minste de volgende velden moeten hebben:
Gegevens |
Beschrijving |
ID |
Productnummer voor intern gebruik op de site |
Name |
Naam van het product |
URL alias |
Voornamelijk nodig voor zoekmachines |
Description |
Gedetailleerde informatie over het product |
SKU |
Artikelnummer van het product voor gebruikers van de site |
Price |
Prijs van het product |
Stock |
Aantal producten op voorraad |
Primary image |
Hoofdafbeelding |
Additional images |
Aanvullende afbeeldingen |
In latere artikelen zullen we deze lijst uitbreiden, maar voorlopig is dit voldoende.
Productcategorieën hebben hun eigen lijst met velden:
Gegevens |
Beschrijving |
ID |
Categorienummer voor intern gebruik |
Name |
Naam van de categorie |
Description |
Beschrijving van de categorie |
URL alias |
Leesbare URL voor zoekmachines |
We zouden verder kunnen gaan met het implementeren van de datastructuur en functionaliteit voor het weergeven van producten en categorieën met behulp van ons framework. Maar als we dat nu zouden doen, zouden we veel flexibiliteit verliezen. De meeste inhoud deelt gemeenschappelijke informatie. Als we die gemeenschappelijke informatie identificeren en er een abstract inhoudstype voor maken, wordt ons framework flexibeler. We kunnen dan verschillende functionaliteiten gebruiken voor deze inhoudstypen zonder code te dupliceren. Zulke functionaliteiten kunnen zijn:
- Versiebeheer van inhoud
- Toegangsrechtenbeheer
- Reacties op inhoud, pagina’s of producten
- Beoordelingen voor pagina’s of producten
Pagina’s
Pagina’s zijn de statische secties van onze website: Contact, informatie over levering en betaling, enz. De gegevens voor deze pagina’s staan in de volgende tabel:
Gegevens |
Beschrijving |
Name |
Naam van de pagina |
URL alias |
Pagina-URL |
ID |
Intern paginanummer |
Heading |
Inhoud van het <h1> -element |
Title |
Inhoud van het <title> -element |
Content |
Inhoud van de pagina |
Keywords |
Inhoud van de meta-tag voor sleutelwoorden |
Description |
Inhoud van de meta-tag voor beschrijving |
Content
Pagina’s zijn het belangrijkste inhoudstype dat we zullen uitbreiden wanneer er meer velden nodig zijn. Categoriepaginatype is in feite hetzelfde als een standaardpagina, alleen met extra velden voor productkoppelingen.
Gegevens |
Beschrijving |
ID |
Intern nummer |
Name |
Naam van de inhoud |
URL alias |
|
Content |
Inhoud van de pagina |
Type |
Inhoudstype (bijv. page, product, category) |
Order |
Volgorde van inhoud, bijvoorbeeld voor menu-items |
Parent |
Bovenliggende inhoud, voor hiërarchie (subcategorieën, pagina’s, enz.) |
Meta keywords |
Trefwoorden |
Meta description |
Meta-beschrijving |
Date created |
Aanmaakdatum |
Creator |
Auteur van de inhoud |
Active |
Of de inhoud zichtbaar is voor bezoekers |
Secure |
Veld voor toegangsrechten (bijvoorbeeld alleen zichtbaar voor geregistreerde gebruikers) |
Revisies
Net als in Drupal zullen we ons eigen revisiesysteem hebben.
Gegevens |
Beschrijving |
ID |
Intern inhoudsnummer |
Current revision |
Huidig revisienummer |
Nu we onze inhoudstypen hebben gepland, kunnen we beginnen met het maken van onze database. Voor elk type maken we een aparte tabel. Uiteindelijk moeten we de volgende tabellen hebben:
Tabel |
Beschrijving |
Content |
Opslag van actieve inhoudsversies en onveranderlijke informatie, zoals de auteur |
Versions |
Opslag van gegevens van afzonderlijke versies van inhoud |
Content types |
Bevat de inhoudstypen van ons framework en koppelt inhoud aan type |
Products |
Bevat uitgebreide productinformatie |
Revision history |
Bewaring van revisiegeschiedenis |
Content
Alle inhoud op onze site wordt in deze tabel opgeslagen. Als we het inhoudstype willen uitbreiden, doen we dat in een aparte tabel. Bijvoorbeeld: producten worden opgeslagen in de tabel Content, maar zijn gekoppeld aan de tabel Products via het ID-veld.
Veld |
Type |
Beschrijving |
ID |
Integer (auto increment) |
Veld voor koppeling met andere tabellen |
Current_revision |
Integer |
Veld voor koppeling met revisietabel |
Active |
Boolean |
Geeft aan of de inhoud gepubliceerd is |
Secure |
Boolean |
Geeft aan of de inhoud alleen beschikbaar is voor ingelogde gebruikers |
Parent |
Integer |
Koppeling naar bovenliggende inhoud |
Order |
Integer |
Volgorde van inhoud |
Author |
Integer |
ID van de gebruiker die de inhoud heeft aangemaakt |
Type |
Integer |
ID van het inhoudstype |
Path |
Varchar |
Veld voor opslag van de URL-alias |
Nu kunnen we de SQL-query uitvoeren en de tabel Content aanmaken:
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;