Martin Lantzsch
Software Entwickler
9. November 2011

Joomla eigenes Basis Template – Teil 1

9. November 2011 - Geschrieben von Martin - Ein Kommentar

In der folgenden Serie werde ich euch anhand eines Praxisbeispiels zeigen wie man sich sein eigenes „Basis“ Template für Joomla schmiedet. Dieses Template kann dann später als Grundlage für eigene Entwicklungen verwendet werden. Meine verwendete Joomla Version ist übrigens 1.5, in wie fern man das auf andere Versionen abwälzen kann, weiß ich nicht.

Die Joomla Template Struktur
Die Templates werden bei Joomla – wie sollte es auch anders sein – im Unterordner „templates“ des root Verzeichnisses abgelegt. Jedes Template bekommt seinen eigenen Ordner in den später alle Stylesheets, JavaScript Dateien, Bilder und natürlich die Views kommen. Als Ausgangspunkt legen wir uns folgende Ordner an:

- templates
-- basis_template
--- css
--- images

Natürlich nützen uns die Ordner allein noch nichts, deshalb kommen hierzu noch folgende Dateien:

- templates
-- basis_template
--- css
---- template.css
--- images
-- index.php
-- templateDetails.xml

In den CSS Ordner kommt das Stylesheet namens „template.css“, in das Root Verzeichnis packen wir die „index.php“, welche später das HTML Gerüst beinhält und die „templateDetails.xml“, die Joomla benötigt um mit dem Template arbeiten zu können. Der images Ordner bleibt erst mal leer.

Das HTML Grundgerüst
Ich gehe jetzt einfach mal davon aus, das meine Leser ein Grundverständnis von HTML mitbringen, wenn nicht, solltet ihr euch erst mal in dessen Thematik einarbeiten.

Wir füllen nun die „index.php“ mit folgendem Inhalt:

<?php defined( '_JEXEC' ) or die( 'Restricted access' );?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
    <head>
        <jdoc:include type="head" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/general.css" type="text/css" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css" type="text/css" />
    </head>
    <body>
        <div id="wrapper">
            <div id="header">
                <h1><?php $conf =& JFactory::getConfig(); echo $conf->getValue('config.sitename'); ?></h1>
            </div>
            <div id="sidebar">
                <jdoc:include type="modules" name="sidebar" />
            </div>
            <div id="content">
                <jdoc:include type="component" />
            </div>
            <div id="footer">
                <jdoc:include type="modules" name="footer" />
            </div>
        </div>
    </body>
</html>

Ist euch das zu schnell gegangen? Gut, dann noch mal langsam.

<?php defined( '_JEXEC' ) or die( 'Restricted access' );?>

Dieses PHP Konstrukt verbietet den direkten Zugriff auf das „pure“ Template, indem es die Ausführung abbricht, wenn die Konstante „_JSEXEC“ nicht definiert ist.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >

Hier definieren wir den HTML Tag und geben ihm die Systemsprache mit, bzw. die Sprache, die der User im Joomla gerade eingestellt hat.

<jdoc:include type="head" />

Dieser Pseudo HTML Tag der Joomla Template Engine bindet alle Geschichten wie title Tag, JS Files, etc. automatisch ein.

<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />

Hier binden wir das System Stylesheet ein. Besonders ist der PHP Teil „$this->baseurl“, hier wird die URL zum aktuellen Joomla ausgegeben, gut zu wissen wenn man später selbst noch etwas einbinden möchte.

<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css" type="text/css" />

Hier wird das Herzstück unseres Templates geladen. Das Stylesheet. Eigentlich wie oben, nur wird hier noch der Name des Templates verwendet um den richtigen Ordner zu finden „echo $this->template“

<jdoc:include type="modules" name="header" />

Der altbekannte Pseudo Tag mit anderen Attributen. Hier Laden wir den typ modules mit dem Name header. Das heißt, wir laden alle Module die im System an der Position „header“ Registriert sind.

<jdoc:include type="component" />

Hier rufen wir die Inhaltskomponente der aktuellen Seite auf. Also z.B. „com_content“, „com_contacts“, etc..

Was wir bisher haben
Jetzt haben wir ein eigentlich bereits Funktionsfähiges Template. Doch es fehlt noch die „tempalteDetails.xml“, die mit einer manifest.xml zu vergleichen ist. Hier werden alle verwendeten Dateien aufgeführt, im Template verwendete Positionen registriert, Authorangaben gespeichert und noch ein paar Schmankerl mehr. Doch das machen wir im nächsten Teil, der im Anschluss erscheint.

Joomla eigenes Basis Template – Teil 2

8. November 2011

Visual Studio Debugging Konsole

8. November 2011 - Geschrieben von Martin - Keine Kommentare


Habe heute vergeblich die Debugging Konsole unter dem Menüpunkt Ansicht gesucht um meine Debug.WriteLine() Ausgaben zu analysieren, doch die hat sich im Visual Studio 2010 unter Debuggen -> Fenster versteckt wie ich nach – einiger Zeit – festgestellt habe ;-)

24. Oktober 2011

Limonade – mein Lieblings PHP Framework

24. Oktober 2011 - Geschrieben von Martin - 2 Kommentare

Habe ich euch schon von Limonade erzählt? Nein das ist nicht mein neuer Mediaplayer, sondern ein cooles PHP Framework. Es ist simpel, leichtgewichtig, flexibel und na klar kostenlos.

<?php
require('libs/limonade.php');
dispatch('/', function() {
    echo 'Hallo Welt!';
});
run();

nicht mehr und nicht weniger.

