Startseite

18.04.06

Movable Type: FeedBurner ideal einbinden

Vor über einem Jahr hatte ich hier mal den Wunsch niedergeschrieben, dass ich gerne wüsste, wieviele Leser meine RSS-Feeds abonniert haben. Bekanntermaßen gibt es inzwischen einige neue Dinge im Web wie beispielsweise FeedBurner. Wer dort seine Feeds verwaltet, bekommt auch eine Auswertung der Leseranzahl. Wie die das machen - keine Ahnung.

Allerdings wollte ich meinen Feed nicht in fremde Hände geben. Denn wer weiß, auf was für Ideen die Leute hinter FeedBurner (oder irgendeinem anderen Dienst) noch kommen. Also lieber nicht verwenden. Aber so Statistik wäre trotzdem schön.

Bei einfach persönlich habe ich nun eine Anleitung zur Integration von FeedBurner in Movable Type gefunden, die mit dieser Abhängigkeit Schluß macht. Man leitet einfach die Feed-URLs per HTTP-Redirect im Apache auf die FeedBurner-URL weiter. Wenn einem FeedBurnern nicht mehr passt sucht man sich eben einen neuen Dienst und leitet dann auf diesen weiter. Ebenso einfach wie genial.

Und noch ein Vorteil für euch als Leser meines Weblogs: Für euch ändert sich gar nichts. Ihr müsst keine Änderung in eurem Feedreader vornehmen und bekommt dennoch in Zukunft den FeedBurner-Feed.

Tags: movable-type feed rss feedburner

12.01.06

Movable Type 3.2: Deutschen Kalender einbinden

Seit Movable Type 3.2 wird in dem Standard-Template kein Kalender mehr mit ausgeliefert. Ein einfaches Copy'n'Paste des Kalenders von Movable Type 3.1.x scheiterte bei mir. Daher habe ich mich nach Anleitungen für die Einbindung des Kalenders unter Movable Type 3.2 umgeschaut. Dabei bin ich auf diese Anleitung gestoßen: Calendars with Movable Type 3.2.

Diese Anleitung hat jedoch zwei kleine Haken: Zum einen ist der Kalender Englisch - was sich leicht auf Deutsch anpassen lässt. Zum anderen verlinkt der Kalender immer nur auf den ersten Eintrag des Tages und nicht auf das Tagesarchiv. Ich verwende ein Tagesarchiv, welches jeweils unter dem Dateinamen "yyyy/mm/dd/index.html" gespeichert wird. Daher habe ich auch den Link im Kalenderarchiv angepasst. Und so sieht der neue Code dann aus:

<div class="module-calendar module">
<h2 class="module-header"><$MTDate language="de" format="%B %Y"$></h2>
<div class="module-content">
<table summary="Monatskalender mit Links zu den Tagesarchiven">
<tr>
<th abbr="Sonntag">So</th>
<th abbr="Montag">Mo</th>
<th abbr="Dienstag">Di</th>
<th abbr="Mittwoch">Mi</th>
<th abbr="Donnerstag">Do</th>
<th abbr="Freitag">Fr</th>
<th abbr="Samstag">Sa</th>
</tr>
<MTCalendar>
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td>
<MTCalendarIfEntries>
<MTEntries lastn="1">
<a href="<MTBlogArchiveURL><$MTEntryDate format="%Y/%m/%d/index.html"$>" title="<MTEntries> | <$MTEntryTitle encode_html="1"$> | </MTEntries>"><$MTCalendarDay$></a>
</MTEntries>
</MTCalendarIfEntries>
<MTCalendarIfNoEntries>
<$MTCalendarDay$>
</MTCalendarIfNoEntries>
<MTCalendarIfBlank> </MTCalendarIfBlank></td>
<MTCalendarWeekFooter></tr></MTCalendarWeekFooter>
</MTCalendar>

Ich habe den Code bei mir vor der Suchbox eingefügt, so dass der Kalender direkt oberhalb erscheint.

Tags: movable-type kalender deutsch

11.01.06

Movable Type 3.2: Artikelüberschriften mit Permalinks hinterlegen

In vielen Weblogsystemen sind die Artikelüberschriften auf den Übersichtsseiten jeweils mit der Permalink-URL des entsprechenden Artikels verlinkt. Was in anderen Weblog-Systemen in vielen Templates Standard ist, muss man bei Movable Type 3.2 mit einem kleinen manuellen Eingriff selbst vorgenommen werden. Wie das geht stelle ich euch nun kurz vor. Hierbei handelt es sich um eine Kurzfassung der englischsprachigen Anleitung Entry Titles Linked to Permalinks, in der auch eine passende Vorgehensweise für Movable Type 3.1 beschrieben ist.

