init commit for iPAL-kit plugin
This commit is contained in:
+17
-11
@@ -67,7 +67,6 @@ const route = await resolveRoute({
|
||||
segments: ['artykuly', 'moj-post'],
|
||||
page: 1, // z ?page=
|
||||
content: contentConfig,
|
||||
withEntries: false, // true → dociąga wpisy do archiwum (patrz niżej)
|
||||
})
|
||||
// route.type: 'home' | 'page' | 'archive' | 'entry' | (null gdy 404)
|
||||
```
|
||||
@@ -96,7 +95,7 @@ import { createContentHelpers } from 'ipal-kit'
|
||||
import config from '@/payload.config'
|
||||
import { contentConfig } from '@/content.config'
|
||||
|
||||
export const { getCachedPayload, getConfiguredLocales, getSettings, resolveRoute } =
|
||||
export const { getCachedPayload, getConfiguredLocales, getSettings, resolveRoute, getEntries } =
|
||||
createContentHelpers({ config, content: contentConfig })
|
||||
```
|
||||
|
||||
@@ -105,23 +104,30 @@ fabryce i jest współdzielona — dlatego to fabryka, nie luźne funkcje. Bez t
|
||||
`cache()` nie dedupikowałby między helperami, a Next woła generateMetadata i
|
||||
komponent strony osobno.
|
||||
|
||||
`resolveRoute` z fabryki przyjmuje `(locale, segments, page, withEntries?)`.
|
||||
`resolveRoute` z fabryki przyjmuje `(locale, segments, page)` — rozstrzyga
|
||||
trasę. Pobranie wpisów to osobna funkcja `getEntries` (patrz niżej), bo
|
||||
routing i pobieranie danych to dwie różne odpowiedzialności.
|
||||
|
||||
## withEntries — wpisy tylko gdy trzeba
|
||||
## Routing i pobieranie — osobno
|
||||
|
||||
Archiwum potrzebuje listy wpisów; metadane nie. `withEntries` rozstrzyga:
|
||||
Archiwum potrzebuje listy wpisów; metadane nie. Rozstrzyganie trasy i pobieranie
|
||||
wpisów to dwie funkcje, składane jawnie tam, gdzie trzeba obu:
|
||||
|
||||
```ts
|
||||
// generateMetadata — bez wpisów (nie płaci za zapytanie)
|
||||
// generateMetadata — sama trasa (nie płaci za zapytanie o wpisy)
|
||||
const route = await resolveRoute(locale, slug, page)
|
||||
|
||||
// komponent strony — z wpisami
|
||||
const route = await resolveRoute(locale, slug, page, true)
|
||||
// route.entries: { docs, page, totalPages, hasPrevPage, hasNextPage, ... }
|
||||
// komponent strony — trasa, a potem wpisy, jeśli to archiwum
|
||||
const route = await resolveRoute(locale, slug, page)
|
||||
const entries = route?.type === 'archive'
|
||||
? await getEntries(route.collection, locale, route.page, route.perPage)
|
||||
: null
|
||||
// entries: { docs, page, totalPages, hasPrevPage, hasNextPage, ... }
|
||||
```
|
||||
|
||||
Metadane i strona wołają z różnymi argumentami, więc `cache()` traktuje je jako
|
||||
osobne wywołania — i słusznie, bo metadane wpisów nie potrzebują.
|
||||
`resolveRoute` zwraca `collection` i `perPage` — czyli CO i ILE pobrać — ale
|
||||
pobierania nie robi. Dzięki temu zmiana sortowania czy filtrowania listingu nie
|
||||
dotyka reguł routingu, a metadane nie pobierają wpisów, których i tak nie użyją.
|
||||
|
||||
## Listing
|
||||
|
||||
|
||||
Reference in New Issue
Block a user