Source (PageType)

Spezieller Seitentyp "Source" OHNE Sidebar

Beschreibung

Die Darstellung von Source mit der Formatierung "Rohdaten" ist bei aktiver Sidebar teilweise etwas unschön, da die verfügbare Breite der Seite durch die Sidebar recht klein ist, und "Rohdaten" nicht umgebrochen sind. Hierdurch ragt der Text teilweise aus der eigentlich Box raus, wird dann aber am Seitenrand gnadenlos abgeschnitten. Außerdem sind die Voreingestellten Ränder für die Box relativ groß.

Daher habe ich mich entschlossen zum einen die Ränder etwas anzupassen, andererseit jedoch einen zusätzlichen Seitentyp ohne SideBar zu erstellen, sodaß ich bei jeder Seite durch Zuweisung des Seitentyps eintscheiden kann ob die SideBar dargestellt werden soll oder nicht. Die Navigation auf solchen Seiten funktioniert dann jedoch nur über die "Breadcrumbs" am oberen Bildschirmrand, oder durch erneute Navigation über die Hauptebene. Da dieser Seitentyp jedoch hauptsächlich für die Darstellung von Seiten mit Sourcecode eingesetzt werden soll, sehe ich das als keine wirkliche Einschränkung an.

Das Problem das die Rohdaten nicht umgebrochen werden und am Seitenrand abgeschnitten werden ist damit allerdings nicht behoben. Eine echte Lösung gibt es dafür meiner Meinung nach auch nicht, das würde der Definition von "Rohdaten" widersprechen.

Anpassung der Formatierung für "Rohdaten"

Ich nutze ein leicht angepasstes Theme, basierend auf dem Standardtheme blackcandy, blackcandy-ah01. Für die Formatierung von "Rohdaten" wird "pre" genutzt, die Defintion befindet sich (bei mir) in themes\blackcandy-ah01\css\typography.css. Hier habe ich die voreingestellten Ränder (margin:2em 5em;) deutlich verkleinert, um mehr Platz in der Box zu erhalten.

/* PRE STYLES 
-------------------------------------------- */    
.typography pre {
    font-family:"Courier New",Courier;
    display:block;
    font-size:1.2em;
    margin:1em 0.5em 0.5em 1em;
    padding:0.5em;
    border:1px #ccc solid;
    background:#eee;;
}

 

Hauptänderung ist jedoch der neue Seitentyp "Source". Hierzu sind nur geringe Eingriffe in das System nötig. Es müssen zwei kleine PHP-Skripte für den neuen Typ angelegt werden. Einer ist für die Seite selber, der andere ist ein "Holder", welche den neuen Seitentyp aufnimmt. Da ich für die Seite ein unterschiedliches Layout (ohne die SideBar) habe möchte, muss auch noch ein Layout für den neuen Typ angelegt werden.

Anlegen des neuen Seitentyps

Den neuen Seitentyp habe ich "Source" genannt. Als erstes die Definition der "Holder"-Klasse in mysite\code\SourceHolder.php. Wichtig ist hier auf jeden Fall die konsistente Schreibweise der Klassennamen und die Beachtung von Groß-/Kleinschreibung.  Der Name der "Holder"-Klasse setzt sich aus dem Namen der Basisklasse und dem Präfix "Holder" zusammen. Hiermit wird eine von der Standardklasse Page abgeleitete Klasse SourceHolder und SourceHolder_Controller angelegt. In SourceHolder wird durch "$allow_children" noch eingestellt welche Seitentype dieser Holder aufnimmt.

<?php
/**
 * Defines the SourceHolder page type
 */
class SourceHolder extends Page {
    static $db = array(
    );
    static $has_one = array(
    );
    
    static $allowed_children = array('Source');
}
 
class SourceHolder_Controller extends Page_Controller {
     
}
?>

 

Als weiteres benötigt man dann noch die Definition der eigentlichen Klasse "Source" in mysite\code\Source.php. Der Aufbau ist bis auf den "Child"-Eintrag ähnlich und legt nur die Vererbung fest.

<?php
/**
 * Defines the Source page type
 */
class Source extends Page {
    static $db = array(
    );
    static $has_one = array(
    );
}
 
class Source_Controller extends Page_Controller {
     
}
?>

 

Sobald diese Dateien in mysite\code\ erzeugt wurden, kann mit http://yoursitename/dev/build der neue Seitentyp im System eingerichtet werden. Ab sofort kann den Seiten unter "Verhalten" der neue Seitentyp zugewiesen werden. In diesem Fall ändert sich jedoch erst einmal nichts, da es noch kein angepasstes Layout für den Seitentyp "Source" gibt, wird das Layout der Basisklasse "Page" genutzt.

Anpassung des Layouts für den neuen Seitentyp Source

Damit der Seitentyp Source ein eigenes Layout nutzt, muss dieses unter themes\blackcandy-ah01\templates\Layout\Source.ss abgelegt werden. Ich habe dazu einfach das vorhandene Page.ss kopiert und die Zeilen, in denen die SideBar eingebunden wird gelöscht. Die BreadCrumbs habe ich nicht entfernt, um wenigstens ein zurücknavigieren zu ermöglichen.

<!-- StartOf templates\Layout\Source.ss -->
<div>

    <% if Level(2) %>
          <% include BreadCrumbs %>
    <% end_if %>
    
        <h2>$Title</h2>
    
        $Content
        $Form
        $PageComments
        <div id="LastEdit">
            $LastEdited.URLDate
        </div>
</div>
<!-- EndOf templates\Layout\Source.ss -->

 

Internen Cache von Silvestripe leeren

Falls die Seiten danach dennoch noch im "alten" Layout erscheinen, muss eventuell noch der interne Cache von Silverstripe neu initialisiert werden. Dies geschieht durch http://yoursitename/?flush=1. Jetzt sollte die Seiten (denen man natürlich auch den neuen Seitentyp zuweisen muss...) auch das neue Layout nutzen.

2013-05-25