In den Templates das CSS-Template editieren und dort den folgenden Eintrag suchen (im Original-Template befindet sich dieser etwa nach 3/4 des CSS-Codes):
.entry-header
{
margin-top: 0;
border-left: 5px solid #dae0e6;
padding: 0 0 0 10px;
color: #666;
font-size: 18px;
}

Danach einfach folgenden Code einfügen, der die Formatierung der Überschrift als Link passend beeinflusst:
.entry-header a, .entry-header a:link, .entry-header a:visited { text-decoration: none; color: #666; }
.entry-header a:hover
{
color: #709800;
}

Nun in allen betroffenen Übersichtstemplates (bei mir ist das aus "Indexes" das "Main Index" und aus "Archives" die Templates "Date-Based Archive (Day)", "Date-Based Archive (Month)" und "Category Archive") die folgende Zeile suchen
<h3 class="entry-header"><$MTEntryTitle$></h3>
und dort jeweils einen passenden Link einbauen:
<h3 class="entry-header"><a href="<$MTEntryPermalink archive_type="Individual"$>"><$MTEntryTitle$></a></h3>

Danach noch einen Rebuild auf alle Seiten laufen lassen und fertig. So einfach ist das.

Tags: movable-type permalink titel

12.12.05

Kommentar-Spamschutz per Referer

Gerade rollt mal wieder eine kleine Kommentar-SPAM-Welle über meine Weblogs. Ein guter Zeitpunkt einen SPAM-Schutz für Kommentare zu implementieren und zu testen: Ich schalte einfach eine Rewrite-Regel im Apache (geht auch per .htaccess), die alle Zugriffe auf mein Kommentar-CGI verhindert, wenn der Referer nicht eine meiner Domains ist.

Das ist natürlich kein sicherer Schutz, weil der Referer beliebig fälschbar ist. Aber wir wissen ja um die Intelligenz der meisten Spammer. Sollte ein Besucher seinen Übertragung des Referers abgeschaltet haben, bekommt er eine entsprechende Fehlermeldung. (Der Kommentar-Spammer bekommt die natürlich auch.)

Dieser Schutz lässt sich nicht nur mit Movable Type sondern auch mit allen Weblogsystemen umsetzen, die ein eigenes CGI-Skript bzw. eine eigene PHP-Datei für das Übermitteln der Kommentare verwenden.

Und so geht es: Voraussetzung ist ein Apache-Webserver mit aktiviertem Rewrite-Modul. Einfach eine .htaccess-Datei mit folgendem Inhalt anlegen und wohlfühlen. Ein entsprechender Eintrag in der Apache-Konfigurationsdatei geht natürlich auch.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !erste-domain\.de [NC]
RewriteCond %{HTTP_REFERER} !zweite-domain\.de [NC]
RewriteRule /cgi/mt-comments.cgi /referer-error.html

Dabei sind folgende Werte beim Anpassen für euch zu ersetzen:
"erste-domain\.de" und "zweite-domain\.de" stehen für Domains, die einen korrekten Referer darstellen. Dort sind alle Domains einzutragen, von denen aus auf das Kommentar-Skript verwiesen wird. Die Punkte in dem Domainnamen sind durch einen Backslash zu entwerten. Pro Domain ist eine eigene Zeile einzutragen, also auch nur eine Zeile bei einer Domain oder beliebig viele Zeilen bei mehr Domains.
"/cgi/mt-comments.cgi" ist der Dateiname des Kommentar-CGIs bzw. der PHP-Datei
"/referrer-error.html" ist die Datei mit der Fehlermeldung, die angezeigt wird, wenn der Referer nicht zulässig ist

PS: Während ich diesen kleinen Beitrag geschrieben habe, hat mir diese einfache Regel bereits 39 SPAM-Kommentare vom Leib gehalten.

Tags: movable-type spamschutz kommentar

17.11.05

Tagging mit Movable Type

Schon vor einiger Zeit habe ich Tagging über Technorati hier im Weblog eingeführt und das Plugin hierfür auch beim Einsatz von mtview.php nutzbar gemacht. Nun wollte ich das Tagging umstellen. Ziel der Umstellung sollte sein, dass die Tag auf interne Seiten verlinkt werden, die alle Artikel zu diesem Thema anzeigen.

Dieser Beitrag beschreibt, welche Anforderungen ich an das Tagging richte, welche Lösungen für mich in Betracht kamen und welche ich nun wie implementiert habe. Wie das in der Praxis aussieht könnt ihr übrigens im Brettspiel-Blog betrachten.

Anforderungen an das Tagging

Folgende Anforderungen habe ich an mein Tagging gestellt:

  1. Die Tags sollen auf interne Seiten verweisen. Damit scheiden die Plugins Technoratitags und MT-Tagslite leider aus.
  2. Alle Tags sollen über eine einheitliche URL erreicht werden können. Dies ist idealerweise $bloghome/tags/$tag. (Hier muss ich beim genannten Brettspiel-Blog nochmals ran.)
  3. Das Plugin sollte mit möglichst vielen Installationsarten von Movable Type zurechtkommen.

Verfügbare Plugins / Lösungsansätze

Bei der Suche nach Möglichkeiten hierzu bin ich im wesentlichen auf drei mögliche Lösungen gestoßen:

  1. Die erste Lösung stammt von einfach persönlich und wird in dem Tutorial Kreatives Tagging im Movable Type Weblog vorgestellt. Die Lösung erfüllt meine ersten beiden Punkte vollständig, den dritten nur eingeschränkt, da ich entsprechende Rewrite-Rules für Apache definieren können muss, was nicht immer der Fall ist. Der Hauptgrund, warum ich mich gegen diese Lösung entschieden habe, war die Nutzung der Suchfunktion zum Anzeigen der Artikel zu einem Tag. Das ist nicht nur dynamisch und erzeugt damit Serverlast sondern es findet auch immer Artikel, die das Tag zwar im Text aber nicht als Tag enthalten. Dies ist vor allem bei negativen Vergleichen ("Dieses Spiel ist kein Geschicklichkeitsspiel.") lästig. Daher schied diese Lösung für mich aus.
  2. Die zweite Lösung, gefunden bei pixelgrafix, basiert auf dem Tagwire Plugin für Movable Type. Leider habe ich weder in der Originaldokumentation noch in dem Artikel einen Hinweis darauf gefunden, wie ich die Tags innerhalb meines Weblogs verlinken kann. Da damit zumindest augenscheinlich meine ersten beiden Punkte nicht oder nur bedingt erfüllt sind, habe ich auch diese Lösung verworfen.
  3. Als dritte Lösung habe ich mir das Tag-Plugin von Six Apart angeschaut. Auch dieses hat eine Schwäche: Kategorien und Tags werden vermischt, was vom Benutzer wieder zu trennen ist. Diese Schwäche ist aber zugleich auch eine Stärke des Plugins: Alles, was Movable Type für Kategorien unterstützt wird auch von diesem Plugin unterstützt. Das bedeutet vor allem, dass auch statische Archiv-Seiten für jeden Tag erzeugt werden. Und das war mir wichtig. Das Problem ist also, hier die Vermischung von Tags und Kategorien zu durchbrechen.

Realisierung

Das Hauptproblem ist das Ausblenden der Tags in der Kategorieliste unter jedem Eintrag und der Kategorieübersicht für das gesamte Weblog. Dazu bietet sich das Plugin FilterCategories an. Allerdings unterstützt dieses die Erkennung von Tag-Kategorien leider nicht von Haus aus. Also habe ich es um die Parameter exculde_parents, exclude_tags und only_tags erweitert. exclude_tags blendet alle Tag-Kategorien aus der reinen Kategorieliste aus, only_tags blendet alle echten Kategorien aus und lässt nur Tags stehen um z.B. eine Tag-Cloud zu erzeugen.
Die gepatchte Version gibt es hier zum Download (5kB).

Mit diesem Plugin ist die Bereinigung der Kategorieliste um die Tags ein Kinderspiel:
<MTTopLevelCategories>
<MTFilterCategories exclude_tags="1">
<MTSubCatIsFirst><ul class="module-list"></MTSubCatIsFirst>
[...]
</MTFilterCategories>
</MTTopLevelCategories>

Unter einem Eintrag können die Tags mit folgendem Code eingebunden werden:
Tags: <MTEntryTags> <a href="<$MTTagArchiveLink$>"><$MTTagName$></a> </MTEntryTags>

Offene Nachteile dieser Lösung

Auf Leserseite ist nun nichts mehr von der Vermischung von Kategorien und Tags zu sehen. Im Autorenbereich von Movable Type tauchen allerdings immer noch die Kategorien in der Tag-Liste und umgekehrt die Tags in der Kategorieliste auf. Ich werde versuchen auch das noch durch kleine Hacks zu beheben.

Tags: tagging movable-type

13.10.05

Alles rund um Movable Type 3.2

Auf einfach persönlich findet sich zum Start der deutschen Version von Movable Type 3.2 eine Zusammenstellung von verschiedenen Artikeln über Movable Type 3.2: Erste Hilfe bei Start mit Movable Type 3.2 Deutsch

Tags:

Anleitung: Movable Type 3.2 statische Seiten mit aktuellen Inhalten durch SSI

So sehr ich Movable Type auch schätze, es hat eine gewisse Schwäche in der Standardinstallation: Die statischen Artikelseiten, die erzeugt werden sind ziemlich leer. Es steht nicht viel mehr als der Artikel und ein Link auf die Startseite sowie die benachbarten Artikel drauf. Das komplette Menü mit den aktuellen Einträgen, Rubriken, etc. fehlt. Das muss so auch sein, denn schließlich kann nicht wegen jedem Eintrag einige hundert oder gar tausend statischen Seiten umgebaut werden.

Eine von Movable Type mitgelieferte Lösung ist der Einsatz des PHP-Skripts mtview.php. Dies halte ich aus zwei Gründen aber für keine gute Lösung. Zum einen werden die Seiten nun dynamisch erzeugt was eine zusätzliche Serverlast bedeutet. Und zum anderen unterstützen viele Movable-Type-Plugins PHP noch nicht, so dass diese Lösung diese Plugins ausschließt.

Es gibt aber eine ziemlich einfache Lösung: Die Server Side Includes (SSI) die der Apache Webserver anbietet. Diese Anleitung beschreibt, wie man mittels SSI die statischen Artikelseiten mit aktuellen Inhalten ergänzen kann.

Diese Anleitung bezieht sich auf Movable Type 3.2. Ich habe ein ähnliches Setup aber auch schon mit älteren Movable-Type-Versionen erstellt. Da müsst ihr nur ein bisschen bei den Templates anders vorgehen, weil die sich eben geändert haben.

Wichtig! Wenn ihr diese Anleitung nicht an einer Neuinstallation durchführt, müsst ihr unbedingt ein Backup machen! Wenn ihr eine Neuinstallation gemacht habt, legt zwei oder drei Testeinträge an, weil sonst haut das mit dem Testen nicht hin. Alle Angaben hier sind ohne Gewähr. Sollte sich in der Anleitung oder der Umsetzung ein Fehler einschleichen könnt ihr eure komplette Blog-Darstellung zerstören. Also fertigt das Backup wirklich an!

Zum Zeitaufwand: Auch wenn diese Anleitung recht lang aussieht, braucht ihr nur etwa 60 Minuten um das alles durchzuführen. Wer einen eigenen Root-Server sein Eigen nennt, wird etwas schneller sein, wer mittels FTP Verzeichnisse anlegen und Rechte ändern muss, wird etwas länger brauchen.

Voraussetzungen
Movable Type (ideal in Version 3.2, andere müssen leicht anders bearbeitet werden)
Apache Webserver mit SSI und XBitHack
Zugriff auf die Apache-Konfiguration für eure Domain

SSI aktivieren

Was ist SSI überhaupt? Mittels SSI kann man vereinfacht gesagt den Apache Webserver anweisen bestimmte Inhalte in die HTML-Dateien zu integrieren. In unserem Fall nutzen wir das um die aktuellen Einträge, Kategorien, etc. aus zwei anderen Dateien, die wie die Index-Datei bei jedem neuen Eintrag generiert werden. Mehr Informationen über SSI findet bei Bananajoe.

Um SSI zu aktivieren müsst ihr in der Apache-Konfigurationsdatei die Option "+Includes" für das entsprechende Verzeichnis aktivieren. Zusätzlich empfehle ich den so genannten XBitHack zu aktivieren. Sonst müsst ihr den Dateien spezielle Endungen (z.B. .shtml) geben, damit diese per SSI verarbeitet werden können. Das Erschwert einen späteren Wechsel zurück zu statischen Seiten. (Aus welchen Gründen auch immer man das vielleicht mal will). Dazu müsst ihr in der Apache-Konfiguration noch die Zeile "XBitHack On" eintragen. Damit reicht es die Dateien als "executable" zu markieren (das X-Bit zu setzen, daher der Name), damit diese per SSI behandelt werden.

Bei mir sieht das so aus:

In der Datei default-server.conf steht außerhalb jedes Containers ganz am Anfang:
XBitHack On

In meiner Virtual-Host-Datei für theofel.de steht:
<Directory "/.../.../theofel.de/htdocs">
Options -Indexes SymLinksIfOwnerMatch -ExecCGI +Includes
Allow from all
</Directory>

SSI mit Movable Type vorbereiten

Auch Movable Type müssen wir noch ein wenig konfigurieren, damit das mit dem SSI klappt. Zunächst müssen wir Movable Type anweisen, unsere zukünftigen HTML-Dateien als ausführbar zu markieren, damit der XBitHack von oben zieht. Dazu tragen wir in der Konfigurationsdatei folgende Parameter ein: (Die sind schon als Kommentare da. Einfach reinnehmen und die Zeilen anpassen.)

HTMLPerms 0755
UploadPerms 0644

Dadurch werden alle HTML-Dateien mit x-Bit geschrieben. Alle Uploaddateien bekommen dieses Flag aus Sicherheitsgründen nicht.

Alle bereits existierenden HTML-Dateien müsst ihr noch manuell anpassen und dort auch die Rechte 755 (rwxr-xr-x) setzen.

Module für SSI vorbereiten

Nun legen wir die Template-Module an, die wir später auch für die SSI-Datei benötigen. Dazu gehen wir in der Movable-Type-Administration auf den Menüpunkt "Templates" und dort dann auf "Modules". Die Liste ist noch leer, wir legen ein neues Modul an. Dieses bekommt den Namen "head" (im Feld "Template Name" eintragen). Nun öffnen wir in einem zweiten Browserfenster parallel nochmal die Movable-Type-Administration, gehen dort auf die Templates und öffnen das Template "Main Index". Dort schneiden wir alle Zeilen zwischen
<body class="layout-two-column-right">
und
<MTEntries>
aus (jeweils ohne diese Zeilen!).

Diese Zeilen fügen wir im anderen Browserfenster in unser neues Module "head" ein und speichern dieses ab.

In dem Index-Template tragen wir in die entstandene Lücke folgenden Code ein:
<$MTInclude module="head"$>
Dieser sorgt dafür, dass an dieser Stelle das Modul "head", welches wir soeben angelegt haben, eingebunden wird. Nun speichern wir auch dieses Template.

Auf dies selbe Art legen wir nun auch noch ein Module namens "foot" an. Hierzu kopieren wir genau nach der soeben beschrieben Vorgehensweise aus dem Index-Template alle Zeilen, die nach dieser hier folgen (wieder ohne diese Zeile!):
</MTEntries>
Nicht wundern: Das ist ziemlich viel HTML-Code, den ihr hier kopieren müsst. (Etwas 2/3.)

Diese Zeilen in das "foot"-Module einfügen und dieses Speichern. Im Index-Template nun die entfernten Zeilen durch folgenden Code ersetzen und auch Abspeichern:
<$MTInclude module="foot"$>

Zeit für einen ersten Test: Einmal auf "Rebuild Site" im Menü klicken und dann "Rebuild Indexes Only" auswählen. Wenn ihr danach die Startseite eures Blogs aufruft, sollte sich dort nichts geändert haben. Wenn doch stimmt was nicht.

Einbindbare SSI-Dateien erzeugen

Jetzt legen wir ein Verzeichnis an, in dem alle SSI-Dateien angelegt werden sollen. Ich benenne dies sinnigerweise "ssi" und lege es im Wurzelverzeichnis der Webseite ab. Das Verzeichnis muss für den Apache-Benutzer schreibbar sein.

Im nächsten Schritt legen wir die Dateien an, die wir später per SSI einbinden möchten. Dazu gehen wir wieder in die Templateverwaltung und legen ein neues Index-Template an. Dieses benennen wir "SSI head" und legen es unter "ssi/head.html" ab. In den Content-Body schreiben wir nur eine einzige Zeile rein, mit der wieder das bereits angelegte Modul geladen wird:
<$MTInclude module="head"$>
Die Option "Rebuild this template automatically when rebuilding index templates" muss zwingend aktiviert bleiben.

Dann speichern wir dieses neue Template ab und wiederholen auch diesen Vorgang für den "foot". Also ein weiteres neues Index-Template mit dem Namen "SSI foot", der Datei "ssi/foot.html" und dem folgenden Inhalt anlegen:
<$MTInclude module="foot"$>

Und schon sind wir bereit für den nächsten Test: Wieder über "Rebuild Site" ein "Rebuild Indexes Only" durchführen. Nun müssen im vorhin angelegten Verzeichnis ssi die Dateien head.html und foot.html geschrieben werden.

SSI-Dateien bzw. Module einbinden

So, nun können wir uns auch schon daran machen, dass wir die soeben erzeugten Dateien per SSI oder als Modul einzubinden. Die Unterscheidung wann wir was benötigen ist einfach: Das Modul können wir auf allen dynamisch erzeugten Seiten (wie z.B. die Kommentarvorschau) und auf allen Seiten, die mit jedem neuen Blogeintrag überarbeitet werden ("Rebuild this template automatically when rebuilding index templates") verwenden. In allen anderen Dateien kommt SSI zum Zug.

Als erstes nehmen wir uns das Template "Master Archive Index" vor. Öffnet dieses in der Templateverwaltung. Wie ihr seht können wir hier die Integration über das Modul verwenden. dazu entfernen wir im Template alle Zeilen zwischen
<body class="layout-two-column-right">
und
<div class="archive-date-based archive"> und ersetzen diese wieder durch
<$MTInclude module="head"$>

Am Ende des Templates wird alles nach den folgenden Zeilen entfernt (diese Zeilen bleiben drin!):
</MTArchiveList>
</ul>
</div>
</div>

Und wir fügen wieder ein:
<$MTInclude module="foot"$>

Das template jetzt mit "Save and Rebuild" abspeichern und danach die Index-Datei anschauen, ob alles stimmt. Alles ok? Gut, weiter:

Als nächstes nehmen wir uns das "Individual Entry Archive" vor. Dieses findet ihr bei den Templates unter "Archives". Einfach öffnen und wie folgt abändern:

Wir löschen hier die Zeilen zwischen
<body class="layout-one-column" onload="individualArchivesOnLoad(commenter_name)">
und
<p class="content-nav">
Dort setzen wir statt dessen ein:
<!--#include virtual="/ssi/head.html"-->

Zusätzlich ersetzen wir die Klasse im body-Tag durch layout-two-column-right. Die Zeile sieht also danach so aus:
<body class="layout-two-column-right" onload="individualArchivesOnLoad(commenter_name)">

Am Ende dieses Templates entfernt ihr alle Zeilen nach
</MTIfCommentsActive> (diese befindet sich ziemlich am Ende des Templates) und ersetzt dies mit
<!--#include virtual="/ssi/foot.html"-->

Nun speichert ihr das Template ab und erzeugt über "Rebuild Site" und "Rebuild Individual Archives Only" die einzelnen Artikelseiten. Und nun das ganze mal anschauen. Gar nicht so übel, oder?

SSI- und Modul-Einbindung auf andere Seiten übertragen

Im Prinzip sollte jetzt klar sein, wie das mit den Template funktioniert. Die einzige Ausnahme ist das Suchtemplate, dazu komme ich gleich noch. Erst mal zu den anderen Templates. Ich schreibe hier immer nur noch den Blog, wie er nach der Ersetzung oben und unten im Template aussieht. Damit seht ihr die Zeilen auch jeweils davor und danach. (Vergesst bei der davor nicht die Klasse jeweils mit anzupassen!)

Im Template "Category Archive" sieht es oben wie folgt aus:
<body class="layout-two-column-right">
<!--#include virtual="/ssi/head.html"-->
<p class="content-nav">

Und am Ende stehen diese Zeilen:
</MTEntries>
<!--#include virtual="/ssi/foot.html"-->

Das Template "Date-Based Archive" ist exakt gleich wie das gerade beschrieben "Category Archive" anzupassen.

Das Template "Comment Preview Template" aus "System" sieht oben wie folgt aus:
<body class="layout-two-column-right" onload="individualArchivesOnLoad(commenter_name)">
<$MTInclude module="head"$>
<h3>Previewing your Comment</h3>

Und unten sieht es dann so aus:
>/MTIfCommentsActive>
<$MTInclude module="foot"$>

Beim "Comment Pending Template" sieht es wie folgt aus:
<body class="layout-two-column-right">
<$MTInclude module="head"$>
<h3>Thank you for commenting.</h3>

Und unten:
<p><a href="<MTEntryLink>">Return to the original entry</a></p>
<:$MTInclude module="foot"$>

Die Suche anpassen

Das Template der Suche wird nicht in der Datenbank gespeichert sondern befindet sich in der Datei search_templates/default.tmpl im CGI-Verzeichnis eures Webservers (wo ihr auch Movable Type hininstalliert habt). Dort müsst ihr wie folgt oben ändern:
<body class="layout-two-column-right">
<$MTInclude module="head"$>
<h2><MT_TRANS phrase="Search"></h2>

Unten sieht es nach der Änderung wie folgt aus:
</MTNoSearch>
-->
<$MTInclude module="foot"$>

Finale

Das war auch schon alles. Nun könnt ihr vorrangig in der CSS-Datei (findet ihr auch in den Templates) und den beiden Modulen "head" und "foot" eure Layout anpassen. Viel Spaß!

Wenn ihr diese Anleitung beim Einrichten/Anpassen eures Weblogs verwendet habt, würde ich mich über einen Kommentar mit einer URL zu eurem Weblog freuen. Danke!

Tags:

18.09.05

Movable Type 3.2

Ich habe nun schon eine ganze Weile Movable Type 3.2 laufen und muss sagen, dass ich von den meisten Verbesserungen sehr begeistert bin. Unter anderem ist das Editieren von Einträgen, Kommentaren und Trackbacks über mehrere Blogs hinweg deutlich einfacher geworden. Allerdings finde ich die Integration von SpamLookup noch nicht wirklich gelungen: Bei dem alten Plugin konnte man über Blacklists Begriffe und reguläre Ausdrücke eingeben, die direkt zur Ablehnung des Beitrags geführt haben. Nun landet der ganze Mist zwar immer noch im Junk-Verzeichnis, aber dort muss ich ihn dann manuell löschen. Das war mit dem Plugin besser. Weiß jemand hierfür eine Lösung?

Bei einfach persönlich gibt es inzwischen auch eine erste Übersicht einiger Plugin für Movable Type 3.2. Davon werde ich mal auch einige ausprobieren.

Tags:

16.08.05

Feature requests für Movable Type 3.2

Six Apart sammelt zur Zeit Feature-Requests für die neue Movable-Type-Version 3.2. Ich habe schon angemeldet, dass ich gerne einen Template-Mechanismus hätte, bei dem ich sagen kann "Neuer Artikel basierend auf der Vorlage 'Rezept'". Wer auch Vorschläge und Wünsche äußern möchte kann dies hier in den Kommentaren tun. Ich bezweifel zwar, dass noch vieles davon in die neue Version einfliessen wird, aber dann eben in die übernächste.

Tags:

15.08.05

Anleitung: Bloggen für die Zukunft mit Movable Type

Bei Blogs, in denen ihr regelmäßig Inhalte für eure Leser veröffentlichen möchtet, ist es manchmal notwendig "auf Vorrat zu bloggen". Soll heissen ihr schreibt aktuelle Einträge, die aber erst in ein paar Stunden oder ein paar Tagen erscheinen, wenn ihr z.B. im Urlaub seit. So bekommen eure Leser trotz eurer Abwesenheit dennoch reglmäßig Nachschub. Der Gadet-Blogger nutzt das beispielsweise. Mit Movable Type ist das ganz leicht einzurichten, wenn ihr Cronjobs auf dem Webserver ausführen könnt.

Wenn ihr SSH-Zugriff auf euren Server habt könnt ihr dazu die Konfigurationsdateien vom crond selbst editieren. Das geht entweder zentral in der Datei /etc/crontab oder durch Eingabe von crontab -e. Dort tragt ihr dann einfach folgende Zeile ein:
*/15 * * * * root cd /srv/www/theofel.de/htdocs/mt-cgi && ./tools/run-periodic-tasks
(Bei crontab -e müsst ihr den Teil mit "root" in der Mitte weglassen.)

Dadurch wird jede Viertelstunde geprüft, ob es neue Einträge gibt und wenn ja werden diese veröffentlicht. Achtet dabei aber nach Möglichkeit darauf, die mit ungeraden Zeiten vorzubloggen damit es nicht zu sehr auffällt. ;-)

