profound-logoProfound CMS
⌘K
Admin
Theme
DocsTutorialBlogPhilosophy
DocsTutorialBlogPhilosophy

Hybrid

Collection of Pages with ComponentsTypes of ComponentsSetup server sent events (SSE) content refetchAdminipaneeli puhverserveri seadistamineCEL Scripting in Template BuilderProject ScaffoldingMedia Library

Headless

KiirkÀivitusSplit Screen JSON Component Builder with LLMComponent Zod Pull

RESTi API

REST API OverviewgetConnect your websitegetMarsruutide hankiminegetGET /routegetGET /blocksgetGET /blocks/with-cel-cachegetGET /blocks/generatedgetGET /componentsgetGET /components/{name}getGET /dataset/{schema_name}getGET /content-changes (SSE)patchPATCH /dataset/{schema_name}postPOST /translationpatchPATCH /translationsgetGET /usagepostPOST /csvpatchPATCH /csv
All Systems Operational
Powered Byprofound-logo
Theme

CEL Scripting in Template Builder

Praktiline juhend CEL-avaldiste kirjutamiseks CMS-is.

Praktiline juhend CEL-avaldiste kirjutamiseks CMS-is.


Kuidas CEL töötab

CEL (Common Expression Language ehk levinud avaldiste keel) on meie CMS-i sisseehitatud kerge skriptikeel. See vĂ”imaldab kirjutada dĂŒnaamilisi avaldisi, mis hangivad andmeid dokumentidest, loevad URL-i parameetreid ja arvutavad vÀÀrtusi kĂ€igu pealt.

CEL-skripti kÀivitamisel toimub jÀrgmine:

Sinu skript                    Mootor                         Tulemus
    |                              |                              |
    v                              v                              v
documents.get("article", "intro") --> Hangib andmebaasist --> { headline: "Welcome", body: "..." }
         .headline                --> Eraldab vÀlja        --> "Welcome"

MĂ”tle CEL-ist kui kirjutuskaitstud pĂ€ringukeeleks. See ei saa andmebaasis midagi muuta – see ainult loeb andmeid ja tagastab arvutatud tulemuse. SeetĂ”ttu on seda turvaline kasutada kĂ”ikjal CMS-is.


PÔhikomponendid

Igal CEL-avaldise kÀsutuses on kolm objekti:

ObjektMis see onNĂ€ide
documentsHangib CMS-ist mis tahes dokumendidocuments.get("country", "us")
metaPraeguse pÀringu teave (lokaat, URL-i parameetrid)meta.locale, meta.params.slug
schemaPraeguse dokumendi vÀljade mÀÀratlusedschema.fields

Viitamine iseendale objektiga doc

Dokumendiredaktoris CEL-avaldiseid kirjutades saad praeguse dokumendi vÀljade vÀÀrtustele ligi objekti doc kaudu. See vÔimaldab luua arvutatud vÀlju ja vÀljadevahelisi viiteid.

// Praeguse dokumendi hinnavÀlja kasutamine
doc.price

// Praeguse dokumendi vÀljade pÔhjal kogusumma arvutamine
doc.price * doc.quantity

// Tingimus praeguse dokumendi oleku pÔhjal
doc.status == "published" ? doc.title : "Draft: " + doc.title

Objekt doc sisaldab kÔiki redigeeritava dokumendi vÀljade vÀÀrtusi. See on kasulik jÀrgmisteks toiminguteks:

  • arvutatud vĂ€ljad (nt doc.price * doc.quantity)
  • dokumendi olekul pĂ”hinev tingimuslik kuvamisloogika
  • valideerimislaadsed avaldised

Dokumentide hankimine

CEL-i kÔige vÔimsam funktsioon on dokumentide hankimine CMS-i mis tahes kohast.

Ühe dokumendi hankimine

SĂŒntaks: documents.get(schemaName, identifier)

Oletame, et sul on article-dokument identifikaatoriga "welcome-post":

