CMS zum lernen

Hallo ihr beiden

naja dann gehen wir das gleich an ;)
Habt ihr schon einmal ein CMS geschrieben ?

ich hab es zum Beispiel so, dass es verschiedene Inhaltstypen gibt, die man einfügen kann. (Im Adminbereich kann man das im Formular via select auswählen.
Ich hab sitemap, txt, txt+images, images.
(Die verschiedenen Typen werden aus der DB ausgelesen, um es einfach zu machen neue einzufügen)

Und ich mach es so, dass im Frontend (das was der normale User zu sehen bekommt)
alle Inhalte einer Seite ausgelesen werden und dann per if entschieden wird, welches plugin eingefügt werden soll.

Also:

PHP:
...
foreach($content AS c)
 {
    
    if($c['c_mode'] == 'txt') // c_mode enthält eben die information was es ist
       include('pfad/plugins/content_txt.php');
    else if($c['c_mode'] == 'img')
       include('pfad/plugins/content_img.php');
 }
..

Und das die Datei content_txt.php enthält dann einfach nur wie es ausgegeben wird.
Also zum beispiel:
PHP:
<div class="left"><img ... ></div>
<div class="right"><?php echo $c['c_text']; ?></div>

Und dann ist das im Prinzip gar kein Problem, denn dann fügt ihr neue Plugins einfach in diesen Ordner plugins/ ein und fügt eine neue Zeile in die Datenbanktabelle, wo die verschiedenen Plugintypen für den Adminbereich gespeichert werden ein. :)

Versteht ihr wie ich es meine ? :D


Grüße Simon

mal sehen, ich glaube ich verstehe worauf du hinaus willst. Also du meinst das das jeweilige plugin in einem bestimmten ordner liegt (in dem fall plugins) und in der datenbank ein eintrag dazu steht (Name, pfad blablabla) damit ich im Backend bereich was damit machen kann. So ungefähr oder?
 
Ja genau :)

Der Datenbankeintrag ist dazu da, dass du es im Bankendbereich auswählen kannst.
Du kannst im prinzip auch einfach den Pluginsordner auslesen und die filenamen erhalten, aber wenn dann bestimmte Eigenschaften für dieses Plugin angezeigt werden sollen, dann wird das schwierig.
(Sollte es noch komplizierter werden und bei dem Plugin images soll man zum Beispiel auch noch die maximale Höhe und Breite des Bildes wählen können [so habe ich es], dann empfielt es sich auch für jedes Plugin ein eigenes Formular für den Backend bereich zu machen)

Das File im plugins ordner stellt das Plugin dann so dar wie es dargestellt werden soll, da ja jedes Plugin anderst angezeigt werden muss, andere Eigenschaften hat, ... :)
So ist es sehr einfach jedes Plugin so anzuzeigen wie es am besten ist.

Und dadurch, dass der Anzeigemodus nur includiert wird, ist es sehr leicht möglich weitere hinzu zu fügen ohne am code etwas ändern zu müssen.
 
Ja genau :)

Der Datenbankeintrag ist dazu da, dass du es im Bankendbereich auswählen kannst.
Du kannst im prinzip auch einfach den Pluginsordner auslesen und die filenamen erhalten, aber wenn dann bestimmte Eigenschaften für dieses Plugin angezeigt werden sollen, dann wird das schwierig.
(Sollte es noch komplizierter werden und bei dem Plugin images soll man zum Beispiel auch noch die maximale Höhe und Breite des Bildes wählen können [so habe ich es], dann empfielt es sich auch für jedes Plugin ein eigenes Formular für den Backend bereich zu machen)

Das File im plugins ordner stellt das Plugin dann so dar wie es dargestellt werden soll, da ja jedes Plugin anderst angezeigt werden muss, andere Eigenschaften hat, ... :)
So ist es sehr einfach jedes Plugin so anzuzeigen wie es am besten ist.

Und dadurch, dass der Anzeigemodus nur includiert wird, ist es sehr leicht möglich weitere hinzu zu fügen ohne am code etwas ändern zu müssen.

Ok prima, das heißt dann ich brauche für ein plugin dann mindestens 1 datei für den admin bereich und 1 fürs frontend richtig?

