Pre nego što kreiramo funkcionalnost proizvoda i kategorija, hajde da razmotrimo informacije koje će biti potrebne našim klijentima i administratorima sajta. Potrebno je pružiti dovoljno informacija o proizvodu: treba prikazati ime proizvoda, detaljan opis proizvoda, cenu proizvoda. Takođe možemo postaviti fotografiju proizvoda, kao i dodatne slike. Možda će biti potrebna i težina proizvoda za računanje troškova dostave. Količina proizvoda na lageru je važna da se ne bi prodavao proizvod koji nemamo. Za administratora sajta biće potreban ID proizvoda, kao i čitljiv URL za pretraživače.
Na kraju, trebalo bi da imamo bar sledeća polja:
Podaci |
Opis |
ID |
Broj proizvoda za internu upotrebu sajta |
Ime |
Ime proizvoda |
ČPУ (čitljiv URL) |
Potrebno više za pretraživače |
Opis |
Detaljne informacije o proizvodu |
SKU |
Šifra proizvoda za korisnike sajta |
Cena |
Cena proizvoda |
Zalihe |
Količina proizvoda na sajtu |
Glavna slika |
Glavna slika proizvoda |
Dodatne slike |
Dodatne slike proizvoda |
U narednim člancima proširićemo ovaj spisak, ali za sada nam ovo je dovoljno.
Kategorije proizvoda imaju svoj spisak polja:
Podaci |
Opis |
ID |
Broj kategorije za internu upotrebu sajta |
Ime |
Ime kategorije |
Opis |
Opis kategorije |
ČПУ (čitljiv URL) |
Čitljiv URL za pretraživače |
Mogli bismo da nastavimo dalje i implementiramo strukturu podataka i funkcionalnost za prikaz proizvoda i kategorija pomoću našeg framework-a, ali ako to uradimo sada, izgubili bismo mnogo fleksibilnosti. Većina sadržaja ima mnogo zajedničkih informacija. Ako pronađemo te zajedničke informacije i napravimo apstraktni tip sadržaja, naš framework će biti fleksibilniji. Mogli bismo koristiti različite funkcionalnosti za te tipove materijala bez dupliranja koda. Takve funkcionalnosti mogu biti:
- Verzionisanje sadržaja
- Ograničavanje pristupa
- Komentari na sadržaj, stranice, proizvode
- Ocene stranica, proizvoda
Stranice
Stranice će biti uobičajeni statični delovi našeg sajta: Kontakti, informacije o dostavi i plaćanju itd. Podaci ovih stranica prikazani su u sledećoj tabeli:
Podaci |
Opis |
Ime |
Ime stranice |
ČПУ (čitljiv URL) |
URL stranice |
ID |
Interni broj stranice |
Naslov (heading) |
Sadržaj h1 taga |
Title |
Sadržaj taga <title> |
Sadržaj |
Sadržaj stranice |
Ključne reči |
Sadržaj meta taga za ključne reči |
Opis |
Sadržaj meta taga za opis |
Sadržaj (Content)
Stranice su osnovni tip sadržaja koji ćemo proširivati kada bude bilo potrebno da se skladišti više polja. Stranice kategorija su ustvari iste stranice, ali sa dodatnim poljima za povezivanje sa proizvodima.
Podaci |
Opis |
ID |
Broj za internu upotrebu |
Ime |
Ime sadržaja |
ČПУ (čitljiv URL) |
|
Sadržaj |
Sadržaj stranice |
Tip |
Tip sadržaja (npr. stranica, proizvod, kategorija) |
Redosled |
Sortiranje sadržaja, na primer za stavke u meniju |
Roditelj |
Roditelj sadržaja, potrebno za hijerarhiju, npr. za podkategorije ili katalog stranica |
Meta ključne reči |
Ključne reči |
Meta opis |
Meta opis |
Datum kreiranja |
Datum kreiranja |
Autor |
Autor sadržaja |
Aktivan |
Da li sadržaj treba da bude prikazan posetiocima |
Siguran |
Polje za ograničavanje prava, na primer da se prikazuje samo registrovanim korisnicima |
Revizije
Drupal ima sistem revizija, mi ćemo imati sličan sistem.
Podaci |
Opis |
ID |
Interni broj sadržaja |
Trenutna revizija |
Broj trenutne revizije |
Sada kada smo isplanirali naše tipove sadržaja, možemo pristupiti kreiranju baze podataka. Za svaki tip ćemo napraviti posebnu tabelu. Kao rezultat, trebalo bi da imamo sledeće tabele:
Tabela |
Opis |
Content |
Za čuvanje veza aktivnih verzija sadržaja sa informacijama koje se ne menjaju za različite verzije, na primer autor sadržaja. |
Versions |
Za čuvanje podataka pojedinačne verzije sadržaja |
Content types |
Za upisivanje tipova materijala našeg framework-a i povezivanje sadržaja sa tipom materijala. |
Products |
Za proširenje podataka o proizvodima |
Revision history |
Za čuvanje istorije revizija |
Content
Svi sadržaji na sajtu biće uskladišteni u ovoj tabeli. Ako želimo da proširimo tip materijala, to ćemo raditi u posebnoj tabeli. Na primer, proizvodi će biti uskladišteni u tabeli Content, ali će biti povezani sa tabelom Products preko ID-a.
Polje |
Tip |
Opis |
ID |
Integer (auto increment) |
Polje za povezivanje sa drugim tabelama |
Current_revision |
Integer |
Polje za povezivanje sa tabelom verzija |
Active |
Boolean |
Pokazuje da li je sadržaj objavljen ili nije |
Secure |
Boolean |
Da li je sadržaj dostupan samo autorizovanim korisnicima |
Parent |
Integer |
Povezanost sa roditeljskim sadržajem |
Order |
Integer |
Polje za sortiranje sadržaja |
Author |
Integer |
ID korisnika koji je kreirao sadržaj |
Type |
Integer |
ID tipa sadržaja za proširenje podataka |
Path |
Varchar |
Polje za čuvanje čitljivog URL-a |
Sada možemo izvršiti SQL upit i kreirati tabelu 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;