Specialfelter i Instans CMS

Introduktion til specialfelter

Specialfelter er en mulighed for at oprette særlige indtastningsfelter på templates. Som standard har Instans CMS kun felterne "titel i menu", "overskrift", "resume" og "brødtekst", når man opretter en ny side. Specialfelter åbner muligheden for, at man som udvikler selv kan definere, præcis hvilke felter, brugeren skal kunne taste i i Instans CMS. Samtidig er der mulighed for at trække disse specialfelt-data ud i sin template på websitets frontend ved at bruge funktionen return_customfielddata.

Specialfelter kan typisk bruges, hvis man har et layout, hvor det er vigtigt, at bestemte områder i layoutet kun indeholder helt bestemte data. F.eks. kan man have en template, hvor der altid skal være et billede i et felt i toppen. Man kan så oprette et specialfelt af typen "billedvælger", hvor brugeren vælger billedet. På frontend kan man bygge en funktion, som trækker URL'en på det valgte billede ud og sætter den ind i et <img> tag automatisk. Således sikrer man, at brugeren ikke selv definerer sit <img> tag eller putter <p> tags rundt om det, eller gør andre ting, som ødelægger integriteten af layoutet.

Et specialfelt kan være et helt simpelt tekstfelt, hvor brugere f.eks. kan angive en ønsket baggrundsfarve, linkfarve, etc, hvis man gerne vil indbygge denne mulighed i sin løsning. Men et specialfelt kan også bestå af en "samling" af felter, hvor man skal udfylde flere forskellige felter som del af samme specialfelt. Specialfeltet "Topbanner" kunne f.eks. bestå af en billedvælger, et felt til ALT-tekst og et felt til den URL, som man skal gå til, når man klikker på banneret.

Opsætning af specialfelter

Specialfelter kan opsættes helt fra bunden ved at populere følgende tabeller med data:

CUSTOMFIELDTYPES

I tabellen CUSTOMFIELDTYPES oprettes det nye specialfelt med et navn i feltet CUSTOMFIELDTYPES.TYPENAME. F.eks. "Topbanner".

CUSTOMFIELDTYPES

CUSTOMFIELDATTRIBUTES

I tabellen CUSTOMFIELDATTRIBUTES opsætter man de "underfelter" (ét eller flere), som det pågældende specialfelt består af. Hver attribute linkes til en CUSTOMFIELDTYPE via feltet CUSTOMFIELDATTRIBUTES.CUSTOMFIELDTYPE_ID.

I eksemplet med vores "Topbanner" er det i CUSTOMFIELDATTRIBUTES, at vi skal definere de tre underfelter "Billede", "ALT-tekst" og "URL". Der er en række standard-attribut-typer, som man kan trække på. Disse er:

  • TEXT (et almindeligt <input type="text"> tekstfelt)
  • TEXTEDITOR (en FCK-editor)
  • IMAGESELECTOR (en automatisk genereret AJAX-billedvælger, hvor man vælger fra billedarkivet)
  • FILESELECTOR (en automatisk genereret filvælger, hvor man vælger fra filarkivet)
  • DROPDOWN (en <select> dropdown med options som defineret i CUSTOMFIELDATTRIBUTES.OPTIONS)

Definitionen af disse standard-attribut-typer findes i filen /cms/common.inc.php i funktionen return_customfields_input. Avancerede brugere kan definere sine egne "custom" CUSTOMFIELDATTRIBUTES - disse kan placeres i filen /includes/custom_customfieldattributes.inc.php - se nederst i funktionen return_customfields_input for mere info.

På billedet nedenfor kan man se, hvordan de tre attributter "Banner-billede", "Banner ALT-tekst" og "Bannerklik-URL" er oprettet i PhpMyAdmin i tabellen CUSTOMFIELDATTRIBUTES og linket til CUSTOMFIELDTYPE_ID = 1.

CUSTOMFIELDATTRIBUTES

CUSTOMFIELDS

Ved at populere ovenstående to tabeller med data har man lavet en "skabelon" over et specialfelt - feltet hedder "Topbanner" og har tre attributter, "Banner-billede", "Banner ALT-tekst" og "Bannerklik-URL". Nu kan man bruge denne skabelon til at lave konkrete instanser af specialfeltet. Dette gøres i tabellen CUSTOMFIELDS. Nedenfor kan man se, hvordan vi har oprettet specialfeltet "Mit topbanner" i PhpMyAdmin:

CUSTOMFIELDS

Bemærk, at TEMPLATE_ID er 0. Dette betyder, at specialfeltet er tilgængeligt på alle sider. Man kunne også f.eks. sætte TEMPLATE_ID=1, så ville det kun være sider baseret på templaten med TEMPLATES.ID=1, der ville have specialfeltet.

Feltet TABLENAME er sat til PAGES - p.t. er specialfelter kun implementeret for modulet Sider, men i fremtiden kunne man også have TABLENAME=NEWS osv.

Feltet DESCRIPTION indeholder navnet på denne instans af specialfeltet.

Feltet FIELDKEY indeholder den key, som data fra feltet udtrækkes med, når man benytter funktionen return_customfielddata.

Feltet TYPE_ID henviser til CUSTOMFIELDTYPES.ID, og er her en henvisning til vores "Topbanner" specialfelt-type.

Feltet POSITION angiver rækkefølgen (den "visuelle" rækkefølge i interfacet) af specialfelterne på den valgte template.

Feltet DELETED kan sættes til 1 for at deaktivere et specialfelt. 

Specialfelter i brug

Når ovenstående trin er gennemført, får man det nye faneblad "Specialfelter", når man redigerer en side i Instans CMS. Det ser sådan ud for vores felt ovenfor:

Faneblad

Når man gemmer siden, gemmes de indtastede specialfelt-data i tabellen CUSTOMFIELDDATA. Herfra kan de trækkes ud med funktionen return_customfielddata. Denne funktion returnerer et multidimensionelt array, som indeholder en plads (en array) for hvert specialfelt, som igen indeholder en plads for hver attribut i netop dét specialfelt.

De returnerede data kan så bruges i egne funktioner eller placeres direkte i templaten.