Hvad er et Child Theme og et Theme Framework?

af Georg Adamsen den 8. august 2009

i Temaer, TIPS

Prelovacs Amazing Grace og Blue Grace

Prelovacs Amazing Grace og Blue Grace

I begyndelsen kassererede jeg ofte temaer, fordi der var et eller andet, jeg ikke kunne lidt. F.eks. hvis et tema ikke viste forskel på over- og underkategorier. Senere rettede jeg det, hvis jeg lige umiddelbart kunne rette i filerne. Så kom WordPress version 2.7, men jeg opdagede først hen ad vejen, hvilke muligheder der var i den. Mine erfaringer er helt parallelle med andres (se fx How to make a child theme for WordPress). Dette indlæg prøver at forklare nogle af de begreber, jeg ikke forstod dybden af i begyndelsen: Child Theme og Theme Framework.

Et WordPress-tema er et sæt filer, som populært sagt styrer, hvordan en WordPress-installation vises frem for brugeren. Det skal forstås i bred betydning, for et tema kan faktisk ikke kun bestemme layoutet, men også et stykke på vej, hvilke oplysninger, der vises frem. Et væsentligt princip er, at man skelner mellem indhold og fremtræden. Et andet er, at man skelner mellem indhold og handlinger. Hvad der skal gøres med det, man skriver, skal ikke gemmes sammen med det, men har skrevet. Disse to principper er med til at muliggøre, at man kan skifte tema uden, at der sker noget med indholdet.

Men det sker tit, at man kan få lyst til at ændre i, hvordan ens blog eller WordPress-site fremtræder. En del tør ændre lidt i style.css, den fil, der langt på vej styrer layoutet. Er man mere modig, tør man måske også ændre i skabelonerne, dvs. de filer, der ved hjælp af programmeringssproget PHP og HTML bestemmer, hvilke data der i store træk skal vises de forskellige steder på bloggen. Eksempelvis er der en php-skabelon, som bruges, når man skal se en enkelt WordPress “side” (til forskel fra et indlæg).

Der er blot problemer med at rette i disse filer. Det væsentligste er måske, at temaerne opdateres, nogle med jævne mellemrum, andre, når der kommer en ny version af WordPress, som gør det nødvendigt. Hvis man ikke er meget forsigtig, kommer man nemt til at overskrive ens ændringer. Faktisk kan det næsten kun undgås, hvis man bruger et program, der kan sammenligne to eller tre (sæt af) filer på samme tid. Eller hvis man bruger et Child Theme.

Løsningen hedder altså Child Themes. Man opretter en ny style.css-fil i sin egen mappe. Den skal i headeren havde en linje, der begynder med “Template: ” og indeholde forælder-temaets mappenavn. Det er Child Themet, der skal være det aktive tema. Er der ingen sprogfiler, som automatisk bruges af child themet, er der dog ingen anden udvej end at oversætte de originale skabelonfiler.

Prelovacs temaer Amazing Grace og Blue Grace

Hvis du vil se et eksempel, så tjek Vladimir Prelovacs site (Vladimir bruger i øvrigt ikke længere Amazing Grace, det tema, der stadigvæk kører her på WordPress-bloggen). Man kan downloade en blå udgave: Blue Grace Classic.

Men man kan også downloade en sampak, hvis man kan kalde det det. Heri ligger Amazing Grace samt en mappe, der hedder “blueggrace”. I blueggrace-mappen ligger der grafikfiler til den blå udgave, et skærmbillede samt en style.css. (Inden længe vil jeg sikkert få lagt sampakken ud her på bloggen.)

/*
Theme Name: Blue Grace
Theme URI: http://www.prelovac.com/vladimir/wordpress-themes/blue-grace
Description: Blue Grace is a lightweight, super-optimized WordPress theme packed with features (SEO, Adsense & Widget Ready). <p>  <a href=”http://www.prelovac.com/vladimir/wordpress-themes/blue-grace”>Blue Grace</a> is created by <a href=”http://www.prelovac.com/vladimir/”>Vladimir Prelovac</a></p>
Version: 3.1
Tags: fixed width, widgets, valid CSS, valid XHTML, SEO, SEO friendly, adsense, custom header, three columns, clean,  right sidebar, blue,white, photoblogging, widget ready, simple, gravatars
Author: Vladimir Prelovac
Author URI: http://www.prelovac.com/vladimir/
Template: amazinggrace

The CSS/XHTML is released under GPL:  http://www.opensource.org/licenses/gpl-license.php
*/

De fleste linjer skal være der, men den eneste, der virkelig betyder noget, er “Template: amazinggrace”. Den linje betyder, at WordPress vil bruge alle filerne fra temaet Amazing Grace, hvis Blue Grace ikke har dem. Når WordPress leder efter index.php for at komme igang, vil den først kigge i Blue Grace’s mappe, dernæst i Amazing Grace-mappen. Undtagelserne er style.css og functions.php. Med mindre man benytter en teknik, som Kristin K. Wangen beskriver.

Precious

Kristin K. Wangens Precious

Kristin K. Wangens Precious

Kristin K. Wangen udnytter dette med sit tema Precious. Hun har programmeret temaet, ikke mindst functions.php, således, at man kan skrive nye skabeloner og automatisk få dem anvendt i stedet for hendes.

Prelovacs style.css indeholder alt det nødvendige. Men man kan også, som f.eks. Kristin K. Wangen gør det i et af sine Example Child Themes, importere den originale style.css. Alt, hvad man selv skriver derefter, vil tilsidesætte style-angivelserne i den originale, eftersom browserne normalt vælger den sidste, hvis der er to eller flere regler for nøjagtig samme selektor. Et importeret stylesheet tæller allerlavest. Principperne forklares f.eks. i Eric A. Meyers CSS: The Definitive Guide.

