Hallo!
Ich versuche mich jetzt doch endlich in OOP einzuarbeiten. Vieles hilft im Web, wie Tutorials auf YT oder auch schriftliches in Blogs. Foren und Büchern.
Dennoch hab ich das eine oder andere Problem und frage dann jetzt einmal gezielt hier in einem Forum nach. Vielleicht kann mir der eine oder andere ein paar Hinweise geben?
Um mit der OOP einigermaßen klar zu kommen, versuche ich das anhand eines kleinen CMS. So habe ich auch mit 'normalen' PHP lernen angefangen, was so ganz gut klappte. Bin aber überhaupt kein Profi, um das noch zu erwähnen.
Was ich bisher gemacht habe ist folgendes: Ich habe eine Klasse (pages) erstellt, die mir die Inhalte von den einzelnen Seiten zusammenbaut. Später kommt das dann auch einer Datenbank.
Diese Inhalte übergeben ich an ein Template, was mir die HTML-Seite aufbaut. Ja und das klappt eigentlich auch ganz gut bisher.
Aber... für diverse Kontentelemente möchte ich eigene Klassen haben und dieses dann in die Pages-Klasse einbinden und entsprechend mit an das Template senden. Da habe ich schon ein erstes Problem. Zusätzlich würde ich gerne noch zu jeder eigenen Kontent-Klasse ein seperates Template erstellen, was auch nur den Inhalt dieses Kontentelementes ausgibt. Ich bekomme das zwar hin, aber leider auch mit einem Problem.
Hier mal die pages-Klasse:
Wie man sieht noch ohne Datenbank, aber zum ersten testen geht das auch so.
Ich habe hier zwei Methoden die zwar beide funktionieren, aber nur die ertse so wie es sein sollte. Der Grund ist, daß ich die Navigation hier direkt einbinde und nicht wie in der zweiten Methode über eine andere Klasse.
Diese sieht so aus:
zusätzlich noch das Navigations-Templates, was aber bei Methode 2 den selben Effekt hat, als wenn ich es ohne mache. Ich dachte ja erst, daß es am Template liegt, doch dem ist nicht so.
Das Haupttemplate schaut bisher ganz einfach so aus:
Wie man erkennen kann, werden dann später auch noch der Header, der Footer und auch noch linke und rechte Spalten erstellt.
Hier habe ich jetzt erstmal zwei Fragen dazu:
1. Ist der komplette Ansatz schon einmal so brauchbar? Baut man so, oder so ähnlich, ein kleines CMS mit Templates auf?
2. Wie kann ich erreichen, daß in der Pages-Klasse die zweite Methode so funktioniert, wie es sein soll. Die Navigation wird nicht da ausgegeben, wo sie im Template ausgegeben werden sollte. Sie wird nach ganz oben gesetzt, über den <head>-Bereich. Funktionieren tut sie aber.
Ich habe zwar schon auf ein paar Seiten etwas über Vererbung gelesen, aber leider bin ich da noch nicht so richtig draus schlau geworden.
Ich hoffe ich konnte mein Problem halbwegs gut erläutern und freue mich auf den einen oder anderen Tipp von euch!
Danke und Gruss
Fransisco
Ich versuche mich jetzt doch endlich in OOP einzuarbeiten. Vieles hilft im Web, wie Tutorials auf YT oder auch schriftliches in Blogs. Foren und Büchern.
Dennoch hab ich das eine oder andere Problem und frage dann jetzt einmal gezielt hier in einem Forum nach. Vielleicht kann mir der eine oder andere ein paar Hinweise geben?
Um mit der OOP einigermaßen klar zu kommen, versuche ich das anhand eines kleinen CMS. So habe ich auch mit 'normalen' PHP lernen angefangen, was so ganz gut klappte. Bin aber überhaupt kein Profi, um das noch zu erwähnen.
Was ich bisher gemacht habe ist folgendes: Ich habe eine Klasse (pages) erstellt, die mir die Inhalte von den einzelnen Seiten zusammenbaut. Später kommt das dann auch einer Datenbank.
Diese Inhalte übergeben ich an ein Template, was mir die HTML-Seite aufbaut. Ja und das klappt eigentlich auch ganz gut bisher.
Aber... für diverse Kontentelemente möchte ich eigene Klassen haben und dieses dann in die Pages-Klasse einbinden und entsprechend mit an das Template senden. Da habe ich schon ein erstes Problem. Zusätzlich würde ich gerne noch zu jeder eigenen Kontent-Klasse ein seperates Template erstellen, was auch nur den Inhalt dieses Kontentelementes ausgibt. Ich bekomme das zwar hin, aber leider auch mit einem Problem.
Hier mal die pages-Klasse:
PHP-Code:
class Pages {
public $template;
public $header;
public $footer;
public $content;
public $navi;
public function __construct () {
$this->header = "HEADER";
$this->footer = "FOOTER";
$this->template = $GLOBALS['CONFIG']['TMP_FILE'];
}
public function getTemplate () {
(isset($_GET['pageID'])) ? $pageID = $_GET['pageID'] : $pageID = 1;
switch ($pageID) {
case 1:
$hx = 1;
$class = "home";
$headline = "Home";
$page_content = 'Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis,
feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel
augue. Curabitur ullamcorper ultricies nisi.';
break;
case 2:
$hx = 1;
$class = "about";
$headline = "About";
$page_content = 'Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel
augue. Curabitur ullamcorper ultricies nisi.';
break;
case 3:
$hx = 1;
$class = "contact";
$headline = "Contact";
$page_content = 'Porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis,
feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel
augue. Curabitur ullamcorper ultricies nisi.';
break;
}
$content = '<h' . $hx . ' class="' . $class . '">' . $headline . '</h' . $hx . '>';
$content .= $page_content;
$this->content = $content;
/**
* Methode 1
*/
$navi = '<a href="index.php?pageID=1">Home</a> | <a href="index.php?pageID=2">About</a> | <a href="index.php?pageID=3">Contact</a>';
$this->navi = $navi;
/**
* Methode 2
*/
$navigation = new navigation();
$this->navi = $navigation->getNavi($pageID);
require_once 'templates/' . $this->template . '.php';
}
}
Ich habe hier zwei Methoden die zwar beide funktionieren, aber nur die ertse so wie es sein sollte. Der Grund ist, daß ich die Navigation hier direkt einbinde und nicht wie in der zweiten Methode über eine andere Klasse.
Diese sieht so aus:
PHP-Code:
class navigation {
public function getNavi ($pageID) {
// require_once 'templates/tmp_navigation.php';
echo '<a href="index.php?pageID=1">Home</a> | <a href="index.php?pageID=2">About</a> | <a href="index.php?pageID=3">Contact</a>';
}
}
Das Haupttemplate schaut bisher ganz einfach so aus:
HTML-Code:
<!DOCTYPE html> <html lang="de"> <head> <title><?php echo $GLOBALS['CONFIG']['PROJECT_NAME']; ?></title> <meta charset="<?php echo $GLOBALS['CONFIG']['CHARSET']; ?>"> </head> <body> <div style="border: 1px green solid; padding: 10px;"><?php echo $this->header; ?></div><br> <div style="border: 1px gold solid; padding: 10px;"><?php echo $this->navi; ?></div><br> <div style="border: 1px red solid; padding: 10px;"><?php echo $this->content; ?></div><br> <div style="border: 1px blue solid; padding: 10px;"><?php echo $this->footer; ?></div> </body> </html>
Hier habe ich jetzt erstmal zwei Fragen dazu:
1. Ist der komplette Ansatz schon einmal so brauchbar? Baut man so, oder so ähnlich, ein kleines CMS mit Templates auf?
2. Wie kann ich erreichen, daß in der Pages-Klasse die zweite Methode so funktioniert, wie es sein soll. Die Navigation wird nicht da ausgegeben, wo sie im Template ausgegeben werden sollte. Sie wird nach ganz oben gesetzt, über den <head>-Bereich. Funktionieren tut sie aber.
Ich habe zwar schon auf ein paar Seiten etwas über Vererbung gelesen, aber leider bin ich da noch nicht so richtig draus schlau geworden.
Ich hoffe ich konnte mein Problem halbwegs gut erläutern und freue mich auf den einen oder anderen Tipp von euch!
Danke und Gruss
Fransisco
Kommentar