// CMS-is salvestatud kujul: article / welcome-post
{
  "headline": "Welcome to Our Platform",
  "author": "Sarah Chen",
  "body": "We're excited to announce...",
  "tags": ["announcement", "news"]
}

Kogu dokumendi hankimiseks:

documents.get("article", "welcome-post")

Tagastab:

{
  "headline": "Welcome to Our Platform",
  "author": "Sarah Chen",
  "body": "We're excited to announce...",
  "tags": ["announcement", "news"]
}

Ainult pealkirja hankimiseks:

documents.get("article", "welcome-post").headline

Tagastab: "Welcome to Our Platform"

Autori hankimiseks:

documents.get("article", "welcome-post").author

Tagastab: "Sarah Chen"


URL-i parameetrite kasutamine

Kui lehel on dĂŒnaamilised marsruudid (nt /articles/[slug]), saad URL-i parameetri saamiseks ja Ă”ige dokumendi hankimiseks kasutada meta.params-i.

Kui keegi kĂŒlastab aadressi /articles/welcome-post:

documents.get("article", meta.params.slug).headline

Tagastab: "Welcome to Our Platform"

Nii luuakse dĂŒnaamilisi lehti – sama CEL-skript töötab kĂ”igi artiklite puhul, kasutades lihtsalt URL-is olevat slug'i.


Mitme dokumendi hankimine

SĂŒntaks: documents.find(schemaName) vĂ”i documents.find(schemaName, filter)

// KÔigi riikide hankimine
documents.find("country")

Tagastab:

[
  { "code": "us", "name": "United States", "flag": "US" },
  { "code": "sa", "name": "Saudi Arabia", "flag": "SA" },
  { "code": "gb", "name": "United Kingdom", "flag": "GB" }
]
// Filtriga riikide hankimine
documents.find("country", { "where": { "code": "us" } })

Tagastab:

[
  { "code": "us", "name": "United States", "flag": "US" }
]

TÔlked

CEL toetab tÔlgitud dokumendisisu hankimist kahel viisil: lokaa­dil pÔhinev automaatne tÔlge ja sÔnaselge tÔlkeotsing.

Automaatne tÔlge meta.locale kaudu

Kui meta.locale on mÀÀratud (nĂ€iteks marsruudi parameetrite vĂ”i kasutaja eelistuste kaudu), ĂŒhendab documents.get() automaatselt tĂ”lgitud sisu:

// Kui meta.locale on "fr", tagastab baasdokumendiga ĂŒhendatud prantsuskeelse tĂ”lke
documents.get("greeting", "welcome").headline

Kuidas see töötab:

  1. Hangitakse baasdokumendi sisu
  2. Kui meta.locale ei ole "en" ega "en-US", otsitakse tÔlget tabelist translations
  3. TĂ”lgitud vĂ€ljad ĂŒhendatakse baassisuga: { ...baseContent, ...translatedContent }

See tĂ€hendab, et tĂ”lgitud vĂ€ljad kirjutavad baasvĂ€ljad ĂŒle, tĂ”lkimata vĂ€ljad aga langevad tagasi baasdokumendi vÀÀrtustele.

SÔnaselge tÔlge funktsiooniga documents.translated()

Kui on vaja hankida kindel tÔlge sÔltumata praegusest lokaadist:

SĂŒntaks: documents.translated(schemaName, identifier, locale)

// Hispaaniakeelse tÔlke hankimine
documents.translated("greeting", "welcome", "es").headline

// URL-i parameetri pÔhjal tÔlke hankimine
documents.translated("product", meta.params.id, meta.params.lang).description

// TÔlgete vÔrdlemine
documents.translated("article", "intro", "en").title + " / " + documents.translated("article", "intro", "fr").title

TÔlkenÀide

TÔlgetega tervitusdokumendid:

// Baasdokument: greeting / welcome
{ "headline": "Welcome", "subheadline": "Welcome to our platform" }

// TÔlge (keel: "fr")
{ "headline": "Bienvenue", "subheadline": "Bienvenue sur notre plateforme" }

// TÔlge (keel: "es")
{ "headline": "Bienvenido", "subheadline": "Bienvenido a nuestra plataforma" }

CEL-skriptid:

// meta.locale = "fr"
documents.get("greeting", "welcome").headline
// Tagastab: "Bienvenue"

// SÔnaselge hispaaniakeelne tÔlge
documents.translated("greeting", "welcome", "es").headline
// Tagastab: "Bienvenido"

// Varumuster puuduvate tÔlgete korral
documents.translated("greeting", "welcome", meta.params.lang) != null
  ? documents.translated("greeting", "welcome", meta.params.lang).headline
  : documents.get("greeting", "welcome").headline

Praktilised nÀited

NÀide 1: kangelÔigu pealkiri teisest dokumendist

Sul on hero-block, mis peab kuvama article-dokumendist hangitud pealkirja.

Sinu artiklidokument (identifikaator: "homepage-hero"):

{
  "headline": "Build Faster, Ship Smarter",
  "subheadline": "The modern CMS for developers"
}

KangelÔigu pealkirjavÀlja CEL-skript:

documents.get("article", "homepage-hero").headline

Tulemus: kangelÔik kuvab "Build Faster, Ship Smarter"


NÀide 2: riigi nimi koodi pÔhjal

LoĐŸĐ± lehte aadressil /countries/[code] ja soovid kuvada riigi tĂ€ieliku nime.

Sinu riigidokumendid:

// country / us
{ "code": "us", "name": "United States", "flag": "US", "languages": ["en", "es"] }

// country / sa
{ "code": "sa", "name": "Saudi Arabia", "flag": "SA", "languages": ["ar", "en"] }

CEL-skript:

documents.get("country", meta.params.code).name

Kui keegi kĂŒlastab aadressi /countries/us:

  • meta.params.code = "us"
  • Tulemus: "United States"

Kui keegi kĂŒlastab aadressi /countries/sa:

  • meta.params.code = "sa"
  • Tulemus: "Saudi Arabia"

NÀide 3: lokaadipÔhine tingimuslik sisu

Kuva kasutaja lokaadi pÔhjal erinevaid pealkirju.

meta.locale == "ar-SA" ? "Welcome, everyone" : "Welcome"

Kui lokaat on "ar-SA": tagastab "Welcome, everyone" Kui lokaat on midagi muud: tagastab "Welcome"


NĂ€ide 4: aheldatud dokumendiotsingud

Sinu article-dokumendil on vÀli countryCode ja soovid saada riigi tÀieliku nime.

Artiklidokument:

{ "headline": "News from the US", "countryCode": "us" }

CEL-skript:

documents.get("country", documents.get("article", "us-news").countryCode).name

Toimub jÀrgmine:

  1. documents.get("article", "us-news") tagastab { "headline": "News from the US", "countryCode": "us" }
  2. .countryCode eraldab vÀÀrtuse "us"
  3. documents.get("country", "us") tagastab { "code": "us", "name": "United States", ... }
  4. .name eraldab vÀÀrtuse "United States"

Tulemus: "United States"


NÀide 5: varuvÀÀrtused

Kui dokumenti ei pruugi olemas olla, saad mÀÀrata varuvÀÀrtuse:

documents.get("article", meta.params.slug) != null
  ? documents.get("article", meta.params.slug).headline
  : "Article Not Found"

VÔi kontrolli, kas konkreetne vÀli on olemas:

documents.get("article", "intro").author != null
  ? documents.get("article", "intro").author
  : "Unknown Author"

NÀide 6: loenditega töötamine

Sinu artiklil on sildid ja soovid kontrollida, kas konkreetne silt on olemas:

"featured" in documents.get("article", "welcome-post").tags

Tagastab: true, kui artiklil on silt "featured"

Esimese sildi hankimine:

documents.get("article", "welcome-post").tags[0]

Tagastab: "announcement" (esimene silt)

Siltide loendamine:

size(documents.get("article", "welcome-post").tags)

Tagastab: 2 (siltide arv)


Parameetrilised marsruudid ja meta.params

Parameetrilised marsruudid on dĂŒnaamiliste lokaliseeritud lehtede loomise vĂ”ti. Kui mÀÀrad marsruudimustri, nĂ€iteks /{lang}/landingPage, eraldab CMS URL-ist parameetrid ja teeb need kĂ€ttesaadavaks meta.params kaudu.

Kuidas marsruudi parameetrid töötavad

Marsruudimustri mÀÀratlus: Marsruudid kasutavad dĂŒnaamiliste lĂ”ikude mÀÀratlemiseks sĂŒntaksit :paramName vĂ”i {paramName}:

MusterNĂ€idis-URLEraldatud parameetrid
/:lang/landingPage/ko/landingPage{ lang: "ko" }
/{country}/{lang}/products/us/en/products{ country: "us", lang: "en" }
/articles/:slug/articles/welcome-post{ slug: "welcome-post" }

Parameetrite sidumised: Iga marsruudi parameetri saab valideerimiseks siduda dokumendiskeemiga:

{
  "pattern": "/{lang}/landingPage",
  "param_bindings": {
    "lang": "language"
  }
}

See sidumine ĂŒtleb CMS-ile:

  1. eralda URL-ist lÔik lang
  2. valideeri see language-skeemi vastu (otsi dokumenti, mille content.code sobib)
  3. kui vÀÀrtus on sobiv, tee kogu dokument lahendatud parameetrites kÀttesaadavaks

NÀide: keelepÔhine sihtleht

Marsruudi konfiguratsioon:

  • Tee: /{lang}/landingPage
  • Muster: /{lang}/landingPage
  • Parameetri sidumised: { "lang": "language" }

Sinu tervitusdokumendid:

// greeting / ko
{ "code": "ko", "headline": "Welcome", "subheadline": "Welcome to our platform", "ctaText": "Get Started", "ctaUrl": "/ko/get-started" }

// greeting / en
{ "code": "en", "headline": "Welcome", "subheadline": "Welcome to our platform", "ctaText": "Get Started", "ctaUrl": "/en/get-started" }

// greeting / ja
{ "code": "ja", "headline": "Welcome", "subheadline": "Welcome to our platform", "ctaText": "Start", "ctaUrl": "/ja/get-started" }

Lokaliseeritud sisu hankiv CEL-skript:

documents.get("greeting", meta.params.lang).headline

Lahendamise tulemus:

URLmeta.params.langTulemus
/ko/landingPage"ko""Welcome"
/en/landingPage"en""Welcome"
/ja/landingPage"ja""Welcome"

meta.segments – töötlemata URL-i tee

meta.segments pakub töötlemata URL-i teed massiivina. See on kasulik, kui vajad positsioonipÔhist ligipÀÀsu nimega parameetrite asemel.

URL-i teemeta.segments
/articles/tech/ai-news["articles", "tech", "ai-news"]
/ko/landingPage["ko", "landingPage"]
/us/en/products/featured["us", "en", "products", "featured"]
/[]

Millal kasutada meta.segments-i ja millal meta.params-i

KasutusjuhtParim lÀhenemine
Marsruudimustri nimega parameetridmeta.params.lang
PositsioonipÔhine ligipÀÀsmeta.segments[0]
Tee sĂŒgavuse hankiminesize(meta.segments)
Kontroll, kas tee sisaldab lÔiku"admin" in meta.segments

Objekti meta tÀielik viide

Objekt meta sisaldab kogu praeguse pÀringu konteksti:

OmadusTĂŒĂŒpKirjeldus
meta.localestringPraegune lokaadikood (nt "en-US", "ko-KR", "ar-SA")
meta.paramsRecord<string, string>URL-i mustrist eraldatud marsruudiparameetrid
meta.segmentsstring[]Segmentideks jaotatud URL-i tee
meta.docIdstring | nullPraeguse dokumendi UUID (uue dokumendi korral null)
meta.titlestringPraeguse dokumendi pealkiri

meta.locale

Lokaat jÀrgib BCP 47 vormingut (keel-piirkond):

