Problem beim Aufbau eines Projektes
- GameOver
- User
Ich habe vor paar Wochen mein CMS fertig geschrieben, nur teilweise ziemlich unsauber mit zahlreichen Spaghetti-Codefragmenten.
Folgende Menüpunkte gibt es im CMS:
Seiten:
In diesem Bereich kann man neue Seiten anlegen und bereits bestehende editieren. Man kann den Pagetype auswählen, der entweder html oder php ist. Beim anlegen einer Seite muss man 3 Felder ausfüllen:
- pagetype (php oder html)
- pagename (damit wird später die Seite aufgerufen)
- pagetitle (Der Seitentitel)
- pagecontent (Der Inhalt der Seite)
Wählt man php als Pagetype aus, wird das PHP Script wie auch HTML-Seiten in die Datenbank eingetragen, mit dem kleinen Unterschied, dass Seiten mit PHP Type später mit eval() ausgeführt werden.
Templates:
Bei der Installation des CMSystems werden in der Datenbank 3 Templates angelegt:
- HTML Template
- CSS Template
- JavaScript Template
Platzhalter im HTML - Template werden beim Aufruf der der Website durch die Daten der angelegten Seiten ausgetauscht.
z.B.:
<title>{pagetitle}</title> ==> <title>Seitentitel</title>
Der Inhalt des CSS Templates wird in einer css.php Datei abgefragt, der inhalt des JavaScript Templates in einer javascript.php. Im HTML template kann man also über
<link rel="stylesheet" type="text/css" href="http://diewebsiteadresse.at/css/css.php" /> den CSS Code, welcher in der Datenbank steht abfragen.
upload:
Auf der Upload Seite kann man entweder .swf Datein in den flash Ordner oder Grafiken mit den Grafikformaten .ico, .jpg/.jpeg, .gif und .png in den images Ordner hochladen.
Hochgeladene Datein kann man über diese Upload Seite auch wieder vom Server runterlöschen.
Das wars dann im Groben und Ganzen auch schon.
Mich würde nun interessieren wie ein Aufbau in OOP da aussehen kann/sollte. In den PHP Büchern wird immer von PKWs, LKWs und andren Farhzeugen gefaselt, aber dann mal das Ganze auf ein richtiges Projekt anzuwenden geht nach hinten los :unsure:
Welche Klassen mit welchen Methoden würde ich ungefähr brauchen? Welche Klassen sollen etwas geerbt bekommen? Soll ich für jede der 3 Seiten im Admin Control Panel eine eigene Klassen anlegen? Brauch ich da ne Überklasse, sprich sowas wie nen ACP-Kern?
Grüße
Nico
MC-Web
- Ultima
- Admin
- Website
Hi Nico,
die Frage kann man so nicht beantworten, ein CM-System ist nicht gleich CM-System.
Zu erst sollte man sich klar machen welche Leistungen genau das CM-System bringen muss und in welche Richtung es ausgebaut werden kann/soll. Nach diesen Kriterien erstellt man dann eine Struktur und die entsprechenden Klassen und legt vererbungshirachien fest.
Hier kannst du dir das Joomla System ansehen.
http://api.joomla.org/classtrees_Joomla-Framework.html
Ein gutes Interface Und Dokumentation ist bei einem CM-System wichtiger, für eine gute Wartbarkeit und Erweiterungsfähigkeit.
Bei deinem System hast du zB zwei Seitentypen, php und html.
Dazu könnte man erst eine abstrakte Klasse "Seite" erstellen und diese dann auf "PhpSeite" und "HtmlSeite" spezialisieren. Dazu verwendest du ein Interface "ISeite" so das die Unterklassen über eine einheitliche Schnittstelle angesprochen werden. Und wenn eine Spezialisierung dazu kommt (zB: xHtml, XML, SVG, ...), sorgt das Interface für eine einheitliche Einbindung.
Seite:
Seite enthält alle Operationen und Eigenschaften die in PhpSeite und HtmlSeite gleich sind. Zum Beispiel der Name der Seite und die Ausgabe des Codes.
HtmlSeite:
Die Klasse hat eine Operation um den Html Code auszugeben.
PhpSeite:
Die Klasse hat eine Oparation um den PHP Code zu parsen und gibt ihn zurück.
ISeite:
Kümmert sich um eine einheitliche Einbindung in dem es die zu implementierenden Operationen vor gibt.
Hier mal eine Beispiel, so grob zusammengefasst:
<?php
Interface ISeite {
/**
* @return String
*
* Return content of the current site.
*/
public function getContent();
}
abstract class Seite implements ISeite {
/**
*
* @var String Seitenname
*/
private $_name;
/**
* @return String
*
* Return name of current site.
*/
public function getName() {
return $this->_name;
}
}
class HtmlSeite extends Seite {
public function getContent() {
return '<html> .... </html>';
}
}
class PhpSeite extends Seite {
public function getContent() {
return eval($phpCode);
}
}
Ich hoffe ich hab mich einigermaßen gut verständlich ausgedrückt.
Schöne Grüße
Thomas
Admin of Ultima-Project.net