bs|area51

a content management system.

Die Konfigurationsdatei

Das gute Stück liegt in _config/bsa51.config.php und beherbergt die folgenden Einstellungen.

Allgemeine Einstellungen

$this->sitename = 'bs|area51.';
Der Name der Webpräsenz. Wird im Administrationsinterface verwendet.
$this->dataDir = 'data';
Das Verzeichnis relativ zur Wurzel, in der Daten abgelegt werden sollen, die über das Administrationsinterface hochgeladen werden. Standardmäßig data.
$this->niceUrls = false;
Gibt an, ob bs|area51 davon ausgehen soll, das mod_rewrite aktiviert ist, also interne Links ohne Zuhilfenahme von Variablen innerhalb der URL (wie z.B. ?pagename=sowieso) generiert werden können. Diese Standard-Einstellung (false) wurde zeit Jahren nicht mehr verwendet und man kann davon ausgehen, dass diese nicht mehr funktioniert. Aus diesem Grund wird niceUrls abgeschafft werden, allerdings ist es ratsam, bis zu diesem Zeitpunkt niceUrls immernoch manuell auf true zu setzen.
$this->db_user = 'user';
$this->db_host = 'host';
$this->db_password = 'password';
$this->db_database = 'database';
Dies sind die Zugangsdaten für die zu verwendende MySQL-Datenbank.
$this->db_prefix = 'bsa51_';
Allen verwendendeten Tabellen wird db_prefix vorangestellt, um mehrere parallele bs|area51-Installationen zu ermöglichen.
$this->mail-logging = false;
TODO
$this->userconfigfromdb = true;
$this->userconf_userstable = false;
$this->userconf_id = 'userid';
$this->userconf_name = 'username';
$this->userconf_password = 'password';
$this->userconf_email = 'email';
$this->userconf_fullname = 'fullname';
TODO

Module

Die zu verwendenden Module werden in einem Array namens $this->modules angegeben, welches wiederum aus Arrays besteht, deren Elemente null bis zwei, den Modulnamen, die Beschreibung für das Administrationsinterface und den Namen des zu ladenden Plugins angeben. Das vierte, optionale, Element ist ein assoziatives Array mit Parametern für das Plugin.


$this->modules = array(
  array("Modulname", "Beschreibung", "Plugin-Name",
        array('parameter1' => 'wert1',
              'param2'     => 'wert2')),
  array("rechte", "Die Rechteverwaltung", "rights")
);

Dabei gilt zu beachten, dass der Modulname nur aus (7bit-reinen) alphanumerischen Zeichen bestehen darf, da aus ihm ggf. Tabellennamen generiert werden.

Snippets

(TODO) Die Snippetdefinitionen sind ähnlich aufgebaut, wie die Moduldefinitionen.

Das database-Plugin

Parameter

schema
Das Tabellenschema wird als assoziatives Array angegben, dessen Schlüssel der Spaltenname, und der Wert wiederum ein assoziatives Array mit den folgenden Schlüsseln, ist:
desc
Beschreibung der Spalte (im Administrationsinterface)
type
Spaltentyp: textedit für einfache Eingabezeilen, multiline für mehrzeilige Eingabefelder, pic für ein Bild, file für eine Datei, die zum Download angeboten werden soll, combobox für eine Auswahlbox und germandate oder isodate für eine Datumsangabe, wobei beides der gleiche Spaltentyp ist und nur in der Ausgabeform unterschieden wird.
params
Hier können wiederum zum Spaltentyp passende Parameter vergeben werden. bei combobox ist das ein assoziatives Array namens values der Form 'values' => {"<value<" => "<desc>", ...} und bei einem Bild gibt es die Parameter thumbsize und bigsize mit den (optional) eine Angabe zur gewünschten Größe des Bildes nach folgendem Schema gemacht werden kann:
  • 100x200: Bild/Vorschau wird auf exakt 100 mal 200 Pixel gebracht, dabei wird nicht verzerrt, sondern beschnitten um das gewünschte Seitenverhältnis zu erhalten.
  • 100x: Vergrößerung oder Verkleinerung auf die gewünschte Breite
  • x200: Vergrößerung/Verkleinerung auf die gewünschte Höhe
  • 100: Das Bild soll in ein Quadrat der Größe 100x100 passen müssen
  • Ist keine thumbsize angegeben, wird kein Vorschaubild erstellt.
  • Ist keine bigsize angegeben, wird das Bild in der Originalgröße auf dem Server gespeichert.
