Projects | Community | Members 
 Midgard - Tutorial - 26.08.2002

  Inhalt 
 
Midgard
und
Mandrake
 
das ultimative Installationsmanual

4. Übersicht über Midgard

Besonders das /asgard/ - Administrations - Interface verwirrte mich zutiefst, und ich brauchte einige Zeit um die Genialität von Midgard zu durchblicken. Aber zum Glück gibt es ja die (viel bessere) /admin/ - Seite und die ist gleich viel übersichtlicher...
Die Standard-Login-Daten nach einer Neuinstallation sind:

User: admin
Password: password

4.1 Ändern des Passwortes

Als allererstes sollten wir das Passwort des Administrators ändern, eine gute Möglichkeit die "Group Administration" auszuprobieren.
Dort gibt es unter "All persons" (auf den orangenen Pfeil klicken) einen Benutzer der " Administrator, Midgard" heisst. *click*

Dort auf "User account" gehen und ein neues Passwort eintragen. Fertig!

4.3 Datenbrowsing

Auf der Hauptseite gibt es fünf Hauptkathegorien:

Content Administration
Content contribution and modification
Unter dieser Rubrik kann man ein Verzeichniss der Artikel bearbeiten. Name dieser Pfade sind dabei "Topics", ihr Inhalt "Articles". Jeder Topic hat eine eindeutige ID auf der Midgard-Funktionen wie mgd_list_topic_articles_all(id) arbeiten können um die entsprechenden Articles abzuarbeiten. Wo und wann was von einem Artikel angezeigt wird entscheidet jedoch die Implementierung in einer Page oder einem Style.
 

Host Administration
Midgard host and directory management

Hier kommen wir über die Administration der unterschiedlichen Hosts zum Page Admin. Hier gibt es wieder eine Verzeichnisstruktur. Diesmal haben die Namen der "Verzeichnisse" direkt etwas mit der URL zu tun. Wenn also z.B. der Host "http://localhost:80/example/" heisst, und die konkrete Page darunter im Verzeichniss "about" heisst, dann wird diese Seite und Ihr Style angesprochen wenn jemand "http://localhost:80/example/about/" benutzt.
Was aber, wenn einzelne, unterschiedliche Seiten aufgerufen werden?
Die erfragte Seite wird als erstes Argument an die Page weitergeleitet, will jemand beispielsweise "http://localhost:80/example/about/hallo.html" dann wird die Page "about" im Host "example" aufgerufen mit folgenden Parametern:

$argc <= 1
$argv[0] <= "hallo"


daraus kann die Page dann entsprechenden Inhalt "zusammenzimmern".
 

Layout Administration
Layout and style management

Hier können Styles administriert werden. Ein Style ist ein Gebilde, das sich ggf. aus mehreren Unterstyles zusammensetzt und irgendwo den Inhalt in Form der obig besprochenen Page einsetzt. Ansonsten besteht so ein Style (wie auch schon die Page) nur aus HTML und PHP-Befehlen. In Wirklichkeit wird nämlich beim Aufruf einer Seite anhand der zugeordneten Page nur erst einmal der dieser zugeordneten Style herausgefunden, und von diesem der "ROOT" ausgeführt. Beim Abwickeln dieses Styles fügt dieser dann den Content - die Page - ein. Ein Style kann zudem Elemente definieren die die Page dann nutzen kann um so das Design vom Inhalt zu trennen. "Abgeleitete" Sub-Styles haben die nette Fähigkeit alle Styleelemente die sie nicht selber definieren von Ihrem Super-Style zu übernehmen.
 
Group Administration
Group and person management
Hier kann man die Benutzer administrieren. Während ich in Nadmin Möglichkeiten gefunden habe Benutzern spezielle Rechte zu vergeben ist mir das unter "normalem" Midgard bisher nicht aufgefallen. Benutzer können Gruppen zugeordnet werden.
 
Snippets Administration
Snippetdirs and Snippets management
Snippets haben Ihr eigenes Verzeichniss. Sie sind kleine ausgelagerte Codeteilchen, die Styles oder Pages über midgard-Funktionen hinzuladen können um so selbst ein bisserl Platz zu sparen und das Ganze übersichtlicher zu gestalten.
 

4.2 Generelle Konstruktion einer Seite

Die einzelnen Style oder Page-Elemente können neben auf der HTML-Ebene ein paar besondere Konstrukte enthalten:


