Beiträge getaggt mit php

TYPO3 Vhs Sprachnavigation Standardsprache fehlt

Ich selbst nutze die Extension Vhs sehr selten, betreue gelegentlich Projekte, die es einsetzen und komme daher nicht drumrum, mich damit zu beschäftigen.

Folgendes Setup: eine Seite mit drei Sprachen – Deutsch [0], Englisch [1] und Polnisch [2]. Die Zahl in Klammern ist die ID der Sprache im System. Wenn ich in Deutsch bin, dann möchte ich zur Auswahl Englisch und Polnisch, auf der englischen Seite Deutsch und Polnisch und auf der polnischen eben Deutsch und Englisch.

So kann man in Flux die Sprachnavigation einsetzen:

<v:page.languageMenu layout="name" />

Wenn man die Auswahl der Sprachen einschränken möchte, dann kann man einen weiteren Parameter mitgeben und darin eine kommaseparierte Liste mit Sprachen.

<v:page.languageMenu layout="name" languages="0,1,2" />

Meiner Logik nach sollte die Sprachauswahl bleiben, wie sie ist. Stattdessen verschwindet die Standardsprache aus der Navigation. Warum das?
In vhs/Classes/ViewHelpers/Page/LanguageMenuViewHelper.php Zeile 292ff.

$limitLanguages = static::arrayFromArrayOrTraversableOrCSVStatic($this->arguments['languages'] ?? []);
$limitLanguages = array_filter($limitLanguages);

Da wird der Wert aus dem Argument mit array_filter verarbeitet. Wird array_filter kein Callback übergeben, dann entfernt es alle leeren Elemente aus dem Array gem. der Definition von empty. Und empty sieht 0 auch als leer an. Damit wird aus der Liste 0,1,2 die 0 entfernt.

Und dann ist da ja noch das Problem mit dem ausblenden der aktiven Sprache. Da wäre ein Parameter sinnvoll gewesen. Die Lösung, um immer die nicht aktiven Sprachen anzuzeigen ist somit ein manuelles Rendering der Sprachnavigation, ohne die Sprachliste einzuschränken, ist somit diese:

<v:page.languageMenu as="languageMenu" flagImageType="png" layout="name">
    <ul>
        <f:for each="{languageMenu}" as="language">
            <f:if condition="{language.current} != 1">
                <li>
                    <a href="{language.url}">{language.label}</a>
                </li>
            </f:if>
        </f:for>
    </ul>
</v:page.languageMenu>

Tags: , ,

Geschrieben in TYPO3, TYPO3 v10 | Kommentare deaktiviert für TYPO3 Vhs Sprachnavigation Standardsprache fehlt

Bilder mit PHP gemäß EXIF-Daten drehen

Nachdem ich ein Gästebuch-Plugin für WordPress implementiert hatte, bei dem Besucher Bilder hochladen können, ist aufgefallen, dass Bilder gedreht im Gästebuch dargestellt werden, was man anhand des Motivs erkennen kann. Sobald man das Bild separat aufruft, werden sie im Browser zwar richtig rum dargestellt, sind aber verzerrt. Auf dem iPhone werden die Bilder auch im Gästebuch in der „korrekten“ Ausrichtung dargestellt.

Wenn die Bilder mit dem iPhone gemacht werden (gefühlt betrifft das heutzutage ca. 80% aller Bilder), wird in den EXIF-Daten des Bildes die Ausrichtung gespeichert. Der iPhone-Besitzer bekommt nichts davon mit, lädt das Bild ins Gästebuch hoch und wundert sich dann, warum es falsch ist.

Als Lösung habe ich mich entschlossen, die Bilder beim Upload zu drehen (und zu skalieren). Mit der Funktion exif_read_data kann man die EXIF-Daten entsprechend auslesen. Das Bild wird auf maximal 800 Pixel Breite oder Höhe skaliert.

$image = imagecreatefromstring(file_get_contents($_FILES['picture']['tmp_name']));
$exif = exif_read_data($_FILES['picture']['tmp_name']);
if(!empty($exif['Orientation'])) {
	switch($exif['Orientation']) {
		case 8:
			$image = imagerotate($image,90,0);
			break;
		case 3:
			$image = imagerotate($image,180,0);
			break;
		case 6:
			$image = imagerotate($image,-90,0);
			break;
	}
}
 
// scale image
$ratio = imagesx($image)/imagesy($image); // width/height
if($ratio > 1) {
	$width = 800;
	$height = round(800/$ratio);
} else {
	$width = round(800*$ratio);
	$height = 800;
}
$scaled = imagecreatetruecolor($width, $height);
imagecopyresampled($scaled, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image));
 
imagejpeg($scaled, $targetFilePath);
imagedestroy($image);
imagedestroy($scaled);

Tags:

Geschrieben in default | Kommentare deaktiviert für Bilder mit PHP gemäß EXIF-Daten drehen

DateTime in PHP: Timestamp und Konstrukor

Klasse DateTime – ist neu in PHP 5.2. Hat in PHP 5.3. eine neue Funktion dazu bekommen: setTimestamp(), damit man einen Unix-Timestamp übergeben kann.
Wenn man ein in PHP 5.3 erstelltest Projekt mit diesem Aufruf nun auf einen Server mit PHP 5.2. spielt, dann knallts. Nun steht als Zusatz in der Funktion getTimestamp() folgendes:

Passing a Unix timestamp to DateTime::__construct() is an alternative when using PHP 5.2.

Und die Dokumentation zu __construct:

public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Es wird als ein String erwartet als erster Parameter. Wenn man nun unter PHP 5.3. dem Konstruktor einen Timestamp übergibt, dann Error. Alles klar?

Tags:

Geschrieben in default | Kommentare deaktiviert für DateTime in PHP: Timestamp und Konstrukor