ContentType használata

Mi a ContentType lényege, és hogyan kell hatékonyan használni.

2021.12.15 — Posted by Webb & Flow


Miben segít a ContentType?

  • url képzési szabályok
  • default mező értékek
  • mező szintű jogosultságok
    • view
    • edit
  • validálási szabályok
  • adott kategóriába csak megfelelő típusú alkategória, illetve tartalom indítás
  • kiegészítő mezők (ExternalData)

ContentType fajták Mivel a ConyCMS rendszerében összesen 5 különböző tartalom fajtát különböztetünk meg, ezért a ContentType-oknál is előre meg kell adni, hogy az adott elem milyen fajta tartalmat fog leírni. Erre azért van szükség, mert a különböző tartalom fajtáknál nem azonos a megjelenő mezők listája, így az egyik fajtánál meg sem jelenik egy olyan mező, amit a másik fajtánál kötelező kitölteni.

A lehetséges tartalom fajták: Tartalom fajták és típusok

Url képzés

Az url képzéshez a rendszer két mezőt definiál:

  • planned url
    • ebbe a mezőbe lehet megadni magát az url képzési szabályt, amiben fix, vagy kategória függő mappa szerkeszet is be lehet állítani
  • url slug
    • egy kiegészítő mező, amit használhatunk a planned url-ben akkor, ha például a pontos fájl nevet engedjük szerkeszteni a tartalom írónak úgy, hogy közben a mappa szerkezetet ne tudja módosítani
    • az url slug mező tartalmazhat / jelet, azaz meg lehet benne adni olyan almappát, amit nem a planned url határoz meg

Az url képzési szabályt a Planned Url mezőbe kell megadni.

Amikor egy szabályt megadunk, a következőkre kell figyelni:

  • az url mindig a domain név utáni első / jeltől kezdődik, ezért az url is /-el kezdődik
  • az url-ek minden esetben .html kiterjesztésűek, akkor is, ha végül a weblap kiszolgálásakor a kiterjesztések el vannak rejtve
  • az url-eknek meg kell felelniük az elfogadott URI formátumoknak

Amennyiben egy ContentType-ot egyetlen konrét tartalomhoz veszünk fel, akkor akár közvetlenül a planned url-be is kerülhet az url, minden más esetben valamilyen változót kell benne elhelyezni. A változókra @VALTOZONEVE@ formában hivatkozhatunk.

A lehetséges változók listáját lásd lentebb.

Néhány példa planned url-re:

  • /@URLSLUG@.html
    • a fájl teljes nevét, illetve annak esetleges almappa struktúráját az url slug mezőben szeretnénk megadni
  • /@URLSLUG@/index.html
    • egy mappa struktúrát szeretnénk megadni, és a kész fájl ebbe kerül index.html (vagy más, itt megadott) néven
  • /mappa/@URLSLUG@.html
    • a fájl teljes nevét, illetve annak esetleges almappa struktúráját az url slug mezőben szeretnénk megadni, de meghatározunk egy fix mappát, amin belül a szabadon szerkesztett rész kerül
  • /@CATEGORYDIRECTORY@/@URLSLUG@.html
    • a fájl teljes nevét, illetve annak esetleges almappa struktúráját az url slug mezőben szeretnénk megadni, de úgy, hogy az url egy fix, az adott tartalom kategóriája által meghatározott mappa szerkezetbe kerüljön

Lehetséges változók

A következő változók érhetők el, amikor más változók alapértelmezett értékét adjuk meg:

@DOMAIN@

A portál beállításaiban megadott domain név.

@SCHEME@

A portál beállításaiban megadott protokoll (alapesetben https).

@IMAGEDIR@

A portál beállításaiban megadott image mappa (ahova a Content Images menü alatt feltölteni képeket).

@TITLESLUG@

A title mezőből képzett slug (URI kompatibilissé konvertált) érték.

@TITLE@

A title mező tartalma változtatás nélkül.

@URLSLUG@

Az url slug mező tartalma változtatás nélkül.

@DESCRIPTION@

A description mező tartalma változtatás nélkül.

@PIC[N]ID@

A PIC[N] kiegészítő mezőben megadott fájl azonosítója.

[N] helyén egy szám áll, például: PIC1.

@PIC[N]URL@

A PIC[N] kiegészítő mezőben megadott fájl teljes, abszolút url-je. Tartalmazza a portál protokollját és domain nevét is.

