Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: DeveloperTalk. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

1

26.10.2011, 14:54

10. Den Content auf die Seite bringen

Heute wollen wir mal den Content auf die Seite bringen. ;-)
Dazu ändern wir die "Page.php" wie folgt ab.

Page.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php

class Page {

    public function getHeader () {
        return "Header";
    }

    public function getTitle () {
        return "Titel";
    }

    public function getContent () {

        if (!isset($_REQUEST['include'])) {
            $filename "Startseite";
        } else {
            $filename $_REQUEST['include'];
        }

        $file preg_replace("/[^a-z0-9\-\/]/i","",$filename);
        if(isset($file[0]) && $file[0] == "/"){
            $file substr($filename,1);
        }

        $file "Content/pages/" $file;
        $file .= ".php";

        if(!file_exists($file)){
            $file "Content/pages/404.php";
        }

        require($file);

    }

}

?>


Als nächstes erstellen wir eine neue Datei im Ordner "Content/pages" namens "404.php".
Diese Datei wird aufgerufen, wenn eine Datei nicht gefunden wurde.

404.php:

PHP-Quelltext

1
2
<h1>Error 404</h1><br /><br />
<b>Die aufgerufene Datei konnte nicht gefunden werden.</b>


Jetzt erstellen wir noch eine Datei in diesem Ordner, namens "Startseite.php".

Startseite.php:

PHP-Quelltext

1
2
<h1>Startseite</h1><br />
<b>Dies ist ihre Startseite.</b>


Nun müssen wir noch die "View.php" im Ordner "CMS/classes" editieren.
Die Funktion showPage() ist deutlich "geschrumpft" :D , da das ganze HTML-Grundgerüst jetzt im Style ausgelagert ist.

Hier ist der Code (View.php):

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

class View {

private $style_path "";

    public function View ($style_path) {
        $this->style_path $style_path;
    }

    public function showPage () {

    global $page;

        require($this->style_path);

    }

}

?>



Jetzt zur Datei "SkinController.php", die sich auch im Ordner "CMS/classes" befindet.

SkinController.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php

class SkinController {

    public function getSelectedSkin () {
        return Settings::getSetting("selectedskin");
    }

    public function getSkinPath () {

    if (!file_exists("Cache")) {
        mkdir("Cache");
    }

    if (!file_exists("Cache/styles")) {
        mkdir("Cache/styles");
    }

    if (!file_exists("Cache/styles/" SkinController::getSelectedSkin())) {
        mkdir("Cache/styles/" SkinController::getSelectedSkin());
    }

    if (!file_exists("Cache/styles/" SkinController::getSelectedSkin() . "/index.php")) {

        $handle fopen ("styles/" SkinController::getSelectedSkin() . "/index.php""r");

        $text "";

        while (!feof($handle)) {
        $buffer fgets($handle);
        $text .= $buffer;
        }

        fclose ($handle);

        $text str_replace("{CONTENT}"SkinController::PHPCode("$" "page->getContent()"), $text);
        $text str_replace("{STYLE}"SkinController::PHPCode("echo Settings::getSetting("selectedskin");"), $text);
        $text str_replace("{HEADER}"SkinController::PHPCode("$" "page->getHeader();"), $text);
        $text str_replace("{TITLE}"SkinController::PHPCode("echo " "$" "page->getTitle();"), $text);

        $handle fopen ("Cache/styles/" SkinController::getSelectedSkin() . "/index.php""w");

        fwrite($handle$text);

        fclose($handle);

        return "Cache/styles/" SkinController::getSelectedSkin();

    } else {
        return "Cache/styles/" SkinController::getSelectedSkin();
    }

    }

    public function PHPCode ($text) {
        return "<" "?" "php " $text " ?" ">";
    }

}

?>


Wie ihr seht, wurden eig. nur 2 Zeilen hinzugefügt:

PHP-Quelltext

1
2
        $text str_replace("{HEADER}"SkinController::PHPCode("$" "page->getHeader();"), $text);
        $text str_replace("{TITLE}"SkinController::PHPCode("echo " "$" "page->getTitle();"), $text);


Die erste Zeile sorgt dafür, das der Header ausgegeben wird, wenn der BBCode, oder wie man das nennen möchte ;-), aufgerufen wird (im Style), die zweite ist so ähnlich, nur das sie für den Titel ist. ;-)

Jetzt nur noch zum Design. ;-)
Die Datei "index.php" im Ordner "styles/default" sieht jetzt wie folgt aus:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!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>{TITLE}</title>
{HEADER}
<style type="text/css">
body {
    background-color:#9AD7FF;
    color:#002EFF;
}
</style>
</head>
<body>
<b>Ihr ausgew&auml;hlter Style: {STYLE}</b><br />
<hr /><br />
{CONTENT}
</body>
</html>


Damit aber auch das neue Design übernommen wird, müsst ihr den Ordner "default" im Ordner "Cache" löschen.
Achtung: Nicht der Ordner im Ordner "styles", sondern im Ordner "Cache".
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

2

26.10.2011, 15:04

