Skip to content
This repository has been archived by the owner on Dec 19, 2019. It is now read-only.

eigene Seiten erstellen

Oliver edited this page Dec 6, 2015 · 3 revisions

Das SHC ist so ausgelegt das es einfach erweiterbar ist, dafür bringt das Framework einen Front Controller mit der die verarbeitung der einzelnen Seiten soweit übernimmt das man sich nur noch um dein eigentlichen Inhalt kümmern muss.

Grundlegendes

Jede Seite im SHC wird über ein Objekt definiert, diese muss für eine Seite der PC Oberfläche im Namensraum "SHC\Command\Web" und für mobile Geräte im Namensraum "SHC\Command\Smartphone" liegen. Für verschiedene Anwendungsfälle gibt es im SHC Spezielle Seiten:

  • Page -> normale Seite
  • Ajax -> Ajax Anfrage die mit einem HTML Fragment oder JSON Objekt beantwortet wird
  • Action -> eine Aktion die keine direkte ausgabe hat sondern nach dem ausführen auf eine andere Seite umleitet
  • Sync -> liefert per SSE fortlaufend Daten an den Browser
  • CLI -> Anfrage auf der Kommandozeile

Um diese Funktionen zu nuten muss die jeweilige Klasse aus dem RWF Framework erweitert werden.

Die erste eigene Seite im SHC Framework

Nun zeige ich wie man die erste einfache Seite im SHC erstellt. Dazu wird unter "shc/data/commands/web" eine Datei namens "testpage.class.php" erstellt. Der Name muss mit page.class.php enden und die Zeichen davor geben den Seitennamen an über den die Seite dann im SHC erreichbar ist. Bei der Seite TestPage.class.php kann dann also die Seite mit der URL index.php?app=shc&page=test im Browser aufgerufen werden.

Der inhalt der TestPage.class.php muss dann wie folgt aussehen:

<?php

namespace SHC\Command\Web;

//Imports
use RWF\Request\Commands\PageCommand;

/**
 * Beispielseite
 */
class TestPage extends PageCommand {

    /**
     * Template Datei
     *
     * @var String
     */
    protected $template = '';

    /**
     * Sprachpakete die geladen werden sollen
     *
     * @var Array
     */
    protected $languageModules = array();

    /**
     * Daten verarbeiten
     */
    public function processData() {

    }
}

in der Methode processData kann nun der eigene Quellcode eingefügt werden welcher die Daten erzeugt die auf der Seite angezeigt werden soll. Dieser Content kann entweder direkt an den Browser ausgegeben werden, oder über die Template Engine in Form eines Templates recht einfach zur Anzeige gebrach werden. Ich werde hier den Weg über die Templates beschreiben, da dies das vorgesehne Werkzeug im SHC Framework ist.

Templates

Templates sind vereinfachte HTML Dateien welche aber den Dynamischen Content einfügen können. Das HSC bringt eine eigene Template Engine mit, welche möglichkeiten diese Bietet und welche Plugis das SHC von Haus aus mitbring könnt ihr in der templateTags.txt im Projekt nachlesen.

Templates können im Ordner "shc/data/templates/" oder in einem Optionalen Unterordner "templates" unter dem Pfad in dem die Klassendatei für die Seite liegt abgelegt werden. Wir wählen hier den 2. weg und legen unser Template unter "shc/data/commands/web/templates" ab. Der Name der Datei ist frei wählbar, ich empfehle das Template einfach wie das Seitenobjekt zu nennen, in unserem Fall also "testpage.html". In diese Datei kann ein ganz normales HTML Dokument geschrieben werden:

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>hallo SHC</h1>
    </body>
</html>

Das nun erstellte Template muss dem Seitenobjekt noch bekannt gemacht werden, dazu muss die Eigeschaft $template der Seitenklasse TestPage.class.php mit dem namen der Template Datei ausgefüllt werden:

    /**
     * Template Datei
     *
     * @var String
     */
    protected $template = 'testpage.html';

Ruft man nun die URL index.php?app=shc&page=test im Browser auf sollte auf der Seite Groß "hallo SHC" stehen.

Variablen aus der Anwendung ins Template bringen

Will man nun Variablen aus der Methode processData in das Template übertragen muss man sich zuerst das Template Objekt holen und kann dann mit der Methode assign Variablen an das Template übergeben und diesen einen Namen im Template geben, Beispiel:

    /**
     * Daten verarbeiten
     */
    public function processData() {
        
        $variable = 'hallo SHC';
        
        $tpl = SHC\Core\SHC::getTemplate();
        $tpl->assign('beispielVariable', $variable);
    }

im Template kann die Variable nun über das Konstrukt {$variablenName} zur Anzeige gebracht werden:

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>{$beispielVariable}</h1>
    </body>
</html>

Ruft man nun die URL index.php?app=shc&page=test im Browser auf sollte auf der Seite Groß "hallo SHC" stehen.

Beispieldateien komplett

Datei: "shc/data/commands/web/testpage.class.php"

<?php

namespace SHC\Command\Web;

//Imports
use RWF\Request\Commands\PageCommand;
use SHC\Core\SHC;

/**
 * Beispielseite
 */
class TestPage extends PageCommand {

    /**
     * Template Datei
     *
     * @var String
     */
    protected $template = '';

    /**
     * Sprachpakete die geladen werden sollen
     *
     * @var Array
     */
    protected $languageModules = array();

    /**
     * Daten verarbeiten
     */
    public function processData() {

        $variable = 'hallo SHC';
        
        $tpl = SHC::getTemplate();
        $tpl->assign('beispielVariable', $variable);
    }
}

Datei: "shc/data/commands/web/templates/testpage.html"

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>{$beispielVariable}</h1>
    </body>
</html>

die SHC Kopfzeile für meine eigene Seite:

Man kann natürlich auch die SHC Kopfzeile in seine eigene Seite mit einbainden, dazu müssen die Dateien wie folgt erweitert werden:

Datei: "shc/data/commands/web/testpage.class.php"

<?php

namespace SHC\Command\Web;

//Imports
use RWF\Request\Commands\PageCommand;
use SHC\Core\SHC;

/**
 * Beispielseite
 */
class TestPage extends PageCommand {

    /**
     * Template Datei
     *
     * @var String
     */
    protected $template = '';

    /**
     * Sprachpakete die geladen werden sollen
     *
     * @var Array
     */
    protected $languageModules = array();

    /**
     * Daten verarbeiten
     */
    public function processData() {

        $variable = 'hallo SHC';
        
        $tpl = SHC::getTemplate();
        $tpl->assign('apps', SHC::listApps());
        $tpl->assign('style', SHC::getStyle());
        $tpl->assign('user', SHC::getVisitor());

        $tpl->assign('beispielVariable', $variable);
    }
}

Datei: "shc/data/commands/web/templates/testpage.html"

<!DOCTYPE html>
<html>
    <head>
        <title>{setting name='shc.title' encodeHtml=1}</title>
        <meta charset="UTF-8">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        {$style->fetchHtmlHeaderTags()}
    </head>
    <body>
        {include file='headline.html'}
        <div id="shc-content">
            <h1>{$beispielVariable}</h1>
        </div>
    </body>
</html>

Durch diese Erweiterung wird die Standar Kopfzeile mit allen zugehörigen Funktionen eingebungden. Dadurch steht ein Anmeldefenster, die Buttons zum Herunterfahren und Neustarten usw. zur verfügung.