URL-AddOn: PDF-Endung zu URL hinzufügen
Quell-ID: GitHub Discussion #28
Use Case
Mit dem URL-AddOn (url2) sollen Downloads aus YForm ausgespielt werden. Browser wie Chrome und Edge erkennen PDFs nicht korrekt, wenn die URL keine .pdf-Endung hat.
Verwendete AddOns
- URL (url2)
- YForm
Problemstellung
Die generierten URLs enthalten keinen Punkt und keine Dateiendung. Die integrierten PDF-Viewer der Browser funktionieren dadurch nicht korrekt.
Lösung
Über den Extension Point URL_PRE_SAVE kann die URL vor dem Speichern angepasst werden:
<?php
// In boot.php des project-AddOns
rex_extension::register('URL_PRE_SAVE', static function (rex_extension_point $ep) {
$params = $ep->getParams();
$url = $params['object'];
$profileId = $params['profile_id'];
// Nur für Profil 11 (PDF-Downloads) anwenden
if ($profileId == 11) {
$newUrl = new \Url\Url($url->__toString() . '.pdf');
return $newUrl;
}
return $params['object'];
});
Parameter des Extension Points
| Parameter | Beschreibung |
|---|---|
object |
Das Url-Objekt |
article_id |
Die Artikel-ID |
clang_id |
Die Sprach-ID |
profile_id |
Die Profil-ID aus dem URL-AddOn |
Besserer Ansatz
Dynamische Erkennung des Dateityps
<?php
rex_extension::register('URL_PRE_SAVE', static function (rex_extension_point $ep) {
$params = $ep->getParams();
$url = $params['object'];
$profileId = $params['profile_id'];
// Profile, die Dateiendungen benötigen
$fileProfiles = [
11 => 'pdf', // PDF-Downloads
12 => 'xml', // XML-Feeds
13 => 'json', // JSON-Endpoints
];
if (isset($fileProfiles[$profileId])) {
$extension = $fileProfiles[$profileId];
$urlString = $url->__toString();
// Nur hinzufügen, wenn nicht bereits vorhanden
if (!str_ends_with($urlString, '.' . $extension)) {
return new \Url\Url($urlString . '.' . $extension);
}
}
return $params['object'];
});
Mit Content-Type-Header (Alternative)
Statt die URL anzupassen, kann auch der Content-Type korrekt gesetzt werden:
<?php
// Im Ausgabe-Modul oder Controller
if ($isPdfDownload) {
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
readfile($pdfPath);
exit;
}
URL-Profil mit Suffix konfigurieren
Im URL-AddOn kann das Profil direkt mit einem Suffix konfiguriert werden:
- Im Backend zu “URL” > “Profile” navigieren
- Das entsprechende Profil bearbeiten
- Im Feld “Suffix”
.pdfeintragen
Diese Variante ist oft einfacher als die programmtische Lösung.
Hinweis zur URL-Struktur
Bei der Verwendung von Dateiendungen in URLs sollte die SEO-Perspektive berücksichtigt werden:
/downloads/handbuch.pdf– Klar als PDF erkennbar/downloads/handbuch/– Saubere URL-Struktur
Für Downloads empfiehlt sich die Variante mit Dateiendung, für reguläre Seiten die saubere URL ohne Endung.