Wenn ihr keinen SSH-Zugang habt, müsst ihr den Crontab-Eintrag über ein spezielles Webinterface vornehmen. Das ist je nach Hosting-Anbieter unterschiedlich. Schaut am besten mal in der Dokumentation eures Hosting-Anbieters nach und fragt danach den Support (passendes RTFM-T-Shirt ;-).

Nun müsst ihr nur noch die Artikel auf Vorrat bloggen. Dazu wählt ihr einfach unten beim Erstellen des Artikels als "Post Status" den Wert "Future" und überschreibt bei "Authored On" das vorhande Datum samt Uhrzeit mit dem gewünschten Wert in der Zukunft. Mit dem ersten Lauf des Cronjobs nach dem eingetragenen Zeitpunkt wird euer Post im Blog erscheinen.

Dieser Artikel basiert auf der englischsprachigen Anleitung aus Learning Movable Type. Ich habe den gesamten Vorgang erfolgreich mit diesem Eintrag getestet.

Tags:

12.08.05

Movable Type: Ganzen Titel als Dateinamen verwenden

Das hat mich schon eine ganze Weile gestört und sollte nun ab diesem Eintrag besser werden: Movable Type kürzt beim Erzeugen der Archiv-Dateien den Dateinamen immer auf einige wenige Stellen.

