-
Notifications
You must be signed in to change notification settings - Fork 18
eigene Seiten erstellen
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.
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.
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 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.
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.
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>
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.