[N] helyén egy szám áll, például: PIC1.

@PIC[N]PATH@

A PIC[N] kiegészítő mezőben megadott fájl elérési útvonala a domain-en belül. A fájl url-jének az a rész, ami a domain név utáni első / jeltől kezdődik.

[N] helyén egy szám áll, például: PIC1.

@PIC[N]FILENAME@

A PIC[N] kiegészítő mezőben megadott fájl neve.

[N] helyén egy szám áll, például: PIC1.

@TEXT[N]@

A TEXT[N] kiegészítő mező értéke.

[N] helyén egy szám áll, például: TEXT1.

@STRING[N]@

A STRING[N] kiegészítő mező értéke.

[N] helyén egy szám áll, például: STRING1.

@NUMBER[N]@

A NUMBER[N] kiegészítő mező értéke.

[N] helyén egy szám áll, például: NUMBER1.

@CATEGORYURLSLUG@

A tartalom kategóriájának az url slug mezejében megadott érték.

Csak normál tartalmak, illetve alkategóriák esetén van értelme.

@CATEGORYDIRECTORY@

A tartalom kategóriája által meghatározott mappa struktúra.

Csak normál tartalmak, illetve alkategóriák esetén van értelme.

Alapértelmezett mező értékek

A ContentType-ban minden olyan mezőnek, ami az adott fajtánál nem kötelező, megadhatunk egy alapértelmezett értéket.

Ezzel egyrészt támogathatjuk a tartalom írókat, hogy ne kelljen olyan sok mezőt feltétlenül kitölteni (például ha a H1 mező default értéke ‘@TITLE@’, akkor ha a tartalom író nem ad meg külön H1 értéket, a title mező értéke lesz a H1-ben megjelenítve), másrészt viszont ha bizonyos mezőket nem is akarunk engedni szerkeszteni (például fixen beállítjuk a template-et, hogy ne tudjon az oldal kinézetén változtatni a tartalom író), akkor ezeket mindenképpen a ContentType-ban kell megadnunk, hogy végül a tartalom helyesen legyen publikálva.

Mező szintű jogosultságok

A ContentType-ban minden olyan mezőnél, ami az adott fajtánál nem kötelező, megadhatjuk a jogosultsági szinteket.

Két beállítás adható meg:

  • látható / nem látható
  • szerkeszthető / csak olvasható

Egy mező csak akkor szerkeszthető, ha látja is a felhasználó.

A jogosultsági rendszerben pedig minden mezőhöz megadható tartalom fajtánként, hogy:

  • ha a ContentType szerint láthatja, akkor valóban láthatja-e
  • ha a ContentType szerint nem láthatja, akkor is láthatja-e (admin jog)
  • ha a ContentType szerint szerkesztheti, akkor valóban szerkesztheti-e
  • ha a ContentType szerint nem szerkesztheti, akkor is szerkesztheti-e (admin jog)

Ezzel gyakorlatilag megoldható, hogy az admin felhasználók beállítástól függetlenül minden mezőt láthassanak és szerkeszthessenek, de a tartalom írók csak azokat a mezőket lássák és szerkesszék, amiket feltétlenül szükséges a munkájuk során.

Validálási szabályok

Kísérleti funkció, jelenleg az éles portálokban még nem érhető el!

A legtöbb mezőhöz megadhatók validálási szabályok, amik alapján a rendszer a tartalom módosításakor ellenőrzi a megadott adatokat, és a beállításoktól függően hibát vagy figyelmeztetést ad.

Hiba esetén nem mentődik el semmilyen módosítás (nem csak a hibás mező, hanem a többi sem), figyelmeztetés esetén mindent ment a rendszer, de jelzi, hogy nem biztos, hogy jó lesz az az érték, ami meg lett adva.

Minden validálási szabálynál meg kell adni a szintet (error vagy warning), és meg lehet adni a pontos ellenőrzést.

