Lupe Suche
Responsiv Devices

2 - Einen eigenen Controller

Jetzt brauchen wir die nötigen Eingabefelder im Backend um unsere RightBar auch Bewirtschaften zu können. Wir erstellen für den Titel ein Textfeld und für den Inhalt ein Editorfeld, wie wir es für den normalen Seiteninhalt bereits kennen.

Eine Funktion um die Felder aufzubauen (Erläuterung)

Wir rufen zuerst die Methode 'getCMSFields()' auf, sie kann unsere Spalten aus der Datenbank abbilden und stellt uns die nötigen Eingabefelder zur Verfügung. Wenn wir Inhalte einfüllen, wird die Methode beim Speichern der Seite die Datenbank aktualisieren. Darum müssen wir uns nicht selbst kümmern, das erben wir alles vom Site-Controller von Silverstripe. (Eine Übersicht der Grundcontroller folgt.)

function getCMSFields() {
        $fields = parent::getCMSFields();
        
         ...

        return $fields;
    }

An die Variable $fields werden mit parent::getCMSFields() alle Fähigkeiten der Klasse CMSFields übergeben. Sie ist mächtig, sie bildet eine Schnittstelle zur Datenbank, kann Datensätze verwalten und diese mit einem raffinierten Interface im Backend anzeigen.

Die Zeile return $fields gibt das ganze Datenobjekt zurück wenn die Methode aufgerufen wird.

Im nächsten Schritt müssen wir der Variablen $fields mitteilen, welche für Eingabefelder wir im Backend angezeigt wünschen und wo wir diese haben möchten.

function getCMSFields() {
   $fields = parent::getCMSFields();

        
   $fields->addFieldsToTab("Root.Rechts",
new TextField('RightBarTitle', "Titel der rechten Spalte."));

   $fields->addFieldsToTab("Root.Rechts",
new HTMLEditorField('RightBarContent', "Der Inhalt der rechten Spalte",$rows=16));
        
   return $fields;
   }

Zuerst erstellen wir das Titel-Textfeld:
Die Methode addFieldsToTab() bringt das Textfeld auf die gewünschte Position.
Root.Rechts erstellt im Inhaltsbereich des Backends einen zusätzlichen Reiter mit dem Namen "Rechts", unter diesem Reiter werden wir unsere neue Spalte editieren.
Mit new TextField() wird ein neues Objekt (ein Textfeld) erzeugt, das mit unserer Datenbank-Spalte RightBarTitle  interagiert. Der zweite Parameter zeigt ein Text-Label über dem Textfeld.

Die gleiche Schreibweise erkennen wir für das Editorfeld:
Die Methode addFieldsToTab() bringt das Editorfeld auf die gewünschte Position.
Root.Content.Rechts, das Editorfeld soll im gleichen Reiter wie der Titel angezeigt werden.
Mit new HTMLEditorField() wird ein neues Objekt (ein TinyMCE-Editor) erzeugt, das mit unserer Datenbank-Spalte RightBarContent * interagiert. Der zweite Parameter zeigt ein Text-Label über dem Editor, $rows=16 begrenzt den Editor auf 16 Zeilen Höhe.

* Beachte die Silverstripeversion:

  • "RightBarContent". In Silverstripe 2.x ist es erforderlich das Editorfeld mit einer Bezeichnung: "xxxContent" zu versehen. Wird das Wort "Content" ersetzt, können die JQuery-Funktionalitäten nicht geladen werden und das Editorfeld ist nicht richtig nutzbar. Hierbei kann es sich um einen Bug handeln, taucht in der Dokumentation so nicht auf, hat aber auf verschiedenen Foreneinträgen Spuren hinterlassen.
  • In Silverstripe 3.0.x wurden die 'getCMSField-Parameter' aktualisiert.
    Von alt: 
    $fields->addFieldsToTab("Root.Content.Rechts", 
    new TextField('RightBarTitle', $title = "Titel der rechten Spalte."));
    zu neu:
  • $fields->addFieldsToTab("Root.Rechts", 
    new TextField('RightBarTitle', "Titel der rechten Spalte."));

Die Zeile return $fields bringt alle Daten zurück an getCMSFields() (Methodenbezeichnung) .

Die Methode Praktisch anwenden

Achte darauf die Übersicht über die einzelnen Code-Segmente zu behalten. Wir erstellen zuerst die Methode getCMSFields. Sie gehört unter das Datenbank-Modell.

1. Erstelle die Methode gemäss dem abgebildeten Codeblock unten.

<?php
class RightBarPage extends Page {

    static $db = array(
         "RightBarTitle"     => "Varchar(100)",
        "RightBarContent"    => "HTMLText"
    );

    
function getCMSFields() {
        $fields = parent::getCMSFields();
        
      ...
        
        return $fields;
    }
    
}
...

2. Erzeuge den Code für die Anzeige innerhalb der Methode
    gemäss dem abgebildeten Codeblock unten.

...    
function getCMSFields() {
        $fields = parent::getCMSFields();

        
        $fields->addFieldsToTab("Root.Rechts", new TextField('RightBarTitle', "Titel der rechten Spalte."));
        $fields->addFieldsToTab("Root.Rechts", new HTMLEditorField('RightBarContent',"Der Inhalt der rechten Spalte",$rows=16));
        
        return $fields;
    }
    
}
...

3. Speichere und Publiziere die Datei RightBarPage.php
4. Rufe deine Site im Browser mit dev/build auf
5. Logge dich ins Backend ein!

Fehlerhafter Controller führt zum 'crash' des CMS

Der URL-Aufruf mit dev/build aktualisiert die Datenbankeinträge für die Grundkonfiguration von Silverstripe. Dieser Befehl sollte in einer aktiven Silverstripeinstallation eigentlich jederzeit ausführbar sein. Es ist also darauf zu achten, dass keine halbfertigen oder fehlerhaften Controller auf den Server geladen werden. Silverstripe 'crasht', sobald ein fehlerhafter Controller mit dev/build aufgerufen wurde. Die einzige Möglichkeit, Silverstripe wieder 'flott' zu machen, besteht darin, den fehlerhaften Controller zu entfernen und die Website nochmals mit dev/build aufzurufen.

Weiter mit dem neuen Page-Typ RightBarPage