Seiten Typen erstellen

Page

Für jede Seite müssen wir einen Seiten Typ zur Verfügung stellen. Seiten Typen können wir definieren, indem wir Page Controller erstellen. An diese Page Controller delegiert das Page Modul die Anfragen. In diesem Kapitel zeigen wir dir, wie du entsprechende Seiten Typen erstellen kannst.

  1. Template Modul erstellen
  2. Controller erstellen

Template Modul erstellen

Bevor wir unsere Page Controller erstellen, brauchen wir einen Ort, wo wir diese ablegen können. Wir erstellen dafür ein neues Modul mit dem Namespace template. Erstelle dazu die folgenden Verzeichnisse:

  • app/template
  • var/etc/template
  • public/assets/template

Exkurs: sichere Namespaces

Der Namespace template ist so offensichtlich, dass grosse Gefahr besteht, dass neben dir noch andere Entwickler den gleichen Namespace wählen. Gerade wenn du Module erstellen willst, welche du später wiederverwenden oder gar weitergeben möchtest, empfehlen wir dir, einen sicheren Namespace zu wählen, der eindeutig für dich ist! Empfehlung: ch.hnm.template. Der Namespace wird dabei aus einer Domain abgeleitet, welche dir gehört.

Der Namespace ch.hnm.template erfordert folgende Verzeichnisse: app/ch/hnm/template, public/assets/ch-hnm-template, var/etc/ch-hnm-template. Beachte dass der Pfad im public/assets und im /var/etc die Punkte des Namespaces durch - ersetzt.

Controller erstellen

Erstelle jetzt den PageController app/template/controller/TemplatePageController.php mit folgendem Inhalt:

<?php
namespace template\controller;

use page\bo\PageController;
use n2n\reflection\annotation\AnnoInit;
use page\annotation\AnnoPage;

class TemplatePageController extends PageController {
    private static function _annos(AnnoInit $ai) {
        $ai->m('startPage', new AnnoPage());
        $ai->m('standardPage', new AnnoPage());
    }
    
    public function startPage() {
        $this->forward('..\view\startPage.html');
    }
    
    public function standardPage() {
        $this->forward('..\view\standardPage.html');
    }
}

Mit der Annotation teilen wir dem Page Modul mit, dass TemplatePageController zwei Seitentypen zur Verfügung stellt: "startPage" und "standardPage".

Datenbank

Achtung: Page Controller sind Entitäten. Sie müssen registriert und in der Datenbank eröffnet werden. Das Registrieren erledigen wir in der app.ini von unserem Modul. Da es var/etc/template/app.ini bisher noch nicht gibt, erstellen wir das File gleich mit folgendem Inhalt:

[orm]
entities[] = "template\controller\TemplatePageController"

Eine Entität braucht aber auch eine Tabelle in der Datenbank:

CREATE TABLE `template_page_controller` (
  `id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Richtig, die Datentabelle für TemplatePageController besteht nur aus einer ID Spalte.

EiSpec

Unsere Entität braucht jetzt noch eine EiSpec. Gehe dazu in den Hangar und klicke mit der Rechten Maustauste unter "Entities", "template", "template\controller" auf "TemplatePageController" und wähle "Generate EiSpec". Daraufhin wird die EiSpec erstellt. Die EiSpec müssen wir nicht weiter konfigurieren.

Views

Du hast sicher festgestellt, dass die beiden Methoden in unserem Controller Views aufrufen, die es noch nicht gibt. Wir erstellen diese darum:

app/template/view/startPage.html.php

<?php
    use n2n\impl\web\ui\view\html\HtmlView;
    use n2n\web\ui\view\View;
    use page\ui\PageHtmlBuilder;

    $view = HtmlView::view($view);
    $pageHtml = new PageHtmlBuilder($view);
?>
<div class="jumbotron">
    <div class="container">
        <h1><?php $pageHtml->title() ?></h1>
    </div>
</div>

<div class="container">
    Content kommt hier...
</div>

Neu ist in dieser View der PageHtmlBuilder. Dieser stellt verschiedene Methoden für die Page spezifische HTML Ausgabe zur Verfügung. Ein Beispiel dafür ist $pageHtml->title(). Diese Methode gibt den Titel für die aktuelle Seite aus. Ist der Titel nicht gesetzt, gibt die Methode den Name aus.

app/template/view/standardPage.html.php

<?php
    use n2n\impl\web\ui\view\html\HtmlView;
    use n2n\web\ui\view\View;
    use page\ui\PageHtmlBuilder;

    $view = HtmlView::view($view);
    $pageHtml = new PageHtmlBuilder($view);
?>
<div class="container">
    <h1><?php $pageHtml->title() ?></h1>
    Content kommt hier...
</div>
Wenn du das Composer Projekt installiert hast, findest du die Musterlösungen unter app/qst/controller/QstPageController (für den TemplatePageController). Die beiden Views findest du unter app/qst/view/. Beachte, dass sowohl der QstPageController, als auch die beiden Views in app/qst/view bereits etwas weiter ausgebaut sind, als der Stand, den sie hier in diesem Kapitel haben. Der Grund sind die Content Items, welche erst im übernächsten Kapitel behandelt werden.
« Quickstart Page Seiten und Templates »

Kommentare

Du musst eingeloggt sein, damit du Beiträge erstellen kannst.

Fragen