Der Datenbankeintrag ist dazu da, dass du es im Bankendbereich auswählen kannst.
Du kannst im prinzip auch einfach den Pluginsordner auslesen und die filenamen erhalten, aber wenn dann bestimmte Eigenschaften für dieses Plugin angezeigt werden sollen, dann wird das schwierig.
Das habe ich nicht ganz verstanden. Warum wird es schwieriger wenn ich einfach den plugins ordner auslese?
 
Hallo ihr beiden

naja dann gehen wir das gleich an ;)
Habt ihr schon einmal ein CMS geschrieben ?

ich hab es zum Beispiel so, dass es verschiedene Inhaltstypen gibt, die man einfügen kann. (Im Adminbereich kann man das im Formular via select auswählen.
Ich hab sitemap, txt, txt+images, images.
(Die verschiedenen Typen werden aus der DB ausgelesen, um es einfach zu machen neue einzufügen)

Und ich mach es so, dass im Frontend (das was der normale User zu sehen bekommt)
alle Inhalte einer Seite ausgelesen werden und dann per if entschieden wird, welches plugin eingefügt werden soll.

Also:

PHP:
...
foreach($content AS c)
 {
    
    if($c['c_mode'] == 'txt') // c_mode enthält eben die information was es ist
       include('pfad/plugins/content_txt.php');
    else if($c['c_mode'] == 'img')
       include('pfad/plugins/content_img.php');
 }
..

Und das die Datei content_txt.php enthält dann einfach nur wie es ausgegeben wird.
Also zum beispiel:
PHP:
<div class="left"><img ... ></div>
<div class="right"><?php echo $c['c_text']; ?></div>

Und dann ist das im Prinzip gar kein Problem, denn dann fügt ihr neue Plugins einfach in diesen Ordner plugins/ ein und fügt eine neue Zeile in die Datenbanktabelle, wo die verschiedenen Plugintypen für den Adminbereich gespeichert werden ein. :)

Versteht ihr wie ich es meine ? :D


Grüße Simon

Ich hab mal eines angefangen, hab es aber mangels Wissen wieder aufgegeben.

Ich hab so halbwegs verstanden was du meinst, nur ich hab da ein paar fragen zum Grundgerüst wie die Seite aussehen muss vom Code her damit es auch wirklich t.
Gibts da irgendwelche Slicing Richtlinien an die man sich halten muss oder ähnliches?
 
Sorry bin heute leider sehr verwirrt und das merkt man wohl an meinen Erklärungen ;)

Genau so ist es.

ich würde ein Formular machen, welches im backendbereich angezeigt wird, wo man dann die Plugindaten einfüllen kann.

Und dann eins fürs Frontent, wo diese Daten dann ausgegeben werden.


Gehen wir einfach mal davon aus, dass wir nicht für jedes Plugin ein eigenes Formular machen:
Es wird deshalb schwierig, denn mit einem Einheitsformular im backendbereich geht es gut, solange es die gleichen Felder sind.
Das Feld Titel, Verstecken, ... wird bei jedem Datensatz angezeigt. Egal ob Bild, Sitemap, Text, ...
Wollen wir jetzt aber ein Feld nur anzeigen, wenn wir zum Beispiel ein Bild eintragen, dann müssten wir das mit einem if($c_plugin == 'bild') umklammer, damit es auch nur dann angezeigt wird.

In der Regel bleibt es aber nicht dabei, sondern das Feld muss auch angezeigt werde, wenn das Plugin text+bild ist, ...
Und wenn dann noch ein paar Sachen dazu kommen, ...
Dann haben wir ein großes Formular, welches mit sehr sehr vielen ifs zu Kämpfen hat. :)

Grüße Simon
 
Sorry bin heute leider sehr verwirrt und das merkt man wohl an meinen Erklärungen ;)

Genau so ist es.

ich würde ein Formular machen, welches im backendbereich angezeigt wird, wo man dann die Plugindaten einfüllen kann.

Und dann eins fürs Frontent, wo diese Daten dann ausgegeben werden.


