Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03447.jsonl.gz/442

Stellen wir uns vor, wir würden den Page-Controller erweitern, indem wir in der bereits bestehenden Klasse unseren Code einfach dazuschreiben. Dabei würden wir aber das normale Verhalten der Silverstripe-Seiten überschreiben. Aber bei einem späteren Update, würde so unsere Erweiterung zerstört werden. Es gibt dazu einen eleganteren Weg.
Wir werden einen neue Klasse erstellen, die alle Eigenschaften und Methoden von Page erbt und diese erweitert. Das heisst, wir erstellen eine neue Datei die den Page-Controller beerbt und unsere zusätzlichen Eigenschften und Methoden beinhaltet. So erhalten wir einen neuen Seitentyp der alles kann was Page kann, plus unsere neu gestalteten Fähigkeiten.
Wir möchten eine Seiten-Vorlage bauen, die rechts eine zusätzliche Spalte anzeigt. Darin möchten wir einen Titel und Inhalte aus Texten und Bildern einfügen. Im Backend brauchen wir dazu ein Titel-Textfeld und einen Editor für die Inhalte. Alle Möglichkeiten die Silverstripe mit dem Pagetyp bietet, Bilder, Links und Formate möchten wir für unsere Seite erben. So können wir unsere "News-Spalte" wie die übrigen Seiteninhalte bewirtschaften.
Als Page-Typ bezeichnen wir die Vorlage, die wir beim erstellen einer neuen Seite verwenden. Um das bestehenden Page-Verhalten zu erben müssen wir nur eine eigene Klasse bauen, die sich auf Page bezieht. Diese Datei muss im Ordner mysite/code hinterlegt werden und ihre Klassen-Bezeichnung auch als Dateinamen tragen. (Beachte die Gross/Kleinschreibung)
Bsp: Die Klasse Page befindet sich in der Datei Page.php.
1. Erstelle die Datei RightBarPage.php im Ordner:
mysite/code/RightBarPage.php
2. Öffne die Datei im Editor
Die noch leere Datei wird mit dem Klassen-Modell und -Controller bestückt. Das Modell wird die benötigte Datenbank und den Zugriff erstellen, der Controller die Anzeige im Backend und die Übergabe an die View-Datei regeln. Es gibt also viel zu tun, wir werden dazu aber nur wenige Zeilen benötigen. Dafür müssen wir uns strikt an die Regeln halten.
Zuerst erstellen wir das Gerüst:
<?php
class RightBarPage extends Page {
...
}
class RightBarPage_Controller extends Page_Controller {
...
}
Nun erstellen wir die Datenbank und regeln die Zugriffe. Wir wenden uns also dem Modell zu, dem oberen Teil unseres Objekts. Wir brauchen eine Tabelle in der Datenbank mit Spalten für den Titel und den Text. Wir müssen der MYSQL-Tabelle noch mitteilen, welchen Feldtyp wir in der Datenbanktabelle brauchen. 'Varchar(100)' ist für Textfelder mit maximal 100 Anschlägen angelegt, 'HTMLText' ist eine Datenbank-Spalte für HTML-codierten Textinhalt.
<?php
class RightBarPage extends Page {
static $db = array(
"RightBarTitle" => "Varchar(100)",
"RightBarContent" => "HTMLText"
);
}
class RightBarPage_Controller extends Page_Controller {
}
3. Erstelle den Code wie abgebildet
4.Speichere und Publiziere mysite/code/RightBarPage.php
5. Rufe dein Silverstripe mit dev/build auf
Der Environment-Builder zeigt dir die erstellten Datenbanktabellen mit den gewünschten Spalten.
Die eben erzeugte Datenbanktabelle mit PhpMyAdmin betrachtet:
Die Datenbank wurde erstellt. Bevor wir sie testen können, müssen wir ein Textfeld und einen Editor zur Bewirtschaftung im Backend erstellen.