permaLink - feste Adressen für das Content Management System

permaLink

Eine der Stärken der Content Management Systeme LEPTON CMS sowie WebsiteBaker ist die konsequente Verwendung von sprechenden Links.

Sprechende URLs werden beim Anlegen von Seiten automatisch aus dem Menutitel generiert, ein Optimierungsbedarf besteht normalerweise nicht.

Es gibt jedoch immer wieder Situationen, in denen eine bestimmte Seite mit einer Reihe von Parametern aufgerufen wird, damit bestimmte Informationen angezeigt werden. Ein Beispiel hierfür ist der Veranstaltungskalender der phpManufaktur. Für die Seite Workshops & Termine existiert eine Seite - genauer: ein sprechender Link:

http://phpmanufaktur.de/cms/workshops-termine.php

In der Übersicht werden die aktuellen Workshops & Termine der phpManufaktur angezeigt.

Soll allerdings ein bestimmter Termin angezeigt werden, z.B. die Schulung zu Dwoo & Presets am 22.07.2011, muss der Seite eine ganze Reihe von Parametern übergeben werden, der Link sieht in diesem Fall so aus:

http://phpmanufaktur.de/cms/workshops-termine.php?act=evt&evt=id&det=1&id=13

Dieser Link liefert zwar das gewünschte Ergebnis, er ist jedoch unhandlich und lässt sich nur unter Schwierigkeiten merken.

Es wäre wunderbar, wenn anstatt dieses kryptischen Aufruf ein sich selbst erklärender Link verwendet würde:

http://phpmanufaktur.de/cms/termine/220711.php

Diese URL beschreibt verständlich, was sie anzeigen wird: die Termine am 22.07.2011.

Im Unterschied zu einer Kurz-URL erzeugt permaLink eine echte Seite. Die Inhalte werden auch auf dieser Seite angezeigt, die Anwendungen - in diesem Fall kitEvent - werden dort aufgerufen und ausgeführt, sie können entsprechend den Seitentitel, Kurzbeschreibung und Keywords für diese vollwertige Seite setzen.

permaLink installiert sich als Admin-Tool. Sie können dort jederzeit von Hand vollständige URL's mit den dazugehörigen Parametern eingeben und die gewünschte Zielseite festlegen - ein Klick, und permaLink erstellt die gewünschte Seite:

Insgesamt sind drei Angaben erforderlich:

  • Request Call - hier legen Sie fest, auf welche Weise permaLink die Paramter an die jeweilige Anwendung übergeben soll. In der Regel wird dies ein $_GET Parameter sein (Voreinstellung). Wenn Sie die erforderliche Parameterübergabe nicht kennen probieren Sie GET und REQUEST - im Zweifelsfalle sollten Sie den Programmierer fragen.
  • Redirect URL - der vollständige Aufruf der Seite mit allen Parametern, die durch einen permaLink ersetzt werden soll
  • Permanent Link - die Angabe der Zielseite. Der Link bezieht sich relativ auf das Seitenverzeichnis ihrer Installation, dies ist normalerweise bei WebsiteBaker pages und bei LEPTON page, also http://www.domain.tld/pages/. Die Angabe kann zusätzlich ein oder mehrere Unterverzeichnisse enthalten (in der Abbildung termine) - existiert das Verzeichnis noch nicht, wird es angelegt. Ferner geben Sie den Dateinamen der Seite an die erzeugt werden soll - im abgebildeten Beispiel 220711.php einschließlich der Dateiendung (in der Regel .php). Der Dateiname muss den üblichen Regeln entsprechen (Kleinschreibung, keine Sonderzeichen, keine Leerzeichen).

permaLink - Einbindung in kitEventpermaLink prüft die Angaben, gibt Ihnen ggf. Hinweise und legt dann die Seite an. Mehr ist nicht zu tun, die Seite braucht nicht bearbeitet oder gepflegt werden, da sie stets den aktuellen Inhalt der Redirect URL ausgibt. Änderungen nehmen Sie ggf. an der ursprünglichen Seite vor.

Es wäre natürlich mühsam, müsste man jeden permaLink von Hand setzen. Zusammen mit permaLink wird die Schnittstelle class.interface.php installiert. Diese Schnittstelle ermöglicht es Programmierern für ihre Anwendungen automatisiert permaLinks zu erzeugen. In der Abbildung rechts sehen sie die Einbindung von permaLink in den Einstellungen von kitEvent.

Die Einbindung von permaLink in eigenen Addons und Modulen ist recht einfach.

  1. Binden Sie die class.interface.php mit require_once() ein,
  2. Initialisieren Sie die Klasse permaLink(),
  3. rufen Sie die Funktion createPermaLink() auf.

Der Funktion createPermaLink() übergeben Sie insgesamt 6 Parameter:

  • $redirect_url -die ursprüngliche URL mit allen Parametern
  • $perma_link - die Angabe der Zielseite (siehe oben),
  • $request_by - hier geben Sie den Namen ihrer Anwendung an (dient der Übersicht in der Tabelle),
  • $request_type - ist für Aufrufe durch Anwendungen immer 'addon',
  • $link_id - ist eine Referenz über die Sie die ID des permaLink zurückerhalten,
  • $request_use - hier legen Sie fest, welche Art der Parameterübergabe Sie von permaLink erwarten: 'GET', 'PUT', 'REQUEST' oder 'SESSION'

createPermaLink() gibt im Erfolgsfall true, ansonsten false zurück. Bei false können Sie mit Hilfe von isMessage() und isError() prüfen, ob Meldungen von permaLink vorliegen, diese rufen Sie mit getMessage() bzw. getError() ab.

Das folgende Code Fragment zeigt einen beispielhaften Aufruf, wie er in kitEvent verwendet wird:


require_once(WB_PATH.'/modules/perma_link/class.interface.php');
$permaLink = new permaLink();
$pid = -1;
if (!$permaLink->createPermaLink($redirect, $perma_link, 'kitEvent', 'addon', $pid, 'REQUEST')) {
  if ($permaLink->isError()) {
    $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $permaLink->getError()));
    return false;
  }
  $this->setMessage($permaLink->getMessage());
  return false;
}

Um einen permaLink wieder zu löschen rufen Sie die Funktion deletePermaLink() auf und übergeben als Parameter entweder die ID des permaLink (im obigen Beispiel haben Sie die ID über die Referenz $pid erhalten) oder den permanenten Link selbst (im obigen Beispiel $perma_link):


require_once(WB_PATH.'/modules/perma_link/class.interface.php');
$permaLink = new permaLink();
if (!$permaLink->deletePermaLink($perma_link)) {
  $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $permaLink->getError()));
  return false;
}

Diese Beschreibung ist sicherlich noch nicht vollständig. Ich freue mich über Ergänzungen, Anregungen, Anwendungsbeispiele von permaLink - bitte helfen Sie aktiv mit, diese Anwendung und Anleitung zu verbessern!

Ralf Hertsch