Kristins Child Theme viser også en anden ting, man kan gøre. Hun har to nye php-filer. Den ene af dem indsætter en navigeringsbjælke lige under headeren. Det kan lade sig gøre, fordi hun har skrevet forælderversionens header.php, sådan at man kan kalde sin egen.

Justin Tadlocks Hybrid

Justin Tadlocks Temaet Hybrid og websitet ThemeHybrid

Justin Tadlocks Temaet Hybrid og websitet ThemeHybrid

Justin Tadlock har skabt theme frameworket Hybrid, som han giver en grundig orientering om på themehybrid.com. På bloggen JustinTadlock.com fandt jeg artiklen “Why I created a WordPress theme framework“. Han skrev temaet til sig selv, til forskellige projekter, men i anden omgang har han optimeret den til andre.

Tadlock nævner, at Sandbox var det første rigtige theme framework, men at det var Thematic, som virkelig udnyttede det optimalt.

Ifølge Tadlock er et theme framework “et solidt kodet tema, som skal tjene som basis for andre projekter.” Det kan ske med child themes. Men er det ikke kun for udviklere, spørger han? Svaret er et klart nej. Der er en række fordele for os almindelige brugere.

  • Bundsolid kode, som opdateres og forfines hele tiden
  • Udviklere kan nå mere, så slutbrugere får flere valgmuligheder
  • Man kan nemt lægge et design ovenpå, f.eks. med årstidens farver
  • Man behøver ikke bekymre sig, når et tema opdateres. Det er i høj grad vigtigt, tilføjer jeg
  • Man behøver ikke flytte egne funktioner m.m. fra et tema til det næste. Det, tilføjer jeg, kræver, at et theme framework er meget gennemtænkt
  • Man kan opbygge en brugergruppe omkring et theme framework. Det er Tadlocks brugergrupper et eksempel på. Det kræver så også gode vejledninger og tutorials, hvilket også er vigtigt.

Tadlock opregner en række ting, som et theme framework skal kunne, selv om nogle af disse også bør være standard i andre temaer. Jeg nævner dem i en lidt anden rækkefølge.

  • Fokus på indholdet.
  • Gyldigt XHTML med semantisk-navngivne klasser og id’er. Indholdsfokuset drejer sig altså ikke kun om det umiddelbart visuelle. Det er vigtigt, at det er vel-kodet XHTML, fordi man så kan nå langt med CSS
  • Skudsikkert CSS med mange variationer
  • Dynamiske klasser, så brugerne kan style individuelle elementer i forhold til f.eks., hvilken side den besøgende er på
  • Tillade snart sagt hvilken som helst layout alene ved hjælp af CSS
  • Udstrakt brug af action og filter hooks, så child themes kan erstatte funktioner i forælder-temaet
  • Søgemaskinevenlig – SEO ready eller SEO friendly. Pointen er, at brugerne skal kunne finde indholdet
  • Understøtte populære plugins og løse gængse “problemer” i WordPress
  • Være kompatibel med ældre versioner af WordPress
  • Følge anbefalinger for tilgængelighed, så blinde, svagtseende og andre kan finde rundt og bruge skærmlæsere
  • Bruge mikroformater så godt som muligt
  • Bygge videre på andres erfaringer og fremskridt

Justin Tadlocks sites er – som også nogle af de andres – af meget høj kvalitet. Der skal nok være andre med lige godt materiale, men af og til skal man betale for kigge, og det har jeg valgt fra i denne omgang.

Andre Theme Frameworks

Et tema, der er beregnet til at lade andre bygge ud eller ovenpå, kaldes et theme framework. Den officielle definition på WordPress.org siger, at:

Et ‘theme framework’ er et tema, der er designet til at være et fleksibelt fundament, som kan tjene som et forælder-tema for at skabe ‘child themes’. Brugen af tema-frameworks i WordPress kan lette udviklingen af temaer …

I virkeligheden skal man måske bare, som Alister Cameron skriver i en kommentar til Justin Tadlock, kalde det et basis-tema.

Nogle af dem er oversat til dansk. Carrington Blog, Hybrid, Precious, Sandbox, The Buffet Framework, Thematic og måske også Vigilance er sådanne theme frameworks. Basis hører også til denne gruppe. For en dag eller to siden stødte jeg på Notes Blog Core Theme.

Hvis du vil videre mere

Blandt de temaer, jeg har kigget på i denne sammenhæng, er Hybrid og Thematic meget benyttede. Det kan virkelig betale sig at studere, hvad andre har gjort med disse temaer. Justin Tadlocks Hybrid har masser af materiale. Noget af det er kun tilgængelig, hvis man betaler $25. Man kan dog læse en hel del uden at betale noget.

En udmærket og grundig vejledning er “How to make a child theme for WordPress“. En anden god (men mere kortfattet) vejledning er Child Themes. I det hele taget er der som nævnt et væld af resourcer på Justin Tadlocks ThemeHybrid.com.

Jeg forventer at opdatere dette indlæg hen ad vejen (bl.a. fordi en version ikke blev gemt korrekt, så jeg mistede en del afsnit). Er der ting, der kan forstås eller forklares bedre, eller er der theme frameworks, der burde have været nævnt, så tøv ikke med at skrive en kommentar! 8-) Bemærk, at no-follow er slået fra her på sitet, så du får links tilbage, hvis du kommenterer osv. Så bare skriv løs! Det gælder selvfølgelig også, hvis du har spørgsmål til ovenstående eller kommentarer i al almindelighed.

Update: En del af det, jeg havde skrevet, forsvandt undervejs. Nu har jeg genskrevet et afsnit om Justin Tadlocks Hybrid. Mere følger sikkert hen ad vejen.

[ratings]

Forrige indlæg:

Næste indlæg: