• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP: Design aufrufen

freakXHTML

Mitglied
Hallo zusammen,
wenn meine Website ein festes Design hat und sich beispielsweise nur in einem gewissen Abschnitt etwas ändert, ist es dann möglich mit einem PHP Befehl, das restliche Design zu laden und in der jeweiligen Datei nur die tatsächlichen Änderungen zu haben.

Dann müsste ich nicht in jeder Datei das komplette Webseitendesign stehen haben.

Vielen Dank
lg, freakXHTML
 
ich weiss nicht genau wann du etwas geaendert haben moechtest, aber du kannst dir mehrere css files anlegen und immer nur das file includen das du moechtest.

sprich wenn jemand auf der home seite ist und sich einloggt z.b. koennte sich das layout aendern und dafuer ist ja nur ein anderes css file notwendig.
 
Dann müsste ich nicht in jeder Datei das komplette Webseitendesign stehen haben.

Hast du die CSS nicht in einer eigenen Datei? Die wird nämlich bei normalen aufrufen nur einmal geladen

Dann kannst du ja in dieser CSS datei z. B. unterschiedliche Divs setzten , ob und wie die dann in der jeweiligen html datei sind ist ja wurscht.

Aber vll kannst du deine Frage noch etwas genauer stellen, ggf ein Screenshot wäre nicht schlecht.

Greetz
 
Ich glaub er meint eher, dass er zwar PHP nutzt aber sein Layout dennoch nur auf einer einzigen Datei beruht.
Wenn ich mit der Vermutung richtig liege, lautet die Antwort: Ja.

Du machst dein Layout aus CSS und HTML.
Ganz grob sieht das in etwa so aus:
HTML:
<!DOCTYPE HTML>
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css">
<title>SEITENTITEL</title>
</head>
<body>
<h1>DEIN HEAD</h1>
<ul>
<li>DEINE</li>
<li>EINZEL</li>
<li>NEN</li>
<li>MENÜ</li>
<li>PUNKTE</li>
</ul>
<div id="inhalt">
DEIN
SEITEN
INHALT
</div>
<p>FOOTER DER SEITE</p>
wie du siehst, sieht dieser code bereits eine externe CSS vor.
was du jetzt machen musst, ist den code in kleine blöcke zu zerschnippeln und in einzelne dateien auszulagern.
etwa so:

head.htm
HTML:
<!DOCTYPE HTML>
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css">
<title>SEITENTITEL</title>
</head>
<body>
<h1>DEIN HEAD</h1>

menu.htm (beachte, dass hier bereits der container für den Seiteninhalt geöffnet wird!)
HTML:
<ul>
<li>DEINE</li>
<li>EINZEL</li>
<li>NEN</li>
<li>MENÜ</li>
<li>PUNKTE</li>
</ul>
<div id="inhalt">

foot.htm (beachte dass hier auch der container für den seiteninhalt geschlossen wird!)
HTML:
</div>
<p>FOOTER DER SEITE</p>

Die jeweiligen Inhalte speicherst du ebenfalls in eigenständige dateien (start.htm, kontakt.htm, uebermich.htm, etc.)

die dazugehörige PHP-datei sieht dann in etwa so aus (OHNE SICHERHEITSMASSNAHMEN!):
Beispiel für die index.php
PHP:
<?php
include("head.htm");
include("menu.htm");
include("start.htm");
//Hier können natürlich noch weitere Komponenten included werden
include("foot.htm");
?>

Wenn du nun dein Menü erweitern oder ändern möchtest, brauchst du nur ein einziges mal die menu.htm ändern statt auf allen seiten deiner Page
Beachte bitte: das beispiel ist wirklich nur ganz grob und beinhaltet keinerlei Sicherheitsmaßnahmen!
 
Zuletzt bearbeitet:
Wenn du das jetzt wieder klassenbasiert machen möchtest, dann wären alle Seiten eine View-Klasse und die Layout-Klasse würde ebenfalls ein View impementieren. Beim zusammenbauen mappt sich das Layout um das entsprechende View.
 
[offtopic]

scnr ;)

index.php:

PHP:
<?php

class Xy_View
{
    protected $_data   = array();
    protected $_script = '';

    public function __construct($script = null)
    {
        if (!is_null($script)) {
            $this->setScript($script);
        }
    }

    public function __set($name, $value)
    {
        $this->_data[$name] = $value;
    }

    public function __get($name)
    {
        if (!isset($this->_data[$name])) {
            throw new Exception(sprintf('Field "%s" not found', $name));
        }

        return $this->_data[$name];
    }

    public function escape($s)
    {
        return htmlspecialchars($s, null, 'UTF-8');
    }

    public function render()
    {
        require $this->_script;
    }

    public function setScript($script)
    {
        $this->_script = $script;
    }
}

class Xy_Layout extends Xy_View
{
    protected $_content = array();

    public function addContent(Xy_View $view)
    {
        $this->_content[] = $view;
    }

    public function getContent()
    {
        foreach ($this->_content as $view) {
            $view->render();
        }
    }
}

$layout = new Xy_Layout('./layout.phtml');

$layout->menuEntries = array(
    array('title' => 'DEINE',
          'link'  => 'deine/'),
    array('title' => 'EINZEL',
          'link'  => 'einzel/'),
    array('title' => 'NEN',
          'link'  => 'nen/'),
    array('title' => 'MENÜ',
          'link'  => 'menue/'),
    array('title' => 'PUNKTE',
          'link'  => 'punkte/')
);



$view = new Xy_View('./home.phtml');

$view->name = 'Mark van Bommel';
$view->someOtherData = array('fuchs', 'du', 'hast', 'die', 'gans', 'gestohlen');



$layout->addContent($view);

$layout->render();

layout.phtml:

PHP:
<!DOCTYPE HTML>
<html>
    <head>
        <link href="style.css" rel="stylesheet" type="text/css">
        <title>SEITENTITEL</title>
    </head>
    <body>
        <h1>DEIN HEAD</h1>
        <ul>
            <?php foreach ($this->menuEntries as $entry): ?>
            <li>
                <a href="<?php echo $this->escape($entry['link']); ?>">
                    <?php echo $this->escape($entry['title']); ?>
                </a>
            </li>
            <?php endforeach; ?>
        </ul>
        <div id="inhalt">
            <?php $this->getContent(); ?>
        </div>
        <p>FOOTER DER SEITE</p>
    </body>
</html>

home.phtml:

PHP:
<h1>Startseite</h1>

<p>Name: <?php echo $this->escape($this->name); ?></p>

<p><?php echo $this->escape(implode(' ', $this->someOtherData)); ?></p>

Jetzt fehlt nur noch 'nen Dispatcher und ein paar Controller.

Wen es interessiert, etwa das Zend Framework implementiert diese Art der Architektur:

- Zend Framework: Documentation: Zend Framework Quick Start - Zend Framework Manual
- Tutorial: Getting Started with Zend Framework 1.10 – Rob Allen's DevNotes

[/offtopic]
 
Zuletzt bearbeitet:
Ja, das war wohl, was ich gesucht habe. Ich werde es gleich mal ausprobieren.

Herzlichen Dank, Matrosen!
lg, freakXHTML
 
Zurück
Oben