Prima di creare la funzionalità dei prodotti e delle categorie, pensiamo alle informazioni di cui avranno bisogno i nostri clienti e gli amministratori del sito. È necessario fornire informazioni sufficienti sul prodotto: dobbiamo mostrare il nome del prodotto, una descrizione dettagliata e il prezzo. Possiamo anche caricare un’immagine principale del prodotto e immagini aggiuntive. Potrebbe essere necessario includere il peso del prodotto per calcolare il costo di spedizione, così come la quantità disponibile in magazzino per evitare di vendere un articolo non disponibile. Per l’amministratore del sito, serviranno l’ID del prodotto e un URL leggibile per i motori di ricerca.
Alla fine, dovremmo avere almeno i seguenti campi:
Dati |
Descrizione |
ID |
Numero del prodotto per l’uso interno del sito |
Name |
Nome del prodotto |
URL leggibile |
Necessario principalmente per i motori di ricerca |
Description |
Descrizione dettagliata del prodotto |
SKU |
Codice del prodotto per gli utenti del sito |
Price |
Prezzo del prodotto |
Stock |
Quantità disponibile nel magazzino |
Immagine principale |
L’immagine principale del prodotto |
Immagini aggiuntive |
Immagini supplementari del prodotto |
Nei prossimi articoli estenderemo questo elenco, ma per ora è sufficiente.
Le categorie di prodotti avranno il proprio insieme di campi:
Dati |
Descrizione |
ID |
Numero della categoria per l’uso interno del sito |
Name |
Nome della categoria |
Description |
Descrizione della categoria |
URL leggibile |
URL leggibile dai motori di ricerca |
Potremmo procedere e creare subito la struttura dei dati e la funzionalità per visualizzare i prodotti e le categorie con il nostro framework, tuttavia, se lo facessimo ora, perderemmo molta flessibilità. La maggior parte dei contenuti condivide molte informazioni comuni. Se identifichiamo queste informazioni comuni e creiamo un tipo di contenuto astratto, il nostro framework sarà più flessibile. Potremmo utilizzare diverse funzionalità per questi tipi di contenuto senza duplicare il codice. Tra queste funzionalità ci potrebbero essere:
- Versionamento dei contenuti
- Gestione dei permessi di accesso
- Commenti per contenuti, pagine e prodotti
- Valutazioni di pagine e prodotti
Pagine
Le pagine saranno le sezioni statiche del nostro sito, come “Contatti”, “Informazioni sulla consegna” e “Pagamenti”. I dati di queste pagine saranno rappresentati nella seguente tabella:
Dati |
Descrizione |
Nome |
Nome della pagina |
URL leggibile |
URL della pagina |
ID |
Numero interno della pagina |
Heading |
Contenuto del tag h1 |
Title |
Contenuto del tag <title> |
Content |
Contenuto della pagina |
Keywords |
Contenuto del meta tag delle parole chiave |
Description |
Contenuto del meta tag di descrizione |
Contenuto
Le pagine saranno il tipo di contenuto principale che estenderemo quando avremo bisogno di aggiungere più campi. Le pagine di categoria, in sostanza, sono simili alle pagine normali, ma con più campi per collegarle ai prodotti.
Dati |
Descrizione |
ID |
Numero interno per il funzionamento del sito |
Name |
Nome del contenuto |
URL leggibile |
|
Content |
Contenuto della pagina |
Type |
Tipo di contenuto (ad esempio: page, product, category) |
Order |
Ordine del contenuto, ad esempio per i menu |
Parent |
Elemento padre, utile per creare gerarchie (come sottocategorie o strutture di pagine) |
Meta keywords |
Parole chiave |
Meta description |
Meta descrizione |
Date created |
Data di creazione |
Creator |
Autore del contenuto |
Active |
Indica se il contenuto è visibile ai visitatori |
Secure |
Campo per i diritti di accesso, ad esempio visibile solo agli utenti registrati |
Revisioni
Come in Drupal, anche noi avremo un sistema di revisioni personalizzato.
Dati |
Descrizione |
ID |
Numero interno del contenuto |
Current revision |
Numero della revisione corrente |
Ora che abbiamo pianificato i nostri tipi di contenuto, possiamo creare il nostro database. Per ogni tipo creeremo una tabella separata. Alla fine, dovremmo ottenere le seguenti tabelle:
Tabella |
Descrizione |
Content |
Memorizza i collegamenti tra le versioni attive dei contenuti e le informazioni che non cambiano tra le versioni (come l’autore). |
Versions |
Memorizza i dati di ogni singola versione del contenuto |
Content types |
Registra i tipi di contenuto del framework e collega i contenuti ai rispettivi tipi |
Products |
Estende i dati relativi ai prodotti |
Revision history |
Memorizza la cronologia delle revisioni |
Content
Tutti i contenuti del sito saranno memorizzati in questa tabella. Se vogliamo estendere un tipo di contenuto, lo faremo in una tabella separata. Ad esempio, i prodotti saranno memorizzati nella tabella Content, ma saranno collegati alla tabella Products tramite l’ID.
Campo |
Tipo |
Descrizione |
ID |
Integer (auto increment) |
Campo per collegare altre tabelle |
Current_revision |
Integer |
Campo per collegare la tabella delle versioni |
Active |
Boolean |
Indica se il contenuto è pubblicato |
Secure |
Boolean |
Indica se il contenuto è accessibile solo agli utenti autorizzati |
Parent |
Integer |
Collegamento al contenuto padre |
Order |
Integer |
Campo per ordinare i contenuti |
Author |
Integer |
ID dell’utente che ha creato il contenuto |
Type |
Integer |
ID del tipo di contenuto per estendere i dati |
Path |
Varchar |
Campo per memorizzare l’URL leggibile |
Ora possiamo eseguire la query SQL per creare la tabella 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;