DataItem(s)
Et DataItem er et begreb jeg har opfundet i forbindelse med Paginata - det er en af de absolutte grundbestanddele i systemet, og derfor måske også lidt kedeligt og i hvert fald uinteressant for den almindelige bruger af systemet. Men det er en vigtig del af systemet, og vigtig at forstå hvis man vil udvide sit system, eller udvikle php-kode selv.
Et DataItem repræsenterer en række i en tabel. Tabellens navn er DataItem'ets type, og hver kolonne i rækken repræsenteres af et Field i DataItem'et - et Field skal indeholde et DataType-objekt, et DataType objekt er en fancy indpakning af typiske datatyper, som f.eks. et tal, en tekstlinje, en htmltekst, en checkbox, et billede, etc. Mere om dem i en anden artikel.
I tidlige versioner af Paginata skelnede jeg mellem sider og andre slags data, for eksempel blogposts, billedgallerier, kategorier til blogposts, etc. Jeg brugte lange nætter på at forklare mig selv hvorfor en side ikke var det samme som f.eks. en blogpost: en side kan indgå i en menu, en side kan vise en eller flere blogposts, blogposts sorteres enten efter dato eller kategori, sider sorteres altid efter menustrukturen. Men ikke desto mindre gik det op for mig at de to havde flere ting tilfælles end de havde forskelle, og efter endnu mere grublen kom jeg frem til at stort set alle tabeller i systemet: administratorer, layouts, indstillinger, rettigheder - at de alle havde nogle gennemgående fællestræk.
DataItems kan vises i en liste, de kan sorteres på forskellige måder, man kan udvælge et item og redigere de enkelte Fields, og når man har gemt vil man egentlig gerne have muligheden for at kunne fortryde.
I den aktuelle version (4.januar 2010) af Paginata er det kun sider og blogposts og den slags der er repræsenteret via DataItems, men jeg arbejder på at lade det gælde samtlige data-samlinger i systemet. Det betyder at jeg ikke længere skal skrive kode til at håndtere søgning, udvælgelse, sortering, fremvisning og redigering af tabeller! Hurra!
DataPersistence
DataItems hentes og gemmes via DataPersistence - det eneste objekt der har adgang til databasen - og helst også det eneste objekt der bruger sql direkte. Det er langt fra perfekt, og jeg arbejder på at finpudse det, men indtil videre kan man loade et item med et bestemt id, save selvsamme item, oprette et helt nyt item, eller hente en liste af items, enten alle af en bestemt type, eller udvalgt efter bestemte kriterier.
TableDescription
Typen er den væsentligste detalje ved et DataItem. Typen angiver hvilken tabel der skal læses fra og skrives til, og den angiver hvilke fields et item har. Objektet TableDescription tager sig af at læse tabel-informationerne - de læses fra en særskilt tabel i databasen (en af de få der IKKE består af dataitems). Det er indtil videre ganske rudimentært - indeholder ikke andet end en liste over Fields, men i en snarlig version kommer det også til at hjælpe med sortering og redigering af DataItems.
Fields
Som nævnt har et DataItem et antal Fields - de defineres af TableDescription, og udfyldes af DataPersistence når det pågældende DataItem hentes fra databasen. Et Field er et DataType objekt - de har alle det tilfælles at de indeholder et navn, en type og en værdi. Værdien er naturligvis afhængig af typen, f.eks. er værdien for Number altid et tal, mens den for Text altid er en tekststreng.
Der er visse fields der indehaves af stort set alle DataItems, nemlig
- id
- position
- parent
- active
- name
Position benyttes i forbindelse med sortering, og angiver simpelthen dette items placering i sorteringsrækkefølgen.
Parent benyttes ligeledes i forbindelse med sortering, men kun ved DataItems der indgår i en træstruktur - her henviser parent til det DataItem der står et niveau over dette i træstrukturen.
Active angiver om item'et er synligt på hjemmesiden - kun items der har true i Active kan benyttes i lister og søgninger.
Name er navnet på item'et - for det meste vil det være f.eks. navnet på en side, navnet på et blogindlæg, navnet på en administrator, eller en anden tekst til at hjælpe mennesker med at kende DataItems fra hinanden.