<[name]> Der Style oder das Pageelement mit dem namen "name" wird an dieser Stelle eingefügt.
&(variablename); Der Inhalt der PHP-Variable "variablenname" wird hier eingefügt. Also etwa gleich der Anweisung <? echo $variablenname ?> (man bemerke das fehlende $).
&(object.field); Das gleiche mit $object->field .
&(variable:modifier); Ähnliches. Jedoch wirkt ein Modifier auf die Art der Ausgabe.
Die genaue Art der Modifier steht im Manual.

Wenn nun ein Browser eine Anfrage macht dann vergleicht mod_midgard den Request mit der host-Table in der Midgard-Datenbank. Wenn es einen Treffer gab, dann läuft Midgard die URL entlang und sammelt dabei Page-Elemente und speichert sie in einem Apache name-value Array. Neue, gleichnamige Elemente einer tieferen Hierarchie überschreiben dabei die alten Elemente. Dies passiert solange bis die richtige Page gefunden wurde. Von dieser Seite wird dann der Style genommen und dort umgekehrt Elemente bis zum ROOT gesammelt, wobei Elemente die schon vorhanden sind (auch gleichnamige Page-Elemente) bestehen bleiben - und die neueren verworfen werden. Diese Daten übernimmt dann die Midgard-PHP-Extension und die midgard-root.php. Die Midgard-PHP-Extension fügt die Seiten über das
<[name]> Konstrukt und andere oben genannte Konstrukte zusammen, und übergibt dem PHP-Interpreter die resultierende Seite zur Ausführung.
Leider weiss ich nicht ob Midgard cached, oder diesen Prozess für jede Seite neu macht.

4.4 Ein neuer Host zum spielen

Um ein bischen mit den Möglichkeiten zu spielen können wir in der Host-Administration einen neuen Host erzeugen. Ich nenne ihn mal "beispiel".

Unter dem Layout-Admin gibt es nun einen neuen Style, den "Default Style for <dein_Host>/beispiel"
Dort ändere ich den ROOT-Style infolgendes:

<html>
<head>
<title><[title]></title>
</head>
<body>
<table width="100%">
<tr height="200"><td height="200">
<[menu]>
</td></tr><tr><td>
<(content)>
</td></tr>
</table>
</body>
</html>

(content) und [title] sind vordefinierte Namen, während wir [menu] selbst definieren müssen.
Also füge ich ein neues Styleelement namens "menu" ein:

<b>This | should | be | a | Menue</b>

Die Seite benötigt noch eine Page, also über den Host-Admin in den Page-Admin die ROOT-Page des Hosts /beispiel verändern:

Dies ist der Inhalt der Page

Das Ergebniss sieht dann ungefähr so aus:

4.4 Ein paar Midgard-Funktionen


Im einzelnen stehen die Midgard-Funktionen im Midgard-Manual, aber um den Einstieg zu vereinfachen hier ein paar Beispiele:

Eine Liste mit den drei obersten Topics, deren zusammenfassender "Obertopic" die Nummer
$topic_topic_id hat zusammenfassend mit Abstract darstellen, und unter <der_aktuelle_host>/articles/<id>.html zum Link anbieten:

<? /// Holt alle Artikel
$article = mgd_list_topic_articles_all($topic_topic_id);?>
<!-- Get only 3 newest -->
<? /// fetch selektiert den nächsten Artikel in der Liste
if ($article) for ($i = 0; $i < 3 && $article->fetch(); $i++) { ?>
<p><b><a href="&(mgdroot);/articles/&(article.id);.html">&(article.title);</a></b>
<? if ($article->abstract) { ?><br>&(article.abstract);<br><? } ?>
</p><? } ?>

Nun in der Page "articles" auf die id reagieren und den content des entsprechenden Articles darstellen:

<?
if ($argc == 1) $id = $argv[0];
if ($id && !mgd_is_article_in_topic_tree(9, $id)) $id = 0;
if ($id) $article = mgd_get_article($id);
if ($article) {
?>
<h1>&(article.title);</h1>
<? if ($article->abstract) { ?>
<p>&(article.abstract);</p>
<? }
<!-- Ausgabe des Artikelinhalts in HTML-form :h -->
&(article.content:h);
<? } else { ?><h1>Artikel nicht gefunden</h1><? } ?>

So, und nun viel Spass mit Midgard!

| © 2002 by 3rd-evolution