Inhalt
Vorbereitungen in der htaccess
Alle Anfragen an die Webseite müssen an die index.php umgeleitet werden, damit kann das CMS alle URL verarbeiten.
RewriteEngine On
RewriteBase /
# Process by index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php/$1 [L]
# Prevent Filebrowsing
Options All -Indexes
die htaccess mit Umleitung auf index.php
Die Optionen -f und -d sorgen dafür, das die Umleitung für Files und Directorys gilt. Die Anweisung [L] zeigt dem Interpreter, das es sich um den Letzten Befehl der RewriteCondition handelt.
Würden Sie die Umleitung nicht vornehmen, müsste die URL etwa so aussehen:
www.domain.de/index.php?kategorie=kategorie-1&beitrag=beitrag-1
Zugegeben, das ist wenig intuitiv und die Suchmaschine mag diese Formulierung ebenso wenig und straft solche Webseiten mit schlechterem Ranking ab. Besser wäre die folgende URL:
www.domain.de/kategorie-1/beitrag-1
Die oben gezeigte URL ist für das menschliche Auge deutlich besser zu lesen und die Suchmaschine belohnt solche Webseiten mit besserem Ranking. Dies erreichen Sie mit der eingangs beschriebenen Umleitung in der htaccess.
Das Startscript index.php
Durch die Umleitung in der htaccess kann das Startscript alle Anfragen empfangen. Die Datei index.php ist die Schaltzentrale des CMS. Mit dem Befehl require_once() werden zunächst alle weiteren PHP-Scripte dem System hinzugeladen die später gebraucht werden.
require_once('core/mvc/Controller.php');
require_once('core/mvc/Model.php');
require_once('core/mvc/View.php');
require_once('core/dipper/Dipper.php');
require_once('core/parsedown/Parsedown.php');
$url = 'content/'.$_SERVER['REQUEST_URI'];
if (substr($url, -1) == '/') $url = substr($url, 0, -1);
if (is_dir($url))
{
if(file_exists($url.'/index.md'))
{
$categorie = new Controller($url.'/index.md');
} else {
echo 'Kategorie: index.md nicht gefunden';
exit();
}
} else {
if(file_exists($url.'.md'))
{
$post = new Controller($url.'.md');
} else {
echo 'Beitrag: beitrag.md nicht gefunden';
exit();
}
}
Startscript index.php
Die Variable $url wird den URL-Request des Lesers aufnehmen und es dem Beitragsverzeichnis content zugewiesen. Der folgende if(substr(...) soll dafür sorgen, das anhängende / immer abgeschnitten werden, das macht die weitere Verarbeitung einfacher.
Im wesentlichen folgt eine if-Kontrollstruktur, die untersucht, ob es sich bei der URL um eine Kategorie oder einen Beitrag handelt. In Abhängigkeit der logischen Auswertung, startet das Index-Script den dazugehörigen Controller (derzeigt gibt es nur einen einzigen, universellen Controller).
Sofern die Kategorie anders verarbeitet werden soll als ein Beitrag, kann der allgemeine
Controllerbeispielsweise in einenPostControllerundCategorieControlleraufgeteilt werden.
Verzeichnis-Struktur
Das Projekt ist in die folgende Verzeichnis-Struktur aufgeteilt.
root:
─────
│
├── content // hier liegt der Beitrags-Content
│ │
│ ├── kategorie-1 // eine Kategorie
│ │ │
│ │ ├── index.md // Beschreibung der Kategorie
│ │ ├── beitrag-1.md // erster Beitrag in der kategorie
│ │ └── beitrag-2.md // weitere Beiträge
│ │
│ └── kategorie-2
│ │
│ ├── index.md // Kategorie-Beschreibung
│ ├── beitrag-1.md // Beiträge
│ .
│
├── core
│ │
│ ├── dipper
│ │ │
│ │ └── Dipper.php // YAML-Parser
│ ├── parsedown
│ │ │
│ │ └── Parsedown.php // Parser zum übersetzen des Textes in HTML
│ └── mvc ┐ // In diesem Verzeichnis lagern
│ │ // die Komponenten des MVC-Patterns
│ ├── Controller.php // Controller
│ ├── Model.php // Model
│ └── View.php // und View
│
├── img // hier liegen alle Bilder
│
├── templates
│ │
│ └── basic.template // das HTML-template der Seite
│
htaccess // Umleitungen auf index.php
index.php // Startscript der Webseite
Verzeichnis-Struktur
Da die Anzahl der MVC-Komponenten überschaubar ist, reicht es aus, diese gemeinsam im Ordner mvc abzulegen. Sollte das Projekt später größer werden, kann die Struktur weiter verändert werden.
Oliver Lohse
2024-02-15
ein eigenes CMS entwickeln programmieren
post
Kontakt@Oliver-Lohse.de