- Image widths are 480, 720, 960, 1280, 1600 and 2400. A phone needed 721 pixels and got 960. Existing images receive the new steps from a task; stored pages pick them up at render time, so no document is rewritten. Mobile backgrounds use 720. - A variant served once is mirrored to public/media, and a rewrite rule lets the web server deliver it from there. var/media stays the source. - The hero preload follows the image each device really shows. - The post navigation reads the order and then two posts instead of up to 500 documents. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
50 lines
1.3 KiB
PHP
50 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Ops\Tasks;
|
|
|
|
use App\Content\MediaLibrary;
|
|
|
|
/**
|
|
* Reicht vorhandenen Bildern Größen nach, die es bei ihrem Upload noch nicht gab.
|
|
*
|
|
* Mit 1.42.0 kamen die Stufen 720 und 1280 dazu. Neue Uploads bekommen sie sofort; für alles,
|
|
* was schon in der Mediathek liegt, rechnet diese Aufgabe sie portionsweise aus der größten
|
|
* vorhandenen Variante. Ist nichts mehr offen, kostet ein Lauf eine Abfrage.
|
|
*/
|
|
final class ImageVariantsTask implements Task
|
|
{
|
|
public function __construct(private MediaLibrary $media)
|
|
{
|
|
}
|
|
|
|
public function name(): string
|
|
{
|
|
return 'image-variants';
|
|
}
|
|
|
|
public function label(): string
|
|
{
|
|
return 'Bildgrößen ergänzen';
|
|
}
|
|
|
|
public function explanation(): string
|
|
{
|
|
return 'Ohne sie laden Telefone bei älteren Bildern eine größere Fassung als nötig. Angezeigt wird trotzdem alles.';
|
|
}
|
|
|
|
public function interval(): int
|
|
{
|
|
return 900;
|
|
}
|
|
|
|
public function run(): string
|
|
{
|
|
$ergebnis = $this->media->fillVariants();
|
|
if (0 === $ergebnis['done'] && 0 === $ergebnis['left']) {
|
|
return 'Alle Bilder haben alle Größen.';
|
|
}
|
|
|
|
return sprintf('%d Bild(er) ergänzt, %d warten auf den nächsten Lauf.', $ergebnis['done'], $ergebnis['left']);
|
|
}
|
|
}
|