FANDOM


Mocovi
Entwickler Kai Dorschner
Aktuelle Version 0.9.7
(3. August 2011)
Betriebssystem plattformunabhängig
Programmier­sprache PHP
Kategorie Framework
Lizenz GPL Version 3 (Freie Software)
mocovi.de

Mocovi ist ein von Kai Dorschner in PHP geschriebenes quelloffenes Web-Framework.

Aufbau Bearbeiten

Mocovi basiert auf dem MVC Entwurfsmuster und benötigt keine Datenbanken um Inhalte darzustellen. Das Model wird über XML Strukturen definiert. Die Controller Elemente sind in PHP5 Klassen geschrieben. Das View wird über eine XSL Transformation realisiert. Übersetzungen werden in entsprechende XML Dateien geschrieben und können alle Sprachen die durch UTF-8 abzubilden sind speichern.

Das System ist multidomain-fähig. Das bedeutet mit einer Installation können gleich mehrere Websites verwaltet werden. Diese können dadurch Ressourcen, wie z.B. Bildmaterialien, JavaScripte aber auch Views und Controller untereinander teilen. Außerdem werden schlanke, suchmaschinen-freundliche URLs erzeugt (benötigt das mod_rewrite Modul von Apache).

Beispiele Bearbeiten

Das Modell Bearbeiten

Die gesamte Seitenstruktur wird über eine model.xml abgebildet. Die Gliederung von Seiten ist simpel. "file" Elemente werden ineinander geschachtelt wodurch die Hierarchie sowie gleichzeitig das Menü der Seite hergestellt werden:

<?xml version="1.0" encoding="utf-8"?>
<xmlfs
  xmlns:xref="x-schema:refSchema.xml"
  xmlns:xi="http://www.w3.org/2001/XInclude"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://mocovi.de/schema/xmlfs1.0"
  version="1.0"
  media="html"
  theme="mint"
  language="en"
  timezone="Europe/Berlin"
  >
  <file name="redirection" invisible="1" redirect="/home/foo" />
  <file name="home">
    <model>
      <root>
        <headline>Hallo Welt!</headline>
      </root>
    </model>
    <file name="foo">
      <model>
        ...
      </model>
    </file>
    <file name="bar">
      <model>
        ...
      </model>
    </file>
  </file>
</xmlfs>


Zudem werden an jedem Punkt XIncludes und XRef-Referenzen unterstützt, was es dem Benutzer ermöglicht Daten einer Stelle vollständig an eine anderen zu kopieren.

Jede Seite hat ihr eigenes Modell welches den Inhalt darstellt. Hier ein Auszug:

...
  <model>
    <root>
      <menu/>
      <content>
        <headline>Hallo Welt!</headline>
        <paragraph>Dies ist eine Beispielseite</paragraph>
      </content>
    </root>
  </model>
...

Die Controller Bearbeiten

Die Controller sind vollständig in PHP5 Klassen geschrieben und laden lediglich Grundfunktionalitäten für den Umgang mit dem DOM-Objekt um das System möglichst schlank zu halten. Hier ein Beispiel für den "date" Controller, welche die Datumsanzeige steuert:

<?php
class date_control extends inline_control
{
  protected $dateTime;
  protected $defaultOptions = array
    ( 'format'    => 'Y-m-d\TG:i:s'
    , 'textToken' => ''
    );
 
  /**
   * @override
   */
  protected function getText()
  {
    if(($textnode = parent::getText()) instanceof DomElement)
      $text = $this->formatTime(strtotime($textnode->nodeValue));
    else
      $text = $this->formatTime(time());
    return $text;
  }
 
  public function formatTime($unixtime)
  {
    return date($this->getOption('format'), $unixtime);
  }
}


Wie im Beispiel zu sehen, erbt der date Controller von inline, welches lediglich Fließtexte darstellt. Somit wird "date" ebenfalls als Fließtexten dargestellt. Andere Controller wie "paragraph" beispielsweise erzeugen einen neuen Knoten im DOM.

Das View Bearbeiten

Knoten können mittels XSLT selektiert und in eine beliebige Ausgabe transformiert werden. Hier ein Beispiel für eine HTML5 Ausgabe des "root" Knotens:

...
<xsl:template match="root">
  <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;&#xA;</xsl:text>
  <!-- &#xA; == Line Break -->
  <html xml:lang="{@language}" lang="{@language}">
    <xsl:call-template name="head" select="."/>
    <xsl:call-template name="body" select="."/>
  </html>
</xsl:template>
...

Weblinks Bearbeiten

Info Sign  Dieser Wikipedia-Artikel wurde gemäß GFDL bzw. CC-by-sa mit allen Versionen importiert.