From 1c51034031fa8216884fa31d5b864fc9b6824175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Doubravsk=C3=BD?= Date: Thu, 30 Jul 2026 16:44:54 +0200 Subject: [PATCH] =?UTF-8?q?Opravit=20nezobrazov=C3=A1n=C3=AD=20obr=C3=A1zk?= =?UTF-8?q?=C5=AF=20na=20webu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Payload skládá URL uploadů absolutně podle serverURL. next/image to vyhodnotí jako externí zdroj a bez images.remotePatterns odmítne s HTTP 400 "url parameter is not allowed" — samotný soubor se přitom servíruje správně, takže se to projevilo až s nahraným obrázkem. Do next/image proto posíláme jen cestu (helper cestaKSouboru). Soubor leží na stejném originu jako web, takže je to korektní, a navíc na tom nezávisí doména: remotePatterns se zapékají při buildu, ale tentýž image běží na stagingu i v produkci pod jiným jménem. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 5 +++++ src/app/(frontend)/nabidka/[slug]/page.tsx | 4 ++-- src/app/(frontend)/page.tsx | 4 ++-- src/lib/format.ts | 17 +++++++++++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0632dfb..426288e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,3 +27,8 @@ verzování [sémantické](https://semver.org/lang/cs/). - Adresáře `data/` a `media/` jsou v repu přes `.gitkeep`. SQLite si adresář nevytvoří, takže po čerstvém `git clone` padaly testy i `payload migrate` na `SQLITE_CANTOPEN` (kód 14) — projevilo se to až v CI. +- Obrázky se na webu nezobrazovaly. Payload vrací absolutní URL podle + `serverURL`, což `next/image` bere jako cizí zdroj a bez `remotePatterns` + odmítne s HTTP 400 „url parameter is not allowed". Do `next/image` se nově + posílá jen cesta — soubor leží na stejném originu a stejný image tak funguje + na stagingu i v produkci, kde se domény liší. diff --git a/src/app/(frontend)/nabidka/[slug]/page.tsx b/src/app/(frontend)/nabidka/[slug]/page.tsx index 072e242..5d0823d 100644 --- a/src/app/(frontend)/nabidka/[slug]/page.tsx +++ b/src/app/(frontend)/nabidka/[slug]/page.tsx @@ -6,7 +6,7 @@ import React from 'react' import config from '@/payload.config' import type { Media, Product } from '@/payload-types' -import { formatujCenu, popisStavu } from '@/lib/format' +import { cestaKSouboru, formatujCenu, popisStavu } from '@/lib/format' import '../../styles.css' export const dynamic = 'force-dynamic' @@ -59,7 +59,7 @@ export default async function DetailPolozky({ params }: Props) {