Mit JavaScript zu einem Anker springen
Mit dem folgenden Code kann man mittels JavaScript zu einem bestimmten Anker-Punkt auf der Seite springen:
window.location.hash = "Ankername"; |
Getter- und Setter-Methoden generieren
Was tun, wenn man eine Klasse mit mehreren Dutzend Member-Variablen hat und keine Lust dazu für jede einzelne Getter- und Setter-Methoden zu schreiben? Natürlich automatisieren wir das Verfahren. Ich habe dazu mal 3 Möglichkeiten rausgesucht. Da ist bestimmt für jeden was dabei.
Möglichkeit 1: Zend Studio
Wer eine lizensierte Version vom Zend Studio hat, kann sich hier die Getter und Setter ganz einfach über den Menüpunkt Source und Generate Getters and setters… erstellen lassen.
Möglichkeit 2: Magische Methode __call()
Wem das Zend Studio (verständlicherweise) zu teuer ist, der kann Getter- und Setter-Methoden auch über __call() abfangen und bearbeiten.
Einige halten dies jedoch für unsaubere Programmierung (Ich gehöre nicht dazu).
Möglichkeit 3: Ein eigenes Skript schreiben
Immer wenn es eine Aufgabe gibt, die sich häufig wiederholt, macht es sinn ein Skript dafür zu schreiben, das uns die Arbeit abnimmt. Wie oft ist es mir schon passiert, dass ich gesagt habe “das mach ich kurz selbst” und am Ende wäre es viel schneller gewesen ein Skript für die Aufgabe zu schreiben. Für Getter- und Setter-Methoden eigenet sich enebfalls ein kleines Skript. Meins sieht in etwa so aus:
class MeineKlasse { protected $foo; protected $bar; protected $fooBar; } echo '<code>'; $class = new ReflectionClass(new MeineKlasse()); $properties = $class->getProperties(); $phpCode = ''; foreach($properties as $property) { $name = $property->getName(); if(strpos($name, '_') === 0) { $name = substr($name, 1); } $func = ucfirst($name); $phpCode .= "\n\npublic function get{$func}()\n"; $phpCode .= "{\n"; $phpCode .= "\treturn \$this->{$name};\n"; $phpCode .= "}\n\n"; $phpCode .= "public function set{$func}(\${$name})\n"; $phpCode .= "{\n"; $phpCode .= "\t\$this->{$name} = \${$name};\n"; $phpCode .= "}"; } echo $phpCode; echo '</code>'; |
Das Skript nimmt sich die Klasse und lässt sich alle Member-Variablen geben. Anschließend nehme ich den Variablennamen und lasse mir daraus PHP-Code generieren.
Thumbnail Generierung > Seitenverhältnis > PHP
Was tun, wenn man einheitlich große Thumbnails generieren will, die Originalbilder aber unterschiedliche Formate haben? Irgendwie muss das Seitenverhältnis der Bilder automatisch angepasst wird. 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 es aber trotzdem kurz nochmal erklären.
Wir errechnen also erst 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.