// RTL-keelte kontrollimine
meta.locale == "ar-SA" || meta.locale == "he-IL" ? "rtl" : "ltr"

// Ainult keeleosa hankimine
meta.locale.split("-")[0]  // Pole toetatud – kasuta selle asemel meta.params.lang-i

meta.params

Marsruudiparameetrid on alati stringid. CMS valideerib need enne hindamist seotud skeemide vastu:

// Nimega parameetri kasutamine
meta.params.lang           // "ko"
meta.params.country        // "us"
meta.params.slug           // "welcome-post"

// Parameetri olemasolu kontrollimine
has(meta.params.category)  // true/false

// Kasutamine dokumendi hankimisel
documents.get("greeting", meta.params.lang)
documents.ref("airports").get(meta.params.code)

meta.segments

Töötlemata URL-i segmendid massiivina:

meta.segments[0]           // Esimene segment
meta.segments[1]           // Teine segment
size(meta.segments)        // Segmentide arv
"products" in meta.segments  // Kas tee sisaldab sÔna "products"?

meta.docId

Praeguse dokumendi UUID, mis on kasulik iseendale viitavates skriptides:

meta.docId != null ? "editing" : "creating new"
meta.docId != null ? documents.get("article", meta.docId).status : "draft"

meta.title

Praeguse dokumendi pealkiri:

"Editing: " + meta.title
meta.title.contains("Draft") ? "work in progress" : "published"

documents.ref() – aheldatud otsingud

Kui skeem on teada, kuid identifikaator on dĂŒnaamiline, annab ref() puhtama sĂŒntaksi:

documents.get("airports", meta.params.code).name
documents.ref("airports").get(meta.params.code).name

MĂ”lemad on samavÀÀrsed, kuid ref() muudab dĂŒnaamilise osa selgemaks.


Kiirviide

Dokumentide hankimine

documents.get("schema", "identifier")       // Hangi ĂŒks dokument
documents.get("schema", "id").fieldName     // Hangi konkreetne vÀli
documents.find("schema")                    // Hangi kÔik dokumendid
documents.find("schema", { "where": {...}}) // Filtreeritud pÀring
documents.ref("schema").get(identifier)     // Aheldatud otsing
documents.translated("schema", "id", "fr")  // Hangi mÀÀratud lokaadiga

Konteksti muutujad

meta.locale          // "en-US", "ar-SA" jne
meta.params.xyz      // URL-i parameeter nimega "xyz"
meta.segments        // URL-i tee massiivina
meta.segments[0]     // Tee esimene segment
meta.docId           // Praeguse dokumendi ID (vÔi null)
meta.title           // Praeguse dokumendi pealkiri
doc.fieldName        // Praeguse dokumendi vÀlja vÀÀrtus redaktori kontekstis

Operaatorid

==  !=  <  <=  >  >=
&&  ||  !
condition ? valueIfTrue : valueIfFalse
"value" in listOrMap

Levinud funktsioonid

size(list)                    // Üksuste arv
size(string)                  // Stringi pikkus
"text".startsWith("te")       // true
"text".endsWith("xt")         // true
"text".contains("ex")         // true
has(object.property)          // Kontrolli omaduse olemasolu
hasProperty(obj, "key")       // Kontrolli objekti vÔtme olemasolu

Veateated

Kui midagi lĂ€heb valesti, nĂ€ed ĂŒht jĂ€rgmistest teadetest:

VigaTĂ€hendus
SYNTAX_ERRORSkriptis on trĂŒkiviga (puuduv jutumĂ€rk vĂ”i vigane operaator)
TYPE_ERRORSegad omavahel tĂŒĂŒpe, mida ei saa koos kasutada
RUNTIME_ERRORSkript kÀivitus, kuid sattus probleemi (mÀÀratlemata muutuja)
FETCH_LIMIT_EXCEEDEDHangid liiga palju dokumente (maksimaalselt 50)
TIMEOUTSkripti kÀivitamine vÔttis liiga kaua (maksimaalselt 5 sekundit)
AST_DEPTH_EXCEEDEDAvaldis on liiga sĂŒgavalt pesastatud (maksimaalne sĂŒgavus: 50)
SCRIPT_TOO_LONGSkript ĂŒletab 5000 mĂ€rgi piirangu

