TYPO3 und PHPUnit: Code Testen (+ Hello World)

5. August 2010 in TYPO3 von Leo

Das automatisierte Testen von Code wird immer wie beliebter. Deshalb habe ich diese Woche bei 4eyes die Aufgabe erhalten, mir das ganze mal anzusehen und gleich Tests in TYPO3 zu schreiben um eine Extension zu testen.

Anders als mit Selenium, wird hier jedoch direkt der (PHP) Code getestet, also bevor schon die fertigen Resultate da sind, testet man was zwischen Start und ende passiert. So kann man mit PHPUnit z.B. testen ob eine bestimmte Funktion im Code ein bestimmtes Resultat zurück liefert.

Nachdem ich die Funktionsweise dann auch verstanden habe und das Testen möglich war (nach ein paar Startschwierigkeiten), schrieb ich zuerst mal einen kleinen Hello World Test. Doch bevor wir zum Test kommen, zeige ich euch wie ihr alles richtig einrichtet.

Installation

Die Extension PHPUnit (extkey: phpunit) herunterladen und installieren. Hier findet ihr die Extension auf Typo3.org, klick.

Nach der Installation erstellt ihr in einer eurer Extensions einen Ordner namens “Tests”. Der Pfad wäre also:

typo3conf/ext/deineExtension/Tests

Nun erstellt ihr im gerade erstellten Ordner ein neues PHP File mit folgendem Namensschema:

tx-extKey_HelloWorld_testcase.php

Wichtig ist hierbei eigentlich nur das “_testcase” am ende, da dies PHPUnit sagt, dass es sich hier im ein Test File handelt (PHPUnit scannt alle ext Verzeichnise automatisch).

Nun füllen wir das PHP File mit dem standardmässig benötigten Code:

<?php
require_once 'PHPUnit/Framework.php';

class tx_extKey_HelloWorld_testcase extends tx_phpunit_testcase {

}

?>

Mit PHP chmod Rechte setzen (Dateien und Ordner)

30. April 2010 in PHP von Leo

Als ich kürzlich mit einem Freund an einem Projekt arbeitete, auf welchem später TYPO3 laufen wird, hatten wir mal wieder das Problem, dass ein Ordner welcher auch noch Dateien enthält nicht mehr vom FTP Server gelöscht werden konnte. Als das Problem erstmals vor einer Woche auftrat, konnten wir es lösen indem wir einfach einen anderen FTP Client (ich glaube es war SmartFTP) anstatt Filezilla nahmen. Dieser konnte alles löschen.

Doch nun lässt sich gar nichts mehr löschen. Die Rechte waren wenn ich mich besinne auf chmod 755, trotzdem machte weder eine Datei noch der Ordner einen wank.

Also schreib ich kurz ein kleines PHP Script, in welchem ich das ganze per PHP lösen versuchte (nein es funktionierte sogar!) :)

Das Script sah dann so aus:

<?php

chmod ("ordnerxy/.htaccess", 777);
chmod ("ordnerxy/.htaccess", "drwxrwxrwx");
chmod ("ordnerxy/.htaccess", 0777);

chmod ("ordnerxy", 777);
chmod ("ordnerxy", "drwxrwxrwx");
chmod ("ordnerxy", 0777);

echo 'ok';

?>

Im ersten abschnitt werden der Datei “.htaccess”, welche im Ordner “ordnerxy” liegt die rechte 777 gegeben. Im zweiten abschnitt werden die selben Rechte auch noch dem Ordner “ordnerxy” gegeben, da sich dieser ja auch nicht löschen liess. Eventuell reicht es sogar wenn man nur dem Ordner die nötigen Rechte gibt.
Um das Script zum laufen zu bringen müssen natürlich jeweils die Pfade angepasst werden, stets vom Script ausgegangen.
In unserem Beispiel hier würde das in etwa so aussehen:

/ordner1/ordnerxy/...

Dabei wäre das Script im Ordner “ordner1″.

Als Datei können übrigens auch andere Dateien mit anderen Dateiendungen angegeben werden.

Das Script muss einfach kurz im Browser aufgerufen werden. Mit dem “echo” am Schluss wird noch bestätigt dass man wirklich das Script geöffnet hat.

PHP Grundkurs 1: echo Ausgabe

in Grundkurs, PHP von Leo

Hallo, dies ist der erste Teil meiner PHP Grundkurs Reihe. Hier zeige ich euch PHP und erkläre euch einiges, damit auch ihr diese Web Programmiersprache erlernen könnt. Anbei möchte ich noch anmerken, dass auch ich erst PHP lerne und die Sprache somit auch noch nicht super beherrsche, aber ich bin dran. Und hier in diesen kleinen Kursen zeige ich euch jetzt, was ich bisher so gelernt habe.

Das erste was man in PHP lernen sollte, was auch sehr simpel ist, jedoch immer benötigt ist, ist die einfache Ausgabe mit ‘echo’.

Zu erst erstellt ihr ein PHP File mit der Dateiendung “.php”. Damit der PHP Code als PHP Code gesehen wird (man kann PHP ja auch in HTML verwenden, dazu aber später noch mehr), muss er in den, ich nenne sie mal PHP Tags stehen. Diese sehen wie folgt aus:

<?php

// Kommentar

?>