titlecol
Welche Spalte soll als Titel für die ausklappbaren Bereiche im Administrationsinterface herhalten? Hier kann auch eine Zeichenkette der Form „[titel], [datum]“ o.ä. mit mehreren Spaltennamen in eckigen Klammern verwendet werden.
sortedby
Nach welcher Spalte soll im Administrationsinterface sortiert werden? „datum DESC“ o.ä. ist möglich.

Das listrecords-Snippet

Parameter

database
Name des Moduls, aus dessen Tabelle die Daten gelesen werden sollen.
layout
HTML-Code, der zum Darstellen der einzelnen Zeilen verwendet werden soll, oder aber „include:dateiname.irgendwas“ oder „smarty:dateiname.tpl“ um das Template aus einer Datei zu laden, bzw. gleich Smarty (als wesentlich mächtigere Template-Engine, als die eingebaute) zu verwenden. Genaueres siehe unten.
detail
Soll dieses Snippet nicht nur zur Auflistung sondern auch zur detaillierten Darstellung einer einzelnen Zeile der Datenbank verwendet werden, so muss detail gesetzt werden – zu zwar auf die gleiche Weise, wie layout
separator
Der hier angegebene HTML-Code wird (falls angegeben) zur Trennung der einzelnen Zeilen verwendet. Hier ist kein „include:“ oder „smarty:“ vorgesehen.
before
TODO
after
TODO
comboswitch
TODO
where
TODO
orderby
TODO

Das Layout

TODO

multiline
[pre:name]. [teaser:name], [full:name]
pic
[thumb:name]
combobox
...

Ein einfaches Beispiel der Anwendung von database und listrecords

Gehen wir mal davon aus, wir wollen auf einer Seite unserer Webpräsenz die Anzeige von aktuellen Nachrichten einbinden. Bis jetzt haben wir nur statische Text- oder Bild-Snippets verwendet, also fügen wir als erstes die Datenbank-Definition zu unseren Modulen hinzu. Wir wollen dabei lediglich das Datum, den Titel und den Text einer Nachricht angeben:


$this->modules = array(
  ...
  array("nachrichten", "Nachrichten verwalten", "database",
    array(
      'schema' => array(
        'datum' => array('desc' => 'Datum', 'type' => 'germandate'),
        'titel' => array('desc' => 'Titel', 'type' => 'textedit'),
        'text'  => array('desc' => 'Inhalt', 'type' => 'multiline')
      ),
      'sortedby' => 'datum DESC',
      'titlecol' => '[datum]: [titel]'
    )
  ),
  ...
);

Lediglich nach dieser Definition sollten wir uns im Administrationsinterface einloggen, und den Punkt „Nachrichten verwalten“ wählen können, wo wir nach Belieben neue Nachrichten anlegen, oder vorhandene Bearbeiten oder Löschen können sollten.

Um diese Nachrichten allerdings auch auf einer Seite für den User sichtbar machen zu können, müssen wir noch ein Snippet vom Typ listrecords anlegen, welches sich aus der eben erstellen Datenbank bedient.

Dazu fügen wir folgende Zeilen in unsere Snippet-Definition ein:


$this->snippets = array(
  ...
  "nachrichtenzeigen" => array("Nachrichten anzeigen", "listrecords",
    array('database' => 'nachrichten',
          'layout'   => "<h1>[titel]</h1>\n".
                        "<p>[pre:text]</p>\n".
                        "<p>(vom [datum])</p>",
          'orderby'  => 'datum DESC LIMIT 10'
    )
  ),
  ...
);

Nun können wir eine Neue Seite anlegen, auf der wir das Snippet „Nachrichten anzeigen“ einfügen – und wenn wir diese Seite im Browser betrachten, werden die zehn aktuellsten Nachrichten angezeigt.