Warum will ich das nicht? Ganz einfach:

  1. Es sieht dämlich aus. Lieber ewig lang als kurz und abgehackt.
  2. Der volle Titel als Dateiname ist für Suchmaschinen besser geeignet, weil diese dadurch ein höheres Ranking vergeben.

Also habe ich gesucht und gefunden: File Names and URLs aus dem Blog Learning Movable Type. Hier die kurze Zusammenfassung:

  1. Auf "Weblog Config" klicken.
  2. Weiter zu "Archive Files".
  3. Bei "Individual" eintragen:
    <$MTEntryTitle dirify="1"$>.html
  4. Und abspeichern nicht vergessen - das war's schon!

Hinweis: Das klappt natürlich nur, wenn ihr einzelne Dateien als Archivformat verwendet. Daszu schreibe ich die Tage noch was.

Countdown: n-6

Tags:

29.05.05

Spickzettel für MovableType-Tags

Movable Type verwendet für die eigene Template-Sprache spezielle Tags. Damit man diese sicher einfacher merken kann, hat Jörg Petermann in seinem Weblog einfach persönlich einen Spickzettel für Movable Type veröffentlicht. Dort finden sich alle Template-Tags von Movable Type auf einem Blatt. Sehr praktisch!

Tags:

05.05.05