Laiendatavus ja tulevased vÔimalused

CEL-i mootor on loodud laiendatavust silmas pidades. Kavandatud tulevikuvÔimalused hÔlmavad jÀrgmist:

Kavandamisel: MCP-serveri integratsioon

mcp.translate(meta.params.text, "en", meta.params.lang)
mcp.analyze(documents.get("article", meta.params.id).body)

Kavandamisel: tehisintellekti vÔimalused

ai.summarize(documents.get("article", meta.params.id).body, 100)
ai.translate(meta.params.text, meta.params.targetLang)
ai.classify(meta.params.input, ["positive", "negative", "neutral"])

Need vĂ”imalused lisatakse registreeritud funktsioonide sĂŒsteemi kaudu, sĂ€ilitades olemasolevate skriptide tagasiĂŒhilduvuse.


NÀpunÀited

  1. Kasuta automaattĂ€itmist – kirjuta documents. vĂ”i meta. ja redaktor kuvab saadaolevad valikud
  2. Alusta lihtsalt – testi esmalt documents.get("schema", "id")-ga ja lisa seejĂ€rel .fieldName
  3. Kontrolli nullvÀÀrtusi – kui dokumenti ei pruugi olla, lisa varuvariant kujul != null ? ... : ...
  4. Ära hangi liiga palju – iga documents.get() vĂ”i documents.find() arvestatakse 50 dokumendi piirangu sisse
  5. Eelista meta.params-i meta.segments-ile – nimega parameetrid on valideeritud ja usaldusvÀÀrsemad
  6. Kasuta valikuliste parameetrite jaoks has()-i – kontrolli enne ligipÀÀsu has(meta.params.category) abil
  7. Kasuta dĂŒnaamiliste identifikaatorite puhul documents.ref()-i – selgem sĂŒntaks, kui skeem on staatiline, kuid identifikaator dĂŒnaamiline
  8. Kasuta iseendale viitamiseks doc.fieldName-i – pÀÀsed arvutatud avaldiste sees ligi praeguse dokumendi vĂ€ljadele

Dokumendilt dokumendile viited

See jaotis kĂ€sitleb tĂ€psemaid mustreid dokumentide ĂŒhendamiseks ja relatsiooniliste sisustruktuuride loomiseks.

PÔhiline viitemuster

Lihtsaim vorm: ĂŒks dokument viitab teisele identifikaatori kaudu.

documents.get("author", documents.get("article", "intro").authorId).name

Aheldatud otsingud funktsiooniga documents.ref()

Kui identifikaator on dĂŒnaamiline:

documents.get("country", documents.get("airport", meta.params.code).countryCode).name
documents.ref("country").get(documents.get("airport", meta.params.code).countryCode).name

Mitmetasandilised viiteahelad

SĂŒgavate seoste loomiseks ahelda mitu otsingut:

documents.get("continent",
  documents.get("region",
    documents.get("country",
      documents.get("airport", meta.params.code).countryCode
    ).regionCode
  ).continentCode
).name

TÔlkega viide

Ühenda dokumendiviited tĂ”lgetega:

documents.translated("country",
  documents.get("airport", meta.params.code).countryCode,
  meta.params.lang
).name

Viitemustrid kasutusjuhtude kaupa

Muster 1: vÔÔrvÔtme otsing

Dokument salvestab teisele dokumendile viitava ID.

{ "title": "Tech Update", "authorId": "author-123", "categoryId": "cat-tech" }
documents.get("author", documents.get("article", meta.params.slug).authorId).name

documents.get("article", meta.params.slug).categoryId != null
  ? documents.get("category", documents.get("article", meta.params.slug).categoryId).name
  : "Uncategorized"

Muster 2: koodipÔhised viited