Also falls ihr für ein kleines, oder auch ein großes Projekt noch ein Framework benötigt, das im Gegensatz zu Zend, Codeigniter und Co schnell (und natürlich leicht) zu installieren und handzuhaben ist, ist Limonade auf jeden Fall einen Blick wert.

Warum es so klein ist kann ich natürlich auch beantworten. Es wurden einfach Dinge weggelassen, bzw. eingespart die nicht jeder benötigt. Aber z.B. ein Login ist doch kein Ding. Mit Limonade programmiert man das einfach ruck zuck selbst und hat dann genau das was man will – ohne groß an bestehendem rumbasteln zu müssen.

21. Oktober 2011

Dechiffrieren leicht gemacht in PHP

21. Oktober 2011 - Geschrieben von Martin - Keine Kommentare

Gerade haben meine Anwendungsentwicklungsmitschüler einen kleinen Chiffrieralgorithmus gebastelt (oder sie haben eine Drehscheibe aus Papier genutzt, aber ich hoffe ersteres :D) und mir verschlüsselte Nachrichten geschickt. Eben hab ich in 10 min folgendes „hingepfuscht“:

<?php
$string = 'oerr pyhamk hew irxwglpyiwwipr';
$splitted = str_split($string);
$abc = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$i = 0;
while($i <= count($abc)) {
	$newString = '';
	foreach($splitted as $char) {
		if($char != ' ') {
			$newChar = 0;
			$charNum = array_search($char, $abc);
			$newCharNum = $charNum + $i;
			if($newCharNum >= count($abc)) {
				$oversize = $newCharNum - count($abc);
				$newCharNum = $oversize;
			}
			$newChar = $abc[$newCharNum];
			$newString .= $newChar;
		} else {
			$newString .= ' ';
		}
	}
	echo '<p>'.$i.': '.$newString.'</p>';
	$i++;
}


Das einzig kniffelige war der Sprung wenn der Integer $i länger ist als die noch verbleibenden Zeichen, aber dann einfach die Anzahl der Zeichen vom Neuen Char Nummern Wert abziehen und wieder von vorn beginnen :)

Wer nun zu faul ist die einzelnen Zeichenketten durchzuchecken, kann selbstverständlich von ein Wörterbuch anbinden und die gefunden Worte gegenprüfen (so kann man ggf. auch Groß und Kleinschreibung mit einbeziehen).

13. Oktober 2011

Firefox PDF Upload falscher Mime Type

13. Oktober 2011 - Geschrieben von Martin - 3 Kommentare

Heute hatten wir das Problem, das beim Kunden keine PDFs auf den Server hochgeladen werden konnten. Es hat sich herausgestellt, das ein aktueller Firefox verwendet wurde, aber auf dem Windows PC kein Adobe Reader installiert war. Das hatte zu folge, das der Firefox nichts mit der .pdf Datei anzufangen wusste und sendete einfach mal den Mime Type

application/octet-stream

anstatt

application/pdf

Es ist zwar nachvollziehbar, das der Firefox sagt er kennt diese Datei nicht, aber in allen anderen Browsern hat es funktioniert – einschließlich dem Internet Explorer 6.

Der Upload hat dann übrigens nicht funktioniert, da mittels PHP der Mime Type der Datei erfragt wird und alles was nicht auf „application/pdf“ passt wird weggeworfen.

UPDATE!
Ich habe soeben festgestellt, das Firefox desweiteren folgende Mime Types sendet:

application/download

application/x-download

Kommt also immer auf die Client Konfiguration an…

11. Oktober 2011

Excel ausgestiegen

11. Oktober 2011 - Geschrieben von Martin - Keine Kommentare


Ops, da war mein VBA (Visual Basic for Applications ;)) Script wohl zu komplex. Excel Tabelle in XML Exportiert, das Script auf JavaScript portiert und schwups war mein Ergebnis auf dem Schirm :)

8. Oktober 2011

What If Car Drivers Were Hired Like Programmers?

8. Oktober 2011 - Geschrieben von Martin - Keine Kommentare

Job title: Car driver

Job requirements: Professional skills in driving normal- and heavy-freight cars, buses and trucks, trolley buses, trams, subways, tractors, shovel diggers, contemporary light and heavy tanks currently in use by NATO countries.

Skills in rally and extreme driving are obligatory!
Formula-1 driving experience is a plus.

Knowledge and experience in repairing of piston and rotor/Wankel engines, automatic and manual transmissions, ignition systems, board computer, ABS, ABD, GPS and car-audio systems by world-known manufacturers – obligatory!

Experience with car-painting and tinsmith tasks is a plus.

The applicants must have certificates by BMW, General Motors and Bosch, but not older than two years.

Compensation: $15-$20/hour, depends on the interview result.

Education requirements: Bachelor’s Degree of Engineering.

Quelle

2. Oktober 2011

PECL uploadprogress auf Debian installieren

2. Oktober 2011 - Geschrieben von Martin - 3 Kommentare

In den letzten Wochen hatte ich 2x das Vergnügen die PECL extension „uploadprogress“ zu installieren. Leider ist die Installation etwas tricky, wenn man nicht weiß was genau man zu tun hat.

Nötige Pakete aus den Quellen installieren

apt-get install php5-dev php-pear

PECL extension installieren

pecl install uploadprogress

PHP.ini um folgende Zeile erweitern

extension=uploadprogress.so

und in der PHP.ini die Temporäre File Upload Directory auf /tmp setzen (ohne diesen Schritt liefert uploadprogress_get_info() „null“ zurück)

upload_tmp_dir=/tmp

Webserver neu starten und die extension sollte Problemlos laufen.