Gehen wir einfach mal davon aus, dass wir nicht für jedes Plugin ein eigenes Formular machen:
Es wird deshalb schwierig, denn mit einem Einheitsformular im backendbereich geht es gut, solange es die gleichen Felder sind.
Das Feld Titel, Verstecken, ... wird bei jedem Datensatz angezeigt. Egal ob Bild, Sitemap, Text, ...
Wollen wir jetzt aber ein Feld nur anzeigen, wenn wir zum Beispiel ein Bild eintragen, dann müssten wir das mit einem if($c_plugin == 'bild') umklammer, damit es auch nur dann angezeigt wird.

In der Regel bleibt es aber nicht dabei, sondern das Feld muss auch angezeigt werde, wenn das Plugin text+bild ist, ...
Und wenn dann noch ein paar Sachen dazu kommen, ...
Dann haben wir ein großes Formular, welches mit sehr sehr vielen ifs zu Kämpfen hat. :)

Grüße Simon

Ja das leuchtet mir ein. Danke für die Erklärung
 
So und wiedermal eine frage.

Hab bis jetzt eine simple Template Klasse (wirklich nur sehr simple, sie lädt mir nur das template und vergibt ein paar platzhalter), eine mysql klasse und eine user klasse.

Da ich bei der User klasse ja überprüfen muss ob der user in der datenbank steht wollte ich frage wie ich diese miteinander am besten verbinde. Extend fällt aus da die beiden ja in keiner verbindung stehen.
Erstelle ich jetzt besser eine neue Instanz der mysql klasse in der user klasse oder sollte ich besser das mysql objekt im construktor der user klasse übergeben oder gibts noch was anderes.
Aber bei beiden möglichkeiten sind die klassen ja dann nichtmehr vollständig unabhängig voneinander oder?`
 
Schau doch mal mit phpinfo(), ob bei dir MySQLi verfügbar ist. Wenn ja kannst du dir nämlich die DBClass Sparen, da MySQLi bereits eine OOP-Syntax bereitstellt und viele zusätzliche nützliche Features bietet.

Zu der Sache mit den Usern. Lass die Datenbank das selbst prüfen, ob ein User bereits existiert. Dazu setze Name einfach auf UNIQUE.

Wenn du MySQLi nutzt kannst du an die Klasse einfach das Verbindungs-Objekt übergeben und dann in der Klasse damit weiter arbeiten. WIe das geht kannst du auch bei meiner Klasse zur binären Rechteverwaltung sehen. Ist hier im Forum zu finden. Einfach mal schaun.

In einer Klasse instanzieren kann man machen, finde ich aber unschön. Mit extend würde ich in dem Fall auch nicht arbeiten.
MfG, Andy
 
Schau doch mal mit phpinfo(), ob bei dir MySQLi verfügbar ist. Wenn ja kannst du dir nämlich die DBClass Sparen, da MySQLi bereits eine OOP-Syntax bereitstellt und viele zusätzliche nützliche Features bietet.

Zu der Sache mit den Usern. Lass die Datenbank das selbst prüfen, ob ein User bereits existiert. Dazu setze Name einfach auf UNIQUE.

Wenn du MySQLi nutzt kannst du an die Klasse einfach das Verbindungs-Objekt übergeben und dann in der Klasse damit weiter arbeiten. WIe das geht kannst du auch bei meiner Klasse zur binären Rechteverwaltung sehen. Ist hier im Forum zu finden. Einfach mal schaun.

In einer Klasse instanzieren kann man machen, finde ich aber unschön. Mit extend würde ich in dem Fall auch nicht arbeiten.
MfG, Andy
Grad nachgesehen, mysqli ist bei mir nicht verfügbar.

Also meinst du ich sollte erst mit der mysql klasse überprüfen ob der user vorhanden ist und erst dann die user klasse aufrufen oder?

/edit

hab mir grad deine klasse angesehen, du übergibts also die ganze instanz der mysqli (wär dann in meinem fall die instanz meiner mysql klasse) an den construktor.
Sowas hatte ich mir schonmal überlegt, aber ist das nicht etwas gegen das prinzip von oop, dass alles unabhängig voneinander gekapselt ist, oder verstehe ich da etwas falsch?
 
Zuletzt bearbeitet:
Keineswegs. Die Klasse wird viel abhängiger, wenn du extends benutzt oder die Klasse in der Klasse instanzierst. Außerdem kannst du die MySQL-Verbindung dann auch gleich für andere Aufgaben, die deine Seite bewältigen muss, verwenden.
MfG, Andy
 
Zurück