Widgets mit dem Zend Framework

Der letzte Artikel ist ja schon etwas länger her und deshalb gibt es als Ausgleich mal wieder einen längeren Artikel.
Es geht darum, wie man sinnvoll ein Widget-Aufbau für das Zend Framework umsetzen kann. Mein Ansatz ist sicherlich nicht
perfekt, aber ein guter Anfang.

Vorausgesetzt wird auch dieses mal wieder eine lauffähige ZF-Anwendung mit Bootstrap-Klasse.

» Weiterlesen

Formatierte var_dump()-Ausgabe (Xdebug)

Heute mal ein kleiner Tipp an alle Entwickler, die gerne mit var_dump() Testausgaben (zum Debuggen) erzeugen und sich über die Formatierung ärgern.

Die Ausgabe dieses Codes

$array = array(
	'apfel' => new stdClass(),
	'banane' => 10.5,
	'birne' => 'keine',
	'orange' => null
);
var_dump($array);

würde bei einer normalen PHP-Installation so aussehen:

array(4) { ["apfel"]=>  object(stdClass)#1 (0) { } ["banane"]=>  float(10.5) ["birne"]=>  string(5) "keine" ["orange"]=>  NULL } 

Das ist natürlich nicht sonderlich schön und vor allem schlecht zu lesen. Selbst ein <pre> um die Ausgabe, macht das Lesen nicht einfacher.

Die Lösung: Die PHP-Extension Xdebug formatiert und „highlightet“ die var_dump()-Ausgaben automatisch. Es wird kein <pre> mehr benötigt und selbst riesige Arrays mit tiefer Verschachtelung können wieder mit var_dump() ausgegeben werden, denn ab einer bestimmten Ebene wir das Array einfach abgeschnitten.

Debugging Ausgaben sehen dann so aus:

array
  'apfel' => 
    object(stdClass)[1]
  'banane' => float 10.5
  'birne' => string 'keine' (length=5)
  'orange' => null

Das lässt sich doch gleich viel besser lesen, oder?

Thumbnail Generierung > Seitenverhältnis > PHP

Was tun, wenn man einheitlich große Thumbnails generieren will, die Originalbilder aber in unterschiedlichen Formaten vorliegen? Irgendwie muss das Seitenverhältnis der Bilder automatisch angepasst werden. Daher folgt hier ein kleines Code-Snippet, das einheitlich große Thumbnails generiert und dabei das Seitenverhältnis berücksichtigt.

Voraussetzungen:

  • PHP 4.3.x oder höher
  • GD Library 2.x oder höher
// Pfadangaben
$imagePath = 'pfad/zum/original/bild.jpg';
$thumbPath = 'pfad/zum/thumbnail/100x100/bild.jpg';
 
// Zielbreite und -höhe festlegen
$width = 100;
$height = 100;
 
// Originalbild laden und Größen entnehmen
$img = imagecreatefromjpeg($imagePath); // oder: imagecreatefrompng(), imagecreatefromgif()
$originalWidth = imagesx($img);
$originalHeight = imagesy($img);
 
// Rahmengröße initialisieren
$frameWidth = $width;
$frameHeight = $height;
 
// Das Thumbnail sollte nicht größer sein als das Original
if($height > $originalHeight && $width > $originalWidth)
{
	$width = $originalWidth;
	$height = $originalHeight;
}
 
// Hier wird die eigentliche Thumbnailgröße dem Seitenverhätlnis angepasst
if($originalWidth / $originalHeight >= $frameWidth / $frameHeight)
{
	$height = round(($width / $originalWidth) * $originalHeight);
}
else
{
	$width = round(($height / $originalHeight) * $originalWidth);
}
// Position des Thumbnails berechnen (Mitte)
$x = round(($frameWidth - $width) / 2);
$y = round(($frameHeight - $height) / 2);
 
// Ausgabebild erstellen mit Rahmengröße
$out = imagecreatetruecolor($frameWidth, $frameHeight);
 
// Hintergrundfarbe (hier weiß)
$bgcolor = imagecolorallocate($out, 255, 255, 255);
imagefill($out, 0, 0, $bgcolor);
 
// Verkleinertes Originalbild in das neue Bild einfügen
imagecopyresampled($out, $img, $x, $y, 0, 0, $width, $height, $originalWidth, $originalHeight);
// Als JPEG abspeichern, Qualität 90%
imagejpeg($out, $thumbPath, 90);
 
// Aufräumen...
imagedestroy($img);
imagedestroy($out);

Eigentlich sollte der Code selbsterklärend sein, ich möchte an dieser Stelle trotzdem kurz darauf eingehen.
Wir errechnen zunächst die Breite und Höhe des Thumbnails für das korrekte Seitenverhältnis und erstellen dann ein „Rahmen“-Bild in das wir unser verkleinertes Bild einfügen. So wird das Thumbnail immer 100×100 Pixel groß, nur bleibt halt ein Teil weiß, um das Seitenverhältnis auszugleichen.