Der aktuelle Stand befindet sich wieder im Dateianhang.
Diesmal ist auch eine "cms.sql" dabei, mit der die MYSQL-Tabellen in eure Datenbank importieren könnt. ;-)
»JuKu« hat folgende Datei angehängt:
  • Stand_10.zip (8,2 kB - 82 mal heruntergeladen - zuletzt: Gestern, 03:06)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

3

27.10.2011, 14:51

Hat das ganze übrhaupt schon mal jemand mitgemacht / nachgemacht? ;)
Und besteht überhaupt noch Interesse, da keine Kritik, Anregungen, ... kommen? :P
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

4

27.10.2011, 18:13

Naja ich habs nicht nachgemacht... Einmal, weil ichs im Moment nicht brauche, da ich mich gerade eher nicht soviel mit Web-Entwicklung beschäftige und zweitens hätte ich einige Grundlegende andere Ansätze benutzt...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

5

27.10.2011, 20:03

Wie hättest du es den gemacht? ;)
Ich bin für Tipps offen. :P
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

6

27.10.2011, 20:07

Naja ich Perönlich würde zum Beispiel für die Templates nicht solche komischen sachen in {Klammern} machen... wozu? PHP ist Template-Sprache genug...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

7

27.10.2011, 20:11

Da hast du eig. Recht.
Aber ich wollte nicht unbedingt PHP-Befehle in die Template-Dateien bringen.
Bei Smarty wirds so ähnlich gemacht.
Wenn du das ganze mal nachmachen würdest, würdest du dann ja auch merken, das daraus im Cache PHP-Anweisungen werden (s. Ordner "Cache/styles"). :P
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

8

27.10.2011, 22:39

Aber wie mach ich mit deinen {Klammern} schleifen oder andere Kontrollstrukturen? Außerdem muss man ja auch alles wieder Hardcode ersetzen lassen O.o
Gleich PHP zu nehemen, wie bei Wordpress, finde ich für mich sinnvoller... Naja muss jeder die Methode nehmen, mit der er am besten klarkommt...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

9

28.10.2011, 12:00

Am Anfang wollte ich es so machen, wie du es sagst. :D
(Übrigens: Du kannst auch PHP-Anweisungen in die Template-Datei schreiben, diese werden auch ausgeführt, aber du musst es nicht.)
Aber es sollen ja auch diejenigen Template-Dateien erstellen können, die kein PHP können, sondern nur HTML und CSS.
Bei phpBB3 oder evtl. auch bei WBB wird es so ähnlich gemacht. ;)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

10

28.10.2011, 12:01

Aber wie mach ich mit deinen {Klammern} schleifen oder andere Kontrollstrukturen? Außerdem muss man ja auch alles wieder Hardcode ersetzen lassen O.o
Gleich PHP zu nehemen, wie bei Wordpress, finde ich für mich sinnvoller... Naja muss jeder die Methode nehmen, mit der er am besten klarkommt...
@Schleifen: ??? Ich glaube du hast das ganze etwas falsch verstanden.
Aus "{CONTENT}" wird am Ende "$page->getContent()" (s. Cache).
Und in dieser Funktion sind schon Schleifen.
Oder meinst du etwas anderes? ;)

Zitat

$text = str_replace("{CONTENT}", SkinController::PHPCode("$" . "page->getContent()"), $text);
$text = str_replace("{STYLE}", SkinController::PHPCode("echo Settings::getSetting(\"selectedskin\");"), $text);
$text = str_replace("{HEADER}", SkinController::PHPCode("$" . "page->getHeader();"), $text);
$text = str_replace("{TITLE}", SkinController::PHPCode("echo " . "$" . "page->getTitle();"), $text);

Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JuKu« (28.10.2011, 15:57)


Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

11

28.10.2011, 14:26

$page->getContent() hier wird html erzeugt? Wozu? ist dafür nicht das Template da?
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

12

28.10.2011, 15:51

Die Methode $page->getContent gibt lediglich den eig. Content / den Seiteninhalt zurück.
Also die aufgerufene Seite. ;)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

13

28.10.2011, 15:56

Am besten du entpackst die Zip-Datei einfach mal und schaust dir das ganze am besten mal mit XAMPP, o.ä. an. ;)

EDIT:

Zitat

public function getContent () {
if (!isset(
$_REQUEST['include'])) {
$filename = "Startseite";
} else {
$filename = $_REQUEST['include'];
}

$file = preg_replace("/[^a-z0-9\-\/]/i","",$filename);

if(isset(
$file[0]) && $file[0] == "/") {
$file = substr($filename,1);
}

$file = "Content/pages/" . $file;
$file .= ".php";

if(!
file_exists($file)){
$file = "Content/pages/404.php";
}

require(
$file);
}

Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JuKu« (28.10.2011, 16:02)


Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

14

28.10.2011, 16:35

Ah okay okay :D Habs verstanden...
Bleibt noch eins... Kann man in der Styledatei auch PHP-Funktionen benutzen? Ich meine, amn könnte die Funktionen von $page ja eigentlich auch da aufrufen oder? Außerdem hat man sonst ja keine Daten, die man ins Theme einbaun kann...?
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

15

28.10.2011, 17:06

Ja, das muss man dann können, aber ich glaube, soweit sind wir noch gar nicht. :D
Nun noch einmal zu meiner Frage: Besteht den überhaupt noch Interesse an diesem Tutorial? :D
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Ähnliche Themen