Apache-Rewrite für dynamisches MT-Publishing

Hier nun noch der Rewrite-Code, den ich für Apache 2 einsetze um dynamische Seiten mit Movable Type zu realisieren. (Die Seiten für diesen Blog werden noch statisch erzeugt, daher sind sie in den Regeln nicht zu finden.)

In der Anleitung von six apart und Anleitung bei Learning Movable Type wird als Redirect-Condition (RewriteCond) jeweils angegeben:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

Das hat bei mir jedoch nicht geklappt, so dass alle Bilder und sonstige Dateien, die ebenfalls im Archiv-Verzeichnis abgelegt worden sind, auch der Rewrite-Regel zum Opfer gefallen sind und danach nicht mehr anzeigbar waren. Statt dessen hat sich bei mir folgender Code bewährt:

# general rewrite rules
RewriteEngine on
RewriteLog "/home/srv/www/theofel.de/logs/rewrite.log"
RewriteLogLevel 2

# rewrite rules for stdp blog
RewriteCond /home/srv/www/theofel.de/htdocs/%{REQUEST_FILENAME} !-d
RewriteCond /home/srv/www/theofel.de/htdocs/%{REQUEST_FILENAME} !-f
RewriteRule ^/stdp-archives/(.*)$ /stdp/mtview.php [L,QSA]

