Sanity CMS: struktūruotas turinys

Kas yra Sanity ir kodėl jis skiriasi nuo kitų CMS

Jei dirbate su turiniu internete, tikriausiai esate girdėję apie WordPress, Drupal ar kitas populiarias turinio valdymo sistemas. Bet Sanity CMS – tai visai kita istorija. Tai nėra dar viena platforma su šablonais ir temomis, kurioje galite spustelėti kelis mygtukus ir gauti gatavą svetainę. Sanity yra tai, ką vadinama „headless CMS” – sistema, kuri sutelkia dėmesį į patį turinį, o ne į jo pateikimą.

Įsivaizduokite bibliotekos katalogą be pačios bibliotekos pastato. Turite visą informaciją apie knygas – pavadinimus, autorius, žanrus, santraukas – bet kaip tas knygas eksponuosite skaitytojams, priklauso nuo jūsų. Galite sukurti tradicinę biblioteką, mobilią aplikaciją, interaktyvų kioską ar net balso asistentą. Sanity veikia panašiai: jis saugo ir struktūruoja jūsų turinį, o kaip jį pateiksite – jūsų pasirinkimas.

Kas daro Sanity ypatingą? Pirmiausia, tai realaus laiko bendradarbiavimas. Keletas žmonių gali redaguoti tą patį turinį vienu metu, matyti vienas kito pakeitimus akimirksniu – tarsi dirbate Google Docs, tik su sudėtingesnėmis duomenų struktūromis. Antra, Sanity naudoja GROQ (Graph-Relational Object Queries) užklausų kalbą, kuri leidžia labai tiksliai ir efektyviai gauti būtent tokius duomenis, kokių jums reikia.

Struktūruotas turinys: filosofija, kuri keičia žaidimo taisykles

Tradicinėse CMS sistemose turinys dažnai yra saugomas kaip HTML blokai ar formatuotas tekstas. Problema? Toks turinys yra susietas su konkrečiu pateikimu. Jei norite tą patį turinį panaudoti mobilioje aplikacijoje, el. laiške ar išmaniajame laikrodyje, tenka jį perdirbti arba taikstytis su kompromisais.

Sanity požiūris yra fundamentaliai kitoks. Čia turinys yra struktūruotas kaip duomenys. Pavyzdžiui, straipsnis nėra tiesiog tekstas su antraštėmis – tai objektas su apibrėžtais laukais: pavadinimas (string), autorius (nuoroda į autoriaus objektą), publikavimo data (datetime), turinys (masyvas struktūruotų blokų), kategorijos (nuorodos į kategorijų objektus) ir taip toliau.

Kodėl tai svarbu? Įsivaizduokite, kad turite 500 produktų aprašymų. Staiga jums reikia pridėti naują lauką – ekologiškumo reitingą. Struktūruotame turinyje tai reiškia paprasčiausiai naujo lauko pridėjimą prie schemos. Visi produktai automatiškai gauna šią galimybę, o jūsų frontend aplikacija gali nuspręsti, ar ir kaip šį lauką rodyti. Su tradicine CMS tai būtų košmaras, reikalaujantis rankiniu būdu redaguoti šimtus įrašų.

Sanity Studio: redaktorius, kurį galite pritaikyti bet kam

Vienas iš Sanity privalumų yra Sanity Studio – turinio redagavimo sąsaja, kuri yra visiškai atviro kodo ir gali būti pritaikyta. Tai React aplikacija, kurią galite modifikuoti, stilizuoti ir išplėsti pagal savo poreikius.

Štai kur tampa įdomu: daugelis CMS verčia jus prisitaikyti prie jų darbo eigos. Sanity leidžia sukurti darbo eigą, kuri atitinka jūsų komandos poreikius. Reikia specialaus redaktoriaus maisto receptams su ingredientų skaičiuokle? Galite jį sukurti. Norite integruoti spalvų parinkiklį, kuris automatiškai tikrina prieinamumo standartus? Nėra problemos.

Praktinis pavyzdys: dirbau projekte, kur klientui reikėjo valdyti sudėtingus įvykių kalendorius su keliomis vietomis, kainų kategorijomis ir dinamiškomis nuolaidomis. Sukūrėme custom įvesties komponentą, kuris vizualiai rodė, kaip kainodara keičiasi priklausomai nuo datos ir dalyvių skaičiaus. Turinio redaktoriai galėjo iš karto matyti, ar jų nustatymai veikia taip, kaip tikėjosi – be jokio programavimo.

Schemos ir tipai: kaip apibrėžti savo turinio struktūrą

Sanity schemos yra rašomos JavaScript (arba TypeScript) kalba. Tai gali skambėti bauginančiai, bet iš tikrųjų tai suteikia neįtikėtiną lankstumą ir galią.

Štai paprastas produkto schemos pavyzdys:

„`javascript
export default {
name: ‘product’,
title: ‘Produktas’,
type: ‘document’,
fields: [
{
name: ‘title’,
title: ‘Pavadinimas’,
type: ‘string’,
validation: Rule => Rule.required()
},
{
name: ‘slug’,
title: ‘URL’,
type: ‘slug’,
options: {
source: ‘title’,
maxLength: 96
}
},
{
name: ‘price’,
title: ‘Kaina’,
type: ‘number’,
validation: Rule => Rule.required().min(0)
},
{
name: ‘images’,
title: ‘Nuotraukos’,
type: ‘array’,
of: [{type: ‘image’}]
}
]
}
„`

Kas čia vyksta? Apibrėžiame dokumentą pavadinimu „product” su keliais laukais. Kiekvienas laukas turi tipą (string, number, image), o kai kurie turi validacijos taisykles. Sanity Studio automatiškai sukuria tinkamą redagavimo sąsają pagal šią schemą.

Bet tikroji magija prasideda, kai pradedame naudoti sudėtingesnius tipus. Galite sukurti nuorodas tarp dokumentų (references), įdėtus objektus (objects), sąlyginius laukus, kurie rodomi tik tam tikrais atvejais, ir daug daugiau. Pavyzdžiui, straipsnio autorius gali būti ne tiesiog tekstas, o nuoroda į atskirą autoriaus dokumentą su biografija, nuotrauka ir socialinių tinklų nuorodomis. Kai atnaujinate autoriaus informaciją vienoje vietoje, ji automatiškai atsinaujina visuose straipsniuose.

GROQ: užklausų kalba, kuri nustebins SQL mėgėjus

GROQ (tariama „grok”) yra Sanity sukurta užklausų kalba, skirta struktūruotam turiniui gauti. Ji primena GraphQL, bet yra paprastesnė ir intuityvi. Jei esate dirbę su SQL, kai kurie principai atrodys pažįstami, bet sintaksė yra daug švaresnė.

Pavyzdžiui, norite gauti visus paskelbius straipsnius, surūšiuotus pagal datą, su autoriaus informacija:

„`groq
*[_type == „post” && published == true] | order(publishedAt desc) {
title,
slug,
publishedAt,
„author”: author->{name, image}
}
„`

Ši užklausa sako: „Gauk visus dokumentus, kurių tipas yra ‘post’ ir kurie yra paskelbti, surūšiuok juos pagal publikavimo datą mažėjančia tvarka, ir grąžink pavadinimą, slug, publikavimo datą bei autoriaus vardą ir nuotrauką (sekant nuorodą į autoriaus dokumentą)”.

GROQ galia atsiskleidžia dirbant su sudėtingomis duomenų struktūromis. Galite filtruoti, projektuoti, transformuoti ir agregacijas atlikti viena užklausa. Pavyzdžiui, jei norite gauti visas kategorijas, kuriose yra bent 5 paskelbti straipsniai:

„`groq
*[_type == „category”] {
title,
„postCount”: count(*[_type == „post” && references(^._id) && published == true])
}[postCount >= 5]
„`

Taip, iš pradžių gali atrodyti keistai, bet kai įprasite, GROQ tampa neįtikėtinai galingas įrankis. Ir svarbiausia – jis veikia labai greitai, nes Sanity backend yra optimizuotas būtent tokioms užklausoms.

Integracija su frontend: nuo Next.js iki React Native

Kadangi Sanity yra headless CMS, jis neturi nuomonės apie tai, kaip turėtumėte pateikti savo turinį. Tai reiškia, kad galite jį naudoti su bet kokia frontend technologija – React, Vue, Angular, Svelte, ar net vanilla JavaScript.

Praktikoje populiariausias derinys yra Sanity + Next.js. Kodėl? Next.js puikiai tinka statiniams ir serverio pusėje generuojamiems puslapiams, o Sanity teikia turinį per API. Kartu jie sukuria greitą, SEO draugišką ir lengvai prižiūrimą sprendimą.

Štai kaip atrodo tipinis darbo procesas:

1. Apibrėžiate schemas Sanity Studio
2. Turinio redaktoriai kuria ir tvarko turinį per Studio sąsają
3. Jūsų Next.js aplikacija gauna duomenis per Sanity API naudodama GROQ užklausas
4. Next.js generuoja puslapius su tuo turiniu
5. Kai turinys atsinaujina, galite naudoti webhooks arba Sanity realaus laiko klausytojus, kad automatiškai atnaujintumėte svetainę

Bet Sanity nėra apsiribojęs tik žiniatinklio svetainėmis. Matėte projektų, kur tas pats Sanity turinys buvo naudojamas:
– Žiniatinklio svetainėje (Next.js)
– Mobilioje aplikacijoje (React Native)
– Skaitmeniniuose ekranuose parduotuvėse
– El. laiškuose (generuojant HTML iš struktūruoto turinio)

Tai ir yra struktūruoto turinio galia – sukuriate vieną kartą, naudojate visur.

Realaus laiko bendradarbiavimas ir turinio istorija

Viena iš Sanity funkcijų, kuri dažnai būna neįvertinta, kol jos neišbandote – tai realaus laiko bendradarbiavimas. Jei esate dirbę su Google Docs, žinote, kaip tai veikia: matote, kas dar redaguoja dokumentą, matote jų kursoriaus poziciją, pakeitimai atsiranda akimirksniu.

Sanity Studio turi tą patį. Kai keletas redaktorių dirba su tuo pačiu dokumentu, jie mato vienas kito pakeitimus realiu laiku. Tai gali skambėti kaip smagi funkcija, bet didesniuose projektuose su kelių žmonių komandomis tai tampa būtinybe.

Įsivaizduokite naujienų portalą, kur redaktorius rašo straipsnį, korektorius taiso klaidas, o vyresnysis redaktorius prideda pastabas – visi tuo pačiu metu. Be realaus laiko sinchronizacijos tai būtų chaosas su konfliktais ir prarastais pakeitimais.

Kita svarbi funkcija – turinio istorija. Sanity saugo visų dokumentų istoriją, todėl galite matyti, kas ir kada pakeitė, ir grįžti prie ankstesnių versijų. Tai veikia kaip Git versijavimas, bet integruotas į turinio valdymo sistemą. Ištrintumėte svarbų tekstą? Nesijaudinkite, galite jį atkurti. Norite pamatyti, kaip straipsnis keitėsi per mėnesį? Visa informacija yra ten.

Kaina, našumas ir praktiniai patarimai pradedantiesiems

Sanity turi nemokamą planą, kuris yra gana dosnus – 100,000 API užklausų per mėnesį, 10GB duomenų perdavimo, 5GB saugyklos ir 3 komandos nariai. Daugeliui mažų ir vidutinių projektų to pakanka. Kai projektas auga, galite pereiti prie mokamų planų, kurie prasideda nuo $99 per mėnesį.

Ar Sanity yra greitas? Labai greitas. Sanity naudoja globalų CDN (Content Delivery Network), todėl jūsų turinys yra pristatomas iš artimiausio serverio. API atsakymo laikai paprastai būna 50-200ms, priklausomai nuo užklausos sudėtingumo ir jūsų geografinės padėties.

Jei tik pradedate su Sanity, štai keletas praktinių patarimų:

Pradėkite nuo paprastų schemų. Nepersistenkite iš karto sukurti sudėtingą struktūrą. Pradėkite nuo pagrindinių laukų ir laipsniškai pridėkite sudėtingumą, kai suprasite, ko jums reikia.

Naudokite TypeScript. Sanity puikiai veikia su TypeScript, ir galite automatiškai generuoti tipus iš savo schemų. Tai labai sumažina klaidų skaičių ir pagerina kūrimo patirtį.

Išmokite GROQ pagrindus. Neskubėkite naudoti sudėtingų užklausų. Pradėkite nuo paprastų filtrų ir projekcijų, ir laipsniškai mokykitės sudėtingesnių galimybių.

Pasinaudokite Sanity bendruomene. Sanity turi aktyvią bendruomenę Slack, GitHub ir forumuose. Daugelis problemų, su kuriomis susiduriate, jau yra išspręstos ir dokumentuotos.

Testuokite su tikrais duomenimis. Sukurkite development ir production aplinkos. Sanity leidžia turėti kelis datasets, todėl galite eksperimentuoti be baimės sugadinti produkcinį turinį.

Kodėl struktūruotas turinys yra ateitis (ir dabartis)

Grįžkime prie esmės. Pasaulis, kuriame turinys yra rodomas tik žiniatinklio naršyklėse, seniai praėjo. Šiandien turinys turi pasiekti išmaniuosius telefonus, planšetes, išmaniuosius laikrodžius, balso asistuotus, automobilių ekranus, VR akinius ir daugybę kitų įrenginių, apie kuriuos dar net nežinome.

Tradicinės CMS sistemos, kurios saugo turinį kaip HTML puslapius, tiesiog negali efektyviai aptarnauti šio daugiakanalio pasaulio. Struktūruotas turinys – tai ne tik techninis sprendimas, bet ir strateginis požiūris į turinio valdymą.

Sanity nėra tobulas kiekvienam projektui. Jei jums reikia paprastos tinklaraščio platformos su minimaliu pritaikymu, WordPress gali būti paprastesnis pasirinkimas. Bet jei kuriate sudėtingą aplikaciją, daugiakanalę platformą, ar bet ką, kas reikalauja lankstumo ir mastelio, Sanity yra vienas geriausių įrankių rinkoje.

Kas svarbiausia – Sanity suteikia jums kontrolę. Kontrolę ne tik technine prasme (galite pritaikyti bet ką), bet ir verslo prasme (jūsų turinys nėra užrakintas proprietarinėje sistemoje). Jūsų duomenys yra prieinami per standartinį API, todėl jei kada nors nuspręsite migruoti kitur, tai yra įmanoma.

Struktūruotas turinys keičia tai, kaip galvojame apie turinio valdymą. Vietoj to, kad galvotume apie puslapius ir įrašus, galvojame apie duomenis ir jų ryšius. Vietoj to, kad kurtume turinį konkrečiam kanalui, kuriame turinį, kuris gali prisitaikyti prie bet kokio kanalo. Ir Sanity yra vienas geriausių įrankių, padedančių tai įgyvendinti.

Daugiau

Legendos būsena: reagavimo būsena