/** * Tekst alternatywny zdjęcia produktu. * * Stan zastany (18.08.2026), który ta funkcja porządkuje: * - `produkty.image_alt` było wypełnione w 0 z 2887 aktywnych produktów I NIE BYŁO * CZYTANE przez żaden widok — wszystkie szablony podstawiały `produkty.nazwa`. * Wpisanie czegokolwiek do tej kolumny nie miało więc żadnego efektu na stronie. * - `zdjecia.alt` jest wypełnione w ~79%, ale spora część to śmieci wygenerowane * z nazwy pliku ("5907653139567 - zdjęcie 1 (Glowne)"), które dla SEO są gorsze * niż nazwa produktu. * * Kolejność: ręczny alt produktu → sensowny alt zdjęcia → nazwa produktu (+ marka). * Dla kolejnych zdjęć w galerii dokładamy numer, żeby alty nie były identyczne. * * @param array $product Produkt (wymaga `nazwa`, opcjonalnie `image_alt`, `producent_nazwa`) * @param string|null $imageAlt Alt z tabeli `zdjecia` dla konkretnego zdjęcia * @param int $index Pozycja zdjęcia w galerii (0 = główne) */ function getProductImageAlt(array $product, ?string $imageAlt = null, int $index = 0): string { $productAlt = trim((string) ($product['image_alt'] ?? '')); if ($productAlt !== '' && $index === 0) { return $productAlt; } $galleryAlt = trim((string) ($imageAlt ?? '')); if ($galleryAlt !== '' && !isJunkImageAlt($galleryAlt)) { return $galleryAlt; } $name = trim((string) ($product['nazwa'] ?? '')); $brand = trim((string) ($product['producent_nazwa'] ?? $product['brand'] ?? '')); // Marka doklejana tylko, gdy nazwa jej nie zawiera — inaczej "Samura Samura ..." if ($brand !== '' && stripos($name, $brand) === false) { $name = $brand . ' ' . $name; } return $index > 0 ? $name . ' — zdjęcie ' . ($index + 1) : $name; } /** * Czy alt zdjęcia to automat z nazwy pliku, a nie opis? * * Łapie wzorce typu "5907653139567 - zdjęcie 1 (Glowne)" albo "tg0831 - zdjęcie 2", * czyli kod produktu plus generyczny sufiks. Kryterium: po odcięciu sufiksu * nie zostaje ani jedno słowo złożone z co najmniej trzech liter. */ function isJunkImageAlt(string $alt): bool { $core = preg_replace('/\s*[-–—]\s*zdjęcie\s*\d+.*$/iu', '', $alt); $core = trim((string) $core); if ($core === '') { return true; } return !preg_match('/\p{L}{3,}/u', $core); }
Bądź na bieżąco z promocjami i nowościami