Wenn ihr ein anständiges Programm wie Aptana, Notepad++ etc. habt, dann wird euch dieses alles “färben” (Code Highlighting), mehr zu den richtigen Programmen und eine kurze Erklärung folgt noch in einem weiteren Artikel.

Doch zurück zur ‘echo’ Ausgabe. Eine einfache Textausgabe macht ihr nun so:

<?php

echo "Hello World";

?>

Der Syntax ist sehr einfach. Zuerst ‘echo’ dann die Ausgabe in Anführungszeichen und danach, wie in PHP halt üblich, ein Semikolon ‘;’.
Wer das ganze noch mit HTML Code erweitern will, also direkt in der Ausgabe drin, der nutzt die ”:

<?php

echo '<u>Unterstrichen</u><br/>';

?>

Die Ausgabe wäre nun Unterstrichen und nach dem Text folgt ein ‘br’ (break), also ein Zeilenumbruch.

Wer die Ausgabe mehrmals ausgeben will, kann das ganze nun in einer Variable abspeichern, so muss der Text nicht immer neu geschrieben werden. Um dies zu tun, muss der Text in einer Variable gespeichert werden, also die Variable zuerst definiert werden.
Dies geht folgendermassen:

<?php

$hallo = 'Hallo!';

echo $hallo;

?>

In der Variable ‘$hallo’ (Variablen immer mit einem $-Dollar Zeichen am Anfang!) wird also der Text ‘Hallo!’ gespeichert. Im echo wird danach die Variable ausgegeben, also der gespeicherte Wert (‘Hallo!’) in der Variable. Beim Ausgeben einer Variable werden keine Anführungszeichen im echo benötigt, sondern lediglich das $-Dollar Zeichen welches immer vor den Variablen ist.
Würde man im echo die Variable $hallo mit Anführungszeichen ausgeben wollen, würde uns das echo keine Variable, sondern einfach den genauen Text, also ‘$hallo’ ausgeben, was wir ja nicht wollen.

Mehrere Variablen am Stück

Wer nun mehrere Variablen an einer Kette ausgeben möchte, oder auch z.B. eine Variable und einen normalen Text in Anführungszeichen, kann dies so tun:

<?php

$hallo = 'Hallo';
$welt = 'Welt';

echo $hallo . $welt;

?>

Das ganze aneinander hängen geschieht wie ihr oben seht, mithilfe eines Punktes ‘.’
Im Code oben würde die Ausgabe aber HalloWelt heissen, ohne einen Abstand zwischen den beiden Wörtern. Um dies schön zu lösen, hängt mein einfach ein Leerzeichen dazwischen:

<?php

$hallo = 'Hallo';
$welt = 'Welt';

echo $hallo . ' ' . $welt;

?>

Nun ist die Ausgabe schön dargestellt.

Das war Teil 1, Teil 2 folgt demnächst.

Google News Sitemap Plugin für WordPress

17. Februar 2010 in Internet, Tutorials von Leo

Da auch ich auf Google News eingetragen bin, und das ‘Google News Sitemap’-Plugin installiert habe, musste ich vor kurzem feststellen, dass Google die Sitemap nicht mehr akzeptierte. Nachdem ich lange im Internet geforscht habe, konnte ich die Fehler beheben, mit welchen Google nicht zufrieden war.
Und zwar nimmt das Plugin die Sprache für die Sitemap aus den Einstellungen des RSS-Feeds. Dieser war komischerweise komplett auf englisch gestellt, was natürlich Google nicht wollte, da ich außerdem noch UTF-8 nutzte, anstatt ihr ISO-Format. Als ich dann einen Weg gefunden habe, klappte alles wunderbar, und die Sprache des RSS-Feeds lässt sich jetzt jederzeit gemütlich über das Backend von WordPress ändern. Und so wird es gemacht:

Erstellt eine neue PHP-Datei mit unten stehendem Code, und ladet sie danach in euer Plugins Verzeichnis (“/wp-content/plugins/”).

/*
Plugin Name: RSS Language
Plugin URI: http://bueltge.de/wp-landingsites-de-plugin/181/
Description: Add options field for rss language
Version: 1.0
Author: Frank Bültge
License: GNU
Author URI: http://bueltge.de/
*/

function rss_language_string() {
?>


language codes.'); ?>
}

function rss_language_admin_init() {
register_setting( 'reading', 'rss_language' );
add_settings_field( 'rss_language', __('RSS Language Code'), 'rss_language_string', 'reading');
}
add_action( 'admin_init', 'rss_language_admin_init' );

?>

Nun könnt ihr in WordPress die Sprache des RSS-Feeds ändern. Die Option findet ihr unter “Einstellungen” => “Lesen”, dort dann ganz unten ins Kästchen “de” (ohne “”) eintragen.

Doch kommen wir nun zum hauptsächlichen Problem, dem “Incorrect Namespace”. Dieser Fehler passiert in der Plugin Version 1.4 und älter, da Google das Schema der Sitemaps (mal wieder) geändert hat.
Ich habe den PHP Code des Plugins dem neuen Schema angepasst, sowie noch eine deutsche Anleitung erstellt.
Das Plugin könnt ihr über den unten stehenden Link herunterladen. Dies ist die Version 1.5, welche ich erstellt habe.

Download google-news-sitemap-generator