CMS Kernsystem in eine eigene Klasse packen – Code & Blog
In den Skins des CMS soll später mit einem kleinen Befehl auf alle benötigten Funktionen zugegriffen werden. Aus dem Grund erstelle ich die Klasse sys im Verzeichnis system/sys.php. Sie bekommt als erste Funktion das include des Hauptcontents. Das ist erstmal nicht weiter schwer. Die Datei sieht so aus:
<?PHP class sys{ function includeContent(){ include(filterfilename("../content/articles/".$_GET['include'])); } } ?>
In der Datei index.php im Hauptverzeichnis muss jetzt darauf zugegriffen werden. Der alte include der Content-Datei entfällt hier natürlich. Die neue index.php sieht so aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml/" xml:lang="de"> <head> <title>Kommt in einen spä;teren Beitrag</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <?PHP include("system/dbconnect.php"); include("system/settings.php"); include("system/classes/skincontroller.php"); include("system/filterfilename.php"); include("system/sys.php"); sys::includeContent(); include(SkinController::getCurrentSkinPath()."/test.php"); ?> </body> </html>
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Kommentare
Kay schrieb am 02.07.2009:
Servus auch hier und ebenfalls eine Anmerkung. Was passiert, wenn du nur http://cms.stevieswebsite.de/ oder http://cms.stevieswebsite.de/index.html aufrufst? Was ja Standard ist, wenn man eine Internetseite betritt. Genau, es wird keinerlei Content aufgerufen. Denn die aktuelle Konfiguration erwartet quasi immer ein $_GET['include'], was aber im Falle der genannten Adresse nicht auftritt und somit einen Fehler bzw. einen leeren Content erzeugt (je nach Einstellung der Errormeldungen in der php.ini). Umgehen kann man das recht simpel, in dem man ein default-Content hinterlegt (Ordner content->articles->default.php). Und dann in der Funktion als erstes prüft ob $_GET vorhanden ist: function includeContent() { ($_GET['include']) ? include(filterfilename('../content/articles/' . $_GET['include'])) : include('content/articles/default.php'); }
Stefan Wienströer schrieb am 02.07.2009:
ahh, hast mal wieder recht, ich mach gleich nen Artikel über beide deine Vorschläge. Thx
Stefan Wienströer schrieb am 02.07.2009:
In der filterfilename Funktion wird bereits geprüft, ob die Datei existiert. Tut sie das nicht wird die 404 Datei importiert. Allerdings fehlt noch die Startseite, denn sonst wird dort auch die 404 angezeigt. Die werd ich noch reinbringen (siehe nächster CMS Artikel^^)
m1staX schrieb am 19.09.2011:
Hallo, mir ist eine Sache aufgefallen in der Klasse 'sys'. Um die Funktionen dort über sys:: aufrufen zu können, müssen sie auch statisch deklariert werden: static function includeContent() { ... Auch im Folgenden wird das 'static' immer weggelassen. Wundert mich, dass das noch keinem aufgefallen ist, ich bekomme da sonst Fehlermeldungen. Dachte, ich schreib das mal hier an den Anfang. Ein Kompliment für dieses Tutorial, find ich Klasse was du da machst! Arbeite es gerade durch um meine etwas angestaubten PHP-Kenntnise wieder aufzufrischen. Good job!
Stefan Wienströer schrieb am 19.09.2011:
Das CMS wurde zu der Zeit nicht unter strikten Einstellungen geschrieben, mittlerweile ist es auch schon static ;-) http://svn.contentlion.org/filedetails.php?repname=contentlion-core&path=%2Fsystem%2Fclasses%2Fsys.php
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project