Dokumendid viitavad ĂŒksteisele tĂ€henduslike koodide, mitte UUID-de kaudu.

{ "code": "JFK", "name": "John F. Kennedy International", "countryCode": "us" }
{ "code": "us", "name": "United States", "currencyCode": "usd" }
{ "code": "usd", "symbol": "$", "name": "US Dollar" }
documents.get("currency",
  documents.get("country",
    documents.get("airport", meta.params.code).countryCode
  ).currencyCode
).symbol

Muster 3: iseendale viitamine doc-kontekstis

Kasuta doc-i arvutatud vÀljade puhul, mis viitavad teistele dokumentidele praeguse dokumendi vÀÀrtuste pÔhjal.

documents.get("category", doc.categoryId).description
documents.get("shipping-rates", doc.originCountry).baseRate * doc.weight

Muster 4: kahesuunalised viited

Kui dokumendid viitavad ĂŒksteisele, ole hankimispiirangute suhtes ettevaatlik.

documents.find("article", { "where": { "authorId": documents.get("article", meta.params.slug).authorId } })

Muster 5: polĂŒmorfsed viited

Kui vÀli vÔib viidata erinevatele skeemidele:

{ "type": "hero", "sourceType": "article", "sourceId": "welcome-post" }
{ "type": "hero", "sourceType": "product", "sourceId": "featured-item" }
documents.get("content-block", "hero-1").sourceType == "article"
  ? documents.get("article", documents.get("content-block", "hero-1").sourceId).headline
  : documents.get("product", documents.get("content-block", "hero-1").sourceId).name

SÔltuvuste jÀlgimine

Iga documents.get(), documents.find() ja documents.ref().get() kÔne registreeritakse vahemÀlu kehtetuks muutmiseks. Kui viidatud dokument muutub, teab CMS, millised CEL-avaldised tuleb uuesti hinnata.

JÀlgitavad sÔltuvused hÔlmavad:

  • get: schema:identifier – konkreetse dokumendi sĂ”ltuvus
  • ref: schema:identifier – sama mis get-i puhul, aheldatud sĂŒntaksi kaudu
  • query: schema:* – skeemitaseme sĂ”ltuvus (mis tahes dokument selles skeemis)

Viidete head tavad

  1. Minimeeri ahela sĂŒgavust – iga tase lisab latentsust ja suurendab hangete arvu
  2. Puhverda vahetulemused – kui vajad sama pesastatud vÀÀrtust kaks korda, hangi vanemdokument ĂŒks kord
  3. Kasuta nullikontrolle – viited vĂ”ivad katkeda, kui dokumendid kustutatakse
  4. Eelista UUID-dele koode – koodid on avaldistes loetavad ja keskkondade vahel stabiilsed
  5. JĂ€lgi hankimispiiranguid – keerukad viiteahelad vĂ”ivad 50 hanke piirini kiiresti jĂ”uda

Lisa A: tÀielik parameetrilise marsruudi nÀide

See juhend loob mitmekeelse sihtlehe, millele pÀÀseb ligi aadressil /{lang}/landingPage.

1. samm: tervitusdokumendi skeemi loomine

Loo CMS-i halduses kohandatud skeem nimega greeting:

{
  "name": "greeting",
  "fields": [
    { "name": "code", "type": "string", "required": true },
    { "name": "headline", "type": "string", "required": true },
    { "name": "subheadline", "type": "string" },
    { "name": "ctaText", "type": "string" },
    { "name": "ctaUrl", "type": "string" }
  ]
}

2. samm: tervitusdokumentide loomine

Loo iga keele jaoks dokument:

Dokument: greeting/ko

{
  "code": "ko",
  "headline": "Welcome",
  "subheadline": "Welcome to our platform",
  "ctaText": "Get Started",
  "ctaUrl": "/ko/get-started"
}

Dokument: greeting/en

{
  "code": "en",
  "headline": "Welcome",
  "subheadline": "Welcome to our platform",
  "ctaText": "Get Started",
  "ctaUrl": "/en/get-started"
}

Dokument: greeting/ja

{
  "code": "ja",
  "headline": "Welcome",
  "subheadline": "Welcome to our platform",
  "ctaText": "Start",
  "ctaUrl": "/ja/get-started"
}

3. samm: lehe loomine

Loo jÀrgmise konfiguratsiooniga leht:

  • Tee/muster: /{lang}/landingPage
  • Olek: aktiivne
  • DĂŒnaamiliste lĂ”ikude vastendused: seo lang komponendiga language

4. samm: CEL-skriptidega plokkide lisamine

Lisa marsruudile kangelÔik, kasutades iga vÀlja jaoks jÀrgmisi CEL-skripte:

PealkirjavÀli:

documents.get("greeting", meta.params.lang).headline

AlapealkirjavÀli:

documents.get("greeting", meta.params.lang).subheadline

CTA teksti vÀli:

documents.get("greeting", meta.params.lang).ctaText

CTA URL-i vÀli:

documents.get("greeting", meta.params.lang).ctaUrl

5. samm: kasutamine Next.js-is

Lisa kĂ”ikehĂ”lmav marsruut. ParametricRoutePage lahendab lehe, eraldab URL-ist meta.params-i, hindab CEL-i sidumised serveri poolel ja renderdab iga ploki registri kaudu – sa ei pea ise meta-konteksti looma ega madala taseme klienti kutsuma.

6. samm: marsruutide testimine

Lokaliseeritud sisu nĂ€gemiseks kĂŒlasta jĂ€rgmisi URL-e:

URLOodatav pealkiri
/ko/landingPage환영
/en/landingPageWelcome
/ja/landingPageă„ă‚‰ăŁă—ă‚ƒă„ăŸă›

Lahendamise toimimine

Kui kasutaja kĂŒlastab aadressi /ko/landingPage:

  1. Marsruudi sobitamine: CMS sobitab mustri /{lang}/landingPage
  2. Parameetri eraldamine: meta.params.lang = "ko"
  3. Valideerimine: CMS kontrollib, et "ko" leidub language-skeemis
  4. CEL-i hindamine: skriptid nagu documents.get("greeting", meta.params.lang) lahenduvad koreakeelseks sisuks
  5. Vastus: lokaliseeritud plokid tagastatakse kliendile

Lisa B: tehniline viide

CelMeta-liides (TypeScript)

interface CelMeta {
  locale: string;
  params: Record<string, string>;
  segments: string[];
  docId: string | null;
  title: string;
}

Parameetrite eraldamise algoritm

Funktsioon extractParams töötleb URL-i teid:

Muster: /{country}/{lang}/products
Tee:    /us/en/products

Algoritm:
1. Normaliseeri mÔlemad (eemalda lÔpus olevad kaldkriipsud)
2. Jaga segmentideks
3. VÔrdle segmentide arvu
4. Töötle iga segapaari:
   - Kui muster algab mÀrgiga : vÔi {}, eralda see parameetrina
   - Vastasel juhul peab see tÀpselt sobima
5. Tagasta: { country: "us", lang: "en" }

Toetatud parameetri sidumise vormingud

{ "lang": "language" }

{
  "lang": {
    "schemaName": "language",
    "slugField": "code"
  },
  "slug": {
    "schemaName": "article",
    "slugField": "slug"
  }
}

Dokumentide otsingu prioriteet

Kui hankida dokument funktsiooniga documents.get(schema, identifier):

  1. UUID vaste: kui identifikaator on kehtiv UUID, hangitakse dokument vÀlja id jÀrgi
  2. KoodivÀli: kontrollitakse vÀlja content.code
  3. Slug'i vÀli: kontrollitakse vÀlja content.slug
  4. Pealkirja vaste: kontrollitakse vÀlja title

See vÔimaldab paindlikult viidata dokumentidele mis tahes unikaalse identifikaatori kaudu.

Continue Reading
Previousâ€čAdminipaneeli puhverserveri seadistamineNextProject Scaffoldingâ€ș