Joomla-CMS und das PHP-Kalender-Script

Integration des online-Kalenders in Joomla 2.5

Dieser Artikel beschreibt das Zusammenwirken des Kalender-Scrips mit dem CMS-System Joomla. Das Kalender-Script ist in PHP programmiert und somit prinzipiell leicht in Joomla integrierbar. Es gibt aber Grenzen, da der Kalender ein eigenständiges Programm und kein ausgemachtes Joomla-Modul ist. Am Beispiel von Joomla 2.5.7 soll hier die Einbindung beschrieben werden.

Um diese Integration zu bewerkstelligen müssen Sie kein Programmierer sein. Allerdings sollten Sie schon einmal HTML-Code und PHP-Code gesehen haben. Und mit CSS-Code sollten Sie recht gut umgehen können, um die optische Einpassung Ihren Wünschen entsprechend realisieren zu können.

1. Kalender-Installation unter bzw. neben Joomla

Joomla ist bereits in Ihrem Web installiert und eingerichtet. Es solle in einem angenom­menen Haupt­ordner /cms auf Ihrem Server liegen, was einem angenom­menen absoluten Server­pfad /kunden/0815/ihr_web/cms entsprechen soll. Aufzurufen sei Ihre Joomla-Instal­lation als http://www.ihr-web.de/cms/index.php.

Dann gibt es zwei gleich­wertige Möglich­keiten, das Kalender-Script günstig zu platzieren. Zum ersten in einem eigenen Hauptordner /kalender, wonach das Kalender-Script aufzurufen wäre als http://www.ihr-web.de/kalender/. Oder in der zweiten Variante als Unter­ordner innerhalb von Joomla also in /cms/kalender und der Aufruf­adresse http://www.ihr-web.de/cms/kalender/. Nach der Instal­lation an einem der beiden Orte und dem Setup des Kalenders sollte dessen eigen­ständiges Funktio­nieren völlig losgelöst vom Joomla-CMS hin­reichend über­prüft werden.

Danach sollte das Kalender-Script auf den UTF-8-Zeichen­satz umge­stellt werden, da Joomla fast überall unter diesem Zeichen­satz betrieben wird. In der Admini­stration des Kalender-Scripts unter Allgemeines ist dafür die Ein­stellung Zeichen­satz für Ausgaben umzu­schalten. Außer­dem sollten die HTML-Schablo­nen kalSeite.htm, kalPopup.htm, kalDruck.htm, kalFreischalt.htm für diesen Zeichen­satz optimiert werden, selbst wenn diese Schablonen unter Joomla später kaum benutzt werden. Öffnen Sie diese HTML-Schablonen mit einem Editor-Programm und entfernen Sie die Zeile

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

zugunsten der dort bereits vorberei­teten aber im Original auskom­mentierten Zeile

<meta http-equiv="content-type" content="text/html; charset=utf-8">

2. Kalender-Integration in den Inhalt einer Joomla-Seite

Sie können das Kalender-Script auf zwei Wegen in eine vor­handene Joomla-Beitrags­seite einbauen. Über ein iFrame oder über den PHP-Befehl include. Per iFrame ist der schnellere, unkompli­ziertere Weg. Allerdings ist diese Vorgehens­weise wahr­schein­lich mit Kompro­missen behaftet. So wird es meist nicht möglich sein, ein Zusammen­spiel von Mini­kalender und Termin­liste zu reali­sieren.

Die bessere aber aufwen­diger Variante ist die PHP-Inte­gration. Joomla ist zunächst einmal nicht dafür vorbe­reitet, fremden PHP-Code oder fremde PHP-Scripte auszu­führen. Durch ein passendes Plugin muss diese Fähig­keit ergänzt werden. Instal­lieren Sie also ein Plugin, das das Aus­führen von PHP-Code im Inhalt eines Beitrages ermög­licht. Ich empfehle DirectPHP. Aber auch die Ergänzung sourcerer funktioniert. Ebenfalls könnten die Plugins Embed Script oder auch Any HTML, PHP, CSS, Script geeignet sein.

Sofern Sie sich für diese bessere Integra­tions­methode entscheiden muss jedoch am Kalender-Script noch einmal korri­giert werden. Eine Reihe von globalen Variablen muss in der zen­tralen Einstell- und Werte­datei kalWerte.php zusätz­lich als global definiert werden. Öffnen Sie die Datei kalWerte.php und fügen Sie ganz oben direkt als Zeile 2 die folgende Anweisung ein:

global $kal_FeldName, $kal_FeldType, $kal_ListenFeld, $kal_SortierFeld, $kal_LinkFeld, $kal_DetailFeld, $kal_SuchFeld, $kal_EingabeFeld, $kal_KopierFeld, $kal_PflichtFeld, $kal_SpaltenStil, $kal_ZeilenStil, $kal_NListenFeld, $kal_NDetailFeld, $kal_NKopierFeld, $kal_NEingabeFeld, $kal_Kategorien, $kal_Symbole, $kal_NutzerFelder, $kal_NutzerPflicht, $kal_AktuelleFeld, $kal_AktuelleLink, $kal_AktuelleStil, $kal_LaufendeFeld, $kal_LaufendeLink, $kal_LaufendeStil, $kal_WochenTag;

