Berlin, 05.09.2010
Zoom : Impressum

Kulisch Software-Entwicklung

Kurz und knapp : Leistungen : Projekte : Kunden : Kontakt : Grüße

Joomla Programmierung

Joomla installiert sich schnell. Schneller als z.B. eZ Publish. Joomla kommt recht aufgeräumt einher. Im Inhaltsverzeichnis der Homepage findet sich nach der Installation ein neues Verzeichnis Joomla.

Die ersten Probleme gibt es, wenn man nun wie üblich davon ausgeht, dass eine Homepage eine Inhaltsstruktur besitzt, die im Allgemeinen auch die Navigationsstruktur vorgibt. Die Joomla Literatur rät zum Planen der Website. Da gibt es wieder eine Hürde zu nehmen. Für die Planung stehen nur Bereiche und Kategorien zur Verfügung, wobei eine Kategorie nur einem Bereich zugeordnet sein kann. Eine Fehlplanung bedeutet eine komplette Neusortierung des gesamten Inhaltes. Daher sind eher Inhalte mit einer flachen Inhaltsstruktur in Joomla gut aufgehoben.

Was auch sinnvoll ist, sich gleich ein erstes Plug-In zu schreiben. Oftmals sind Editoren im Einsatz, die keine object- oder embed-tags darstellen können. Möchte man flash-Games oder Media-Player per copy and paste in den gerade neu erstellten Artikel einfügen, wird im Normalfall ein weisser Bereich dargestellt, der ohne vorher in den Quellcode zu schauen (Editorfunktion aus) gedankenverloren gelöscht werden kann.

Eine kleine Hilfe wäre ein Platzhalter wie "{youtube:url breite groesse}" anstelle des gewünschten media-Bereiches. Das geht recht fix bei Verwendung der Plug-In Vorlagen. Die PHP-Datei(en) und ein gleichnamiges XML-File in ein passend benanntes Zip-File packen und im Adminbereich von Joomla installieren. Anschliessend muss das Plug-In noch aktiviert werden. Immer (wie auch bei anderen CMS) den Cache leeren, falls grössere Änderungen an der Homepage vorgenommen wurden.

embedmedia.xml
<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="content">
    <name>EmbedMedia</name>
    <author>Marian Kulisch</author>
    <creationDate>Juli 2009</creationDate>
    <copyright>(C) 2009 - 2009 Marian Kulisch</copyright>
    <license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license>
    <authorUrl>http://www.mariankulisch.de</authorUrl>
    <authorEmail>info@mariankulisch.de</authorEmail>
    <version>1.0</version>
    <description>Easily embed YouTube and other players in your website.</description>
    <files>
        <filename plugin="embedmedia">embedmedia.php</filename>
    </files>
    <params/>
</install>

embedmedia.php
<?php
defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed.' );
jimport('joomla.plugin.plugin');

class plgContentEmbedMedia extends JPlugin
{
    function plgContentEmbedMedia(&$subject, $config)
    {
        parent::__construct($subject, $config);
    }

    function onPrepareContent(&$article, &$params, $start)
    {
        $tasks = array();
        $tasks["embedYoutube"] = '/\{youtube:(.*?)}/i';
        $tasks["embedGoogleVideo"] = '/\{googlevideo:(.*?)}/i';

        foreach ($tasks as $callback => $regex)
        {
            preg_match_all( $regex, $article->text, $matches );
            for($x=0; $x < count($matches[0]); $x++)
            {
                $parts = explode(" ", trim($matches[1][$x]));
                $vids = explode('=', $parts[0], 2);

                if (count($vids) < 2)
                {
                    continue;
                }
                $vid = $vids[1];
                $width = (count($parts) > 1) ? $parts[1] : null;
                $height = (count($parts) > 2) ? $parts[2] : null;
                $replace = call_user_func(array($this, $callback), $vid, $width, $height);
                $article->text = str_replace($matches[0][$x], $replace, $article->text);
            }
        }
    }

    function embedYoutube($vid, $width="425", $height="344")
    {
        $replace ='<object width="'.$width.'" height="'.$height.'">';
        $replace .= '<param name="movie" value="http://www.youtube.com/v/'.$vid.'"></param>';
        $replace .= '<param name="wmode" value="transparent"></param>';
        $replace .= '<param name="allowFullScreen" value="true"></param>';
        $replace .= '<param name="allowscriptaccess" value="always"></param>';
        $replace .= '<embed src="http://www.youtube.com/v/'.$vid.'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="'.$width.'" height="'.$height.'"></embed>';
        $replace .= '</object>';
        
        return $replace;
    }
    
    function embedGoogleVideo($vid, $width="400", $height="326")
    {
        $replace = '<object width="'.$width.'" height="'.$height.'" codebase="http://active.macromedia.com/flash6/cabs/swflash.cab#version=6.0.0.0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">';
        $replace .= '<param name="movie" value="http://video.google.com/googleplayer.swf?docid='.$vid.'" />';
        $replace .= '<param name="play" value="true" />';
        $replace .= '<param name="loop" value="true" />';
        $replace .= '<param name="WMode" value="Opaque" />';
        $replace .= '<param name="quality" value="high" />';
        $replace .= '<param name="bgcolor" value="" />';
        $replace .= '<param name="align" value="" />';
        $replace .= '<embed width="'.$width.'" height="'.$height.'" align="" src="http://video.google.com/googleplayer.swf?docid='.$vid.'" play="true" loop="true" wmode="Opaque" quality="high" bgcolor="" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed>';
        $replace .= '</object>';

        return $replace;    
    }
}
?>

Joomla ist ein bei vielen Providern beliebtes CMS und suggestiert mit überschaubaren Mitteln eine einfache Homepage in relativ kurzer Zeit veröffentlichen zu können. Joomla wurde objekt-orientiert entwickelt und nutzt das MVC-Pattern. Ein internes Nachrichtensystem sorgt für die Kommunikation aller beteiligten Plug-Ins, Module und Komponenten. Über Events werden die einzelnen Abläufe gesteuert. Mittels Eventhändler können eigene Code-Kreationen in den Ablauf des Renderns der Homepage eingebunden werden. Der anzeigbare Inhalt lässt sich in Bereiche und anschliessend in Kategorien einteilen. Einen Inhaltsstrukturbaum gibt es nicht. Diese flache Inhaltsstrukturierung wird in der zu Joomla verfügbaren Literatur gern als das Allein-Stellungsmerkmal von Joomla hervorgehoben.

TIPP: Falls Sie Artikel in Einleitungstext und Haupttext mit dem Weiterlesen-Plug-In aufteilen, halten Sie den Einleitungstext kurz! Sonst muss der Leser des Textes auf der Folgeseite den ganzen Text noch einmal lesen. In Joomla kennen Artikel, anders als in ez Publish, keine Summary.