Ilyenek lehetnek például:

  • required
    • kötelező megadni valamilyen értéket
  • unique
    • másik ilyen fajta tartalom ebben a mezőben nem veheti fel ugyanezt az értéket
  • number
    • szöveges mező, de mindenképpen számot kell beírni
  • min
    • szám mezőknél ettől nem lehet kisebb a megadott érték
  • max
    • szám mezőknél ettől nem lehet nagyobb a megadott érték
  • pattern
    • a megadott értéknek illeszkednie kell a megadott pattern-re
    • a pattern csak * (akárhány, akármilyen karakter) és ? (egy konkrét, akármilyen karakter) speciális karaktereket tartalmazhat
  • regex
    • a megadott értéknek illeszkednie kell a megadott reguláris kifejezésre
  • minLength
    • szöveges mezőknél minimum ennyi karaktert kell megadni
  • maxLength
    • szöveges mezőknél maximum ennyi karaktert lehet megadni
  • minWordCount
    • szöveges mezőknél minimum ennyi szót kell megadni
  • maxWordCount
    • szöveges mezőknél maximum ennyi szót lehet megadni
  • minSentenceCount
    • szöveges mezőknél minimum ennyi mondatot kell megadni
  • maxSentenceCount
    • szöveges mezőknél maximum ennyi mondatot lehet megadni

Adott kategóriába csak megfelelő típusú alkategória, illetve tartalom indítás

Azért, hogy ne lehessen bármilyen kategória alatt bármilyen tartalmat indítani, illetve egy konkrét kategória alatt ne lehessen például újabb alkategóriát indítani, vagy pont, hogy csak azt lehessen, a fő és alkategória fajtájú ContentType-okban meg kell adni, hogy milyen más ContentType-al lehet alkategóriát, illetve normál tartalmat indítani.

Tipikus esetek, amikor ezekre a korlátozásokra szükség van:

  • Blog főkategória alatt nem szeretnénk, ha bármilyen alkategória létre lenne véletlenül hozva
    • megoldás: nem engedélyezünk az alkategóriáknak semmilyen ContentType-ot
  • Blog alatt nem szeretnénk, ha véletlenül hír típusú tartalom megjelenne
    • megoldás: a normál tartalmaknak csak a Blog Poszt nevű ContentType-ot engedélyezzük
  • Hír főkategória alatt van egy szintű alkategória struktúra, és csak az alkategóriákba akarunk hír bejegyzéseket indítani, a főkategória alatt közvetlenül nem
    • megoldás: a főkategróia ContentType-jában csak az alkategóriáknak engedélyezzük a megfelelő ContentType-ot, normál tartalmaknak nem engedélyezünk semmit, az alkategória ContentType-jában pedig a normál tartalmaknál engedélyezzük a hír bejegyzés ContentType-ját, az alkategóriáknál pedig semmit, hogy ne lehessen újabb alkategória szintet indítani
  • ...

Ehhez a ContentType-ban két listát szerkeszthetünk, ahol felsorolhatjuk a szükséges ContentType-okat:

  • ContentTypes for normal contents
    • a normál tartalmakhoz használható ContentType-ok listája
  • ContentTypes for subcategories
    • az alkategóriákhoz használható ContentType-ok listája

ExternalData

Összetettebb tartalmaknál szükség lehet olyan mezőkre, amik minden azonos kinézetű tartalomnál ugyanott jelenik meg az oldalon és ezek vagy nem a folyó szövegben jelennek meg, vagy nem szeretnénk a tartalom íróra bízni, hogy belerakja-e vagy sem.

Ezeket a plusz mezőket lehet az ExternalData-ban felsorolni.

Minden ilyen mezőnek van egy típusa, egy sorszáma, és opcionálisan egy neve. A mezőre bármikor lehet a típusából és sorszámából képzett azonosítóval hivatkozni, illetve ha meg van adva a neve, akkor azzal is.

A mezők típusa lehet:

  • TEXT
    • nagyobb, több soros szöveg, ami HTML vagy MarkDown kódot is tartalmazhat
  • STRING
    • rövid szöveg, amiben nem lehet sortörés
  • NUMBER
    • egész szám
  • REAL
    • tört szám
  • EMAIL
    • email formátumú szöveg
  • DOMAIN
    • domain formátumú szöveg
  • DATE
    • dátum
  • TIME
    • idő
  • DATETIME
    • dátum és idő egyben
  • TIMESTAMP
    • UNIX időbélyeg
  • YESNO
    • Igen/Nem jellegű mező
  • BOX
    • Előre felvitt dobozok (HTML kódrészletek) közül lehet egyet kiválasztani
  • PIC
    • Előre feltöltött képek közül lehet egyet választani
  • FILE
    • Előre feltöltött fájlok közül lehet egyet kiválasztani, és azt linkelni az oldalon