Bevor wir die Funktionalität für Produkte und Kategorien erstellen, denken wir über die Informationen nach, die unsere Kunden und Website-Administratoren benötigen. Wir müssen ausreichende Informationen zum Produkt bereitstellen, wie den Produktnamen, eine ausführliche Produktbeschreibung und den Produktpreis. Wir können auch ein Produktfoto sowie zusätzliche Bilder bereitstellen. Möglicherweise wird das Gewicht des Produkts zur Berechnung der Versandkosten benötigt. Die Lagerbestandsmenge ist wichtig, um keine Produkte zu verkaufen, die nicht verfügbar sind. Für den Website-Administrator wird eine Produkt-ID sowie eine suchmaschinenfreundliche URL benötigt.
Am Ende sollten wir mindestens folgende Felder haben:
Daten |
Beschreibung |
ID |
Produktnummer für die interne Website-Verwaltung |
Name |
Produktname |
SEO-URL |
Vor allem für Suchmaschinen notwendig |
Beschreibung |
Detaillierte Produktinformationen |
SKU |
Artikelnummer für Website-Nutzer |
Preis |
Produktpreis |
Lagerbestand |
Verfügbare Menge auf der Website |
Hauptbild |
Hauptbild des Produkts |
Zusätzliche Bilder |
Weitere Produktbilder |
In späteren Artikeln werden wir diese Liste erweitern, für den Anfang reicht dies jedoch aus.
Kategorien haben ihre eigenen Felder:
Daten |
Beschreibung |
ID |
Kategorienummer für die interne Website-Verwaltung |
Name |
Kategoriename |
Beschreibung |
Kategoriebeschreibung |
SEO-URL |
Suchmaschinenfreundliche URL |
Wir könnten weitergehen und Datenstrukturen und Funktionen für die Darstellung von Produkten und Kategorien mit unserem Framework implementieren, aber wenn wir das jetzt tun würden, würden wir viel Flexibilität verlieren. Die meisten Inhalte enthalten viele allgemeine Informationen. Wenn wir diese gemeinsamen Informationen finden und einen abstrakten Inhaltstyp erstellen, wird unser Framework flexibler. Wir könnten verschiedene Funktionen für diese Inhaltstypen verwenden, ohne Code zu duplizieren. Solche Funktionen könnten sein:
- Versionierung von Inhalten
- Zugriffsrechteverwaltung
- Kommentare zu Inhalten, Seiten, Produkten
- Bewertungen von Seiten, Produkten
Seiten
Seiten sind gewöhnliche statische Bereiche unserer Website: Kontakt, Informationen zu Versand und Zahlung usw. Die Daten dieser Seiten sind in der folgenden Tabelle dargestellt:
Daten |
Beschreibung |
Name |
Seitenname |
SEO-URL |
Seiten-URL |
ID |
Interne Seitennummer |
Überschrift |
Inhalt des h1-Tags |
Titel |
Inhalt des <title>-Tags |
Inhalt |
Seiteninhalt |
Keywords |
Inhalt des Meta-Keywords-Tags |
Beschreibung |
Inhalt des Meta-Description-Tags |
Inhalte
Seiten sind der Hauptinhaltstyp, den wir erweitern, wenn mehr Felder benötigt werden. Kategorieseiten sind im Grunde die gleichen Seiten, nur mit mehr Feldern zur Verbindung mit Produkten.
Daten |
Beschreibung |
ID |
Interne Nummer |
Name |
Inhaltsname |
SEO-URL |
|
Inhalt |
Inhalt der Inhaltsseite |
Typ |
Inhaltstyp (z. B. Seite, Produkt, Kategorie) |
Sortierung |
Sortierreihenfolge, z. B. für Menüpunkte |
Elternteil |
Übergeordneter Inhalt, wichtig für Hierarchien, z. B. für Unterkategorien oder Seitenkataloge |
Meta-Keywords |
Schlüsselwörter |
Meta-Beschreibung |
Meta-Description |
Erstellungsdatum |
Erstellungsdatum |
Ersteller |
Inhaltsautor |
Aktiv |
Ob der Inhalt für Besucher sichtbar ist |
Sicher |
Feld zur Rechteverwaltung, z. B. Sichtbarkeit nur für angemeldete Nutzer |
Revisionen
Drupal verfügt über ein Revisionssystem, wir werden ein ähnliches System haben.
Daten |
Beschreibung |
ID |
Interne Inhaltsnummer |
Aktuelle Revision |
Aktuelle Revisionsnummer |
Nachdem wir unsere Inhaltstypen geplant haben, beginnen wir mit der Erstellung unserer Datenbank. Für jeden Typ erstellen wir eine separate Tabelle. Wir erhalten also folgende Tabellen:
Tabelle |
Beschreibung |
Content |
Speichert Verbindungen aktiver Inhaltsversionen mit unveränderlichen Informationen, z. B. dem Autor |
Versions |
Speichert Daten einzelner Inhaltsversionen |
Content types |
Speichert Inhaltstypen des Frameworks und verknüpft Inhalte mit Inhaltstypen |
Products |
Erweitert Produktdaten |
Revision history |
Speichert die Historie der Revisionen |
Content
Alle Inhalte der Website werden in dieser Tabelle gespeichert. Wenn wir einen Inhaltstyp erweitern wollen, tun wir dies in einer separaten Tabelle. Zum Beispiel werden Produkte in der Content-Tabelle gespeichert, sind aber über die ID mit der Products-Tabelle verbunden.
Feld |
Typ |
Beschreibung |
ID |
Integer (Auto-Inkrement) |
Verknüpfungsfeld zu anderen Tabellen |
Current_revision |
Integer |
Verknüpfungsfeld zur Versionstabelle |
Active |
Boolean |
Zeigt an, ob der Inhalt veröffentlicht ist |
Secure |
Boolean |
Gibt an, ob der Inhalt nur für angemeldete Nutzer zugänglich ist |
Parent |
Integer |
Verknüpfung mit übergeordnetem Inhalt |
Order |
Integer |
Feld für die Sortierung des Inhalts |
Author |
Integer |
ID des Benutzers, der den Inhalt erstellt hat |
Type |
Integer |
ID des Inhaltstyps zur Erweiterung der Inhaltsdaten |
Path |
Varchar |
Feld zur Speicherung der SEO-URL |
Nun können wir die SQL-Abfragen ausführen und die Tabelle Content erstellen:
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;