Danach können Sie mit der eigent­lichen Arbeit an Ihrer Beitrags­seite unter Joomla beginnen.

Im Falle der Verwendung des Plugins DirectPHP lautet der in den Seiten-Inhalt einzu­fügende Code:

<?php
 include_once '/kunden/0815/ihr_web/cms/kalender/kalWerte.php';
 include '/kunden/0815/ihr_web/cms/kalender/kalender.php';
?>

Die Verwen­dung abso­luter Server­pfade ist nicht zwingend aber empfeh­lens­wert.

Versuchen Sie nicht etwa, es durch Zeilen­umbrüche und Ein­rückungen lese­freund­lich wie in obigem Muster zu gestalten. Ganz im Gegen­teil! Schreiben Sie den PHP-Code als eine einzige durch­gehende lange Zeile in den Beitrags­inhalt, ohne dazwi­schen die Enter-Taste zu betäti­gen. Anderen­falls fügt der Joomla-Editor code­störende Absatz­zeichen dazwi­schen. Schalten Sie nach der Eingabe des PHP-Codes in die HTML-Ansicht des Editors um oder schalten Sie den Editor aus, um den HTML-Code der Eingabe zu sehen. Sie werden in etwa Folgen­des vorfinden:

<p>&lt;?php include_once '/kunden/0815/ihr_web/cms/kalender/kalWerte.php'; include '/kunden/0815/ihr_web/cms/kalender/kalender.php';?&gt;</p>

Der Joomla-Editor hat den Code in einen Absatz <p>...</p> einge­bettet. Das ist als Umfas­sung für die gesamte Ausgabe des Kalen­ders unpas­send und muss manuell in einen <div>...</div>-Contai­ner geändert werden. Je nach verwen­detem Tem­plate des Joomla-CMS kann es sinnvoll sein, den Kalen­der mittig auszu­richten. Dazu ist dann gleich der <div>-Con­tainer verwend­bar. Die End­fassung in der HTML-Ansicht des Seiten­inhalts wäre dann eine lange Zeile:

<div style="text-align:center;">&lt;?php include_once '/kunden/0815/ihr_web/cms/kalender/kalWerte.php'; include '/kunden/0815/ihr_web/cms/kalender/kalender.php';?&gt;</div>

In der Normalansicht des Beitrags­inhalts würde sich dann ergeben:

PHP-Code
Abbildung: PHP-Code unter DirectPHP

Bei alternativer Verwendung des Plugins sourcerer haben Sie es mit der Code­eingabe etwas leichter, weil sourcerer über eine extra Schalt­fläche unter dem Editor die Code­eingabe unter­stützt. Bei der mit­tigen Ausrich­tung über einen um­schließen­den <div>...</div>-Cont­ainer müssen Sie aber auch hier wieder manuell ein­greifen, weil der Joomla-Editor es mit einem ungeeig­neten <p>-Absatz bewerk­stel­ligen wird. Im Ergebnis würde sich beim Plugin sourcerer folgendes Bild für den einzu­bet­tenden Kalen­der ergeben.

PHP-Code
Abbildung: PHP-Code unter sourcerer

Wenn Sie diese Arbeit erledigt haben, sollten Sie im Front­end auf der betref­fenden Beitrags­seite eine Erfolgs­kontrolle durch­führen. Die Termin­liste des Kalen­der-Scripts sollte ausge­geben werden, aller­dings in einer total unfor­matier­ten Weise. Keine Panik - die CSS-Styles fehlen ja noch.

3. Einbau der CSS-Styles des Kalender-Scripts

Die CSS-Syles des Kalenders befinden Sie in der Datei kalStyle.css. Es ist also ein Verweis auf kalender/kalStyle.css zu legen. Dafür gibt es drei Möglich­keiten.

Zum Ersten könnte dieser Verweis direkt in das Temp­late einge­fügt werden. Das ist die un­flexi­bel­ste Vari­ante.

<link rel="stylesheet" type="text/css" href="kalender/kalStyle.css">

Sie ist nur für Webmaster zu empfeh­len, die für die Mani­pula­tion der Datei index.php im Temp­late die nötige Sicher­heit be­sitzen.

Die zweite bequemere Variante besteht in der Ver­wendung des Plugins Head Script. Nach dessen Instal­lation können belie­bige zusätz­liche CSS-Dateien oder Java-Script-Dateien für die Joomla-Seiten einfach über deren Datei­namen einge­tragen werden. Das Plugin kümmert sich um die norm­gerechte Ein­bin­dung des pas­sen­den Codes in die Beitrags­seiten.

CSS-Code
Abbildung: CSS-Integration mit head script

Hinweis: Allerdings verursacht das Plugin Head Script nach der Instal­lation und Akti­vie­rung in der momen­tanen Fas­sung Warn­mel­dungen sowohl im Back­end als auch im Front­end.

Only variables should be assigned by reference in
      joomla/plugins/system/headscript/headscript.php on line 34
Only variables should be assigned by reference in
      joomla/plugins/system/headscript/headscript.php on line 35

Diese lassen sich leicht besei­tigen durch Kor­rek­tur in der Datei headscript.php in Zeile 34 und 35. In der Original­fas­sung beider Zeilen sind ledig­lich die &-Zeichen zu ent­fernen. (ohne Gewähr!)

 $loc =& JFactory::getURI();
 $doc =& JFactory::getDocument();

Die dritte simple aber nicht ganz saubere Variante besteht im Einbau der CSS-Refe­renz direkt in den Seiten­inhalt der Kalen­der-Beitrags­seite. Und zwar ober­halb des PHP-include-Codes. Im Falle der Ver­wen­dung des Plugins DirectPHP durch eine PHP-Aus­gabe:

<?php echo chr(60).'link rel="stylesheet" type="text/css" href="kalender/kalStyle.css"'.chr(62);?>

Im Falle des Verwendung des Plugins sourcerer durch eine Aus­gabe von:

{source}[[link rel="stylesheet" type="text/css" href="kalender/kalStyle.css"]]{/source}

Nach diesem Einbau der CSS-Datei sollte im Front­end der Kalen­der ordent­lich forma­tiert er­schei­nen. Aller­dings werden je nach dem von Joomla ver­wende­tem Temp­late Nach­bes­serun­gen im CSS-Code der Datei kalStyle.css not­wendig sein. Beson­ders die Aus­rich­tung eini­ger Ele­mente ist ver­bes­serungs­be­dürf­tig.

4. bekannte Randerscheinungen

4.1. Plugin E-Mail-Verschleierung

Viele Joomla-Installationen haben stan­dard­mäßig das Plugin Plugin Inhalt - E-Mail-Ver­schleie­rung (emailcloak) akti­viert. Diese Plugin ver­schlüs­selt auf allen aus­ge­gebe­nen Seiten E-Mail-Adres­sen durch einen Java-Script-Code, damit die Adres­sen nicht von Robo­tern/Spi­dern erkannt und miss­braucht werden. Das Kalen­der-Script gibt nor­maler­weise an kei­ner Stelle E-Mail-Adres­sen für Be­sucher im Klar­text aus. Inso­fern be­hin­dert das Plugin Inhalt - E-Mail-Ver­schleie­rung den Kalen­der nicht.

Leider greift aber die E-Mail-Ver­schlüs­selung auch auf den Inhalt von For­mular­fel­dern zu. Wenn also ein Be­nut­zer des Kalen­ders eine E-Mail-Adres­se in ein Termin­feld einträgt oder auch in seine eige­nen Benutzer­daten während der Regi­strie­rung bzw. beim Login so würde nach Ab­schicken des Formu­lars das Echo im Formu­lar­feld ver­schlüs­selt wieder­gege­ben, was stö­ren würde.

Entweder Sie deaktivieren das gesamte Plugin Inhalt - E-Mail-Ver­schleie­rung system­weit, oder aber Sie schal­ten es nur selek­tiv für die Inhalts­seite des Kalen­der-Scripts aus. Dazu gibt es die An­wei­sung {emailcloak=off}. Diese ist direkt über dem PHP-Code zum Inte­grie­ren des Kalen­ders in die Seite ein­zu­bauen. Also im Falle der Ver­wen­dung von DirectPHP so:

{emailcloak=off}
<?php
 include_once '/kunden/0815/ihr_web/cms/kalender/kalWerte.php';
 include '/kunden/0815/ihr_web/cms/kalender/kalender.php';
?>

5. Grenzen und unlösbare Einschränkungen

5.1 Benutzerdaten und Benutzerlogin

Das Kalender-Script verfügt über eine eige­ne Be­nutzer­ver­wal­tung für regi­strier­te Be­nut­zer. Diese ist nicht kompa­tibel mit der Be­nutzer­ver­wal­tung von Joomla. Ein Login als Joomla-Nutzer wird vom Kalen­der nicht er­kannt und igno­riert. Auf den Sei­ten des in Joomla inte­grier­ten Kalen­ders bewegen sich sol­che Be­nut­zer dennoch als Gäste. Es ist ein zu­sätz­liches Login beim Kalen­der nötig.

5.2 Druckfunktion des Kalenders

Die Druckfunktion des Kalenders kann in einem Popup-Fenster re­ali­siert werden. Diese Varian­te funk­tio­niert ohne Ein­schrän­kungen auch unter Joomla.

Falls die Druckfunktion des Kalen­der-Scripts jedoch auf das Haupt­fen­ster ein­ge­stellt ist, versagt diese. Es würde die gesamte sicht­bare Web­seite ge­druckt also ein­schließ­lich Kopf­banner und Menü von Joomla. Das ist meist un­er­wünscht. Bei Druck im Haupt­fen­ster sollte deshalb der Link [Drucken] des Kalen­der-Scripts auf der Admini­stra­tions­seite Layout gänz­lich ent­fernt werden und statt­des­sen die Druck­funk­tion von Joomla für diese Inhalts­seite akti­viert werden.


Stand: 27.10.2012