# rewrite rules for the plog blog
RewriteCond /home/srv/www/theofel.de/htdocs/%{REQUEST_FILENAME} !-d
RewriteCond /home/srv/www/theofel.de/htdocs/%{REQUEST_FILENAME} !-f
RewriteRule ^/plog-archives/(.*)$ /plog/mtview.php [L,QSA]

Dabei ist /home/srv/www/theofel.de/htdocs/ das Wurzelverzeichnis meiner Webseite (DocumentRoot). Allerdings habe ich die Regeln im Gegensatz zu den oben genannten Anleitungen nicht mittels einer .htaccess-Datei realisiert sondern direkt in die Apache-Serverkonfiguration eingetragen. Vielleicht kommt daher dieser kleine aber feine Unterschied.

Tags:

MT-Plugin für Technorati-Tags und mtview.php

Ich hatte kürzlich berichtet, dass ich Technorati-Tagging eingeführt habe. Leider stellt das verwendete verwendete Plugin keinen passenden Template-Code für PHP zur Verfügung. Damit kann das Template nur genutzt werden, wenn man statische Seiten durch Perl erzeugen lässt.

Heute wollte ich aber meinen persönlichen Blog auf dynamische Seiten umstellen. Dazu werden einige Rewrite-Regelen für Apache erzeugt, die alle Seitenabrufe auf mtview.php umleiten. Das Problem ist nun, dass mtview.php nicht mit dem Template-Tag <$MTTechnoratiTags class="tags"$> zurecht kommt, weil dieses nur für das Template-Parsing in Perl bekannt ist.

Was bleibt mir also übrig, als die fehlende Funktion in PHP nachzubauen? Ich meine, nicht das ich vorher in meinem Leben jemals eine Zeile PHP Code produziert habe, aber das macht ja nichts. ;-)

Nach einem Studium der PHP Plugin API und dem Artikel PHP Dynamic Publishing: Developing Plugins aus dem Six Apart Professional Network (erst nach Anmeldung zugänglich) habe ich schließlich einen kleinen PHP-Code (Download als TGZ-Datei) geschrieben, den ihr nur in das Verzeichnis mt-root/php/plugins entpacken müsst. Und schon klappen die Technorati-Tags auch auf den dynamisch erzeugten Seiten.

Tags: