Du er ikke logget ind: Log ind eller opret profil
 
Artikler

Theming med templates og themable functions

Theming i Drupal bliver primært forbundet med CSS, da man kan styre store dele af layoutet på et Drupal-site med netop CSS. Men med CSS påvirker man ikke selve elementernes output (HTML outputtet). Outputtet påvirker du istedet via templates (filerne der ender med .tpl.php) og themable functions, og det er netop disse 2 emner denne artikel omhandler.
============================================Af Kenneth Nielsen, Submit.dk © Er skrevet med udgangspunkt i Drupal 6. ============================================
Når du installerer Drupal medfølger et antal templates og themable functions. Installerer du derefter eksterne moduler medfølger der sandsynligvis yderligere templates og themable functions.Hvor i webstedet de enkelte templates og themable functions placeres, afhænger af hvilket theme du benytter og hvilke moduler du installerer.
For enkelthedens skyld tager denne artikel udgangspunkt i en basis Drupal 6 installation, som benytter det præ-installerede theme Garland.
Hvis du ønsker at overskrive eksisterende styling, i en installation som ovennævnte, har du 4 muligheder, som gennemgåes i det følgende.

1. Afløse eksisterende templates
 Måden hvorpå eksempelvis et forum-emne bliver vist, bestemmes af en HTML-tabel, som dannes i templaten modules/forum/forum-topic-list.tpl.php. Ønsker du at ændre på en templates output - i dette eksempel en tabel - er det nærliggende at rette direkte i filen, men det er faktisk yderst uhensigtsmæssigt og du bør afholde dig fra det. Næste gang du installerer en opdatering til Drupal, vil rettelserne nemlig blive overskrevet og dermed gå tabt. Istedet bør du lave en såkaldt afløsende template. Det betyder at du skal:

  1. tage en kopi af filen forum-topic-list.tpl.php og placere denne kopi i dit theme (sites/all/themes/navnet_paa_dit_theme)
  2. lave de rettelser du ønsker i den netop oprettede kopi
  3. tømme Drupals cache (administer > site configuration > performance > clear cached data)

 
Dine ændringer vil nu slå igennem, idet en template i selve themet har højere prioritering end en template med samme navn, som ligger udenfor themet.
2. Tilsidesætte templates
Det er muligt at oprette templates, som tilsidesætter de mere generelle templates. Det er specielt nyttigt hvis du ønsker forskellige templates, som benyttes afhængigt af hvilken type indhold, der vises til brugeren. Eksempelvis kan du oprette en template, der udelukkende benyttes såfremt det er selve forsiden på webstedet, der vises for brugeren.
Fremgangsmåden er således:

  1. opret en kopi af den generelle template page.tpl.php fra dit theme (du kan naturligvis også oprette en helt ny template, hvis du ønsker det)
  2. omdøb den netop oprettede kopi til page-front.tpl.php
  3. foretag de rettelser du nu engang ønsker i den nye template
  4. tøm Drupals cache (administer > site configuration > performance > clear cached data)

 
Det er iøvrigt også muligt at oprette en eller flere templates, der kan benyttes til en hel gruppe af sider med samme type indhold. Det kunne eksempelvis være, du ønskede alle sider, som vedrørte webstedets forum, skulle se ud på en bestemt måde.I så fald ville du skulle benytte samme fremgangmetode som nævnt ovenfor. Eneste forskel ville være navngivningen af filen, som i stedet skulle hedde page-forum.tpl.php.
Herunder er vist en række eksempler på andre navngivninger og hvilke sider disse påvirker:

Templatens navn
Påvirker siderne

page-user.tpl.php
Alle bruger-siderne

page-user-1.tpl.php
Bruger-siderne der tilhører brugeren med ID nr. 1

page-blog.tpl.php
Alle blog-sider

page-forum.tpl.php
Alle forum-sider

page-book.tpl.php
Alle book-sider

page-contact.tpl.php
Kontakt-formen (men ikke formens indhold)

page-node.tpl.php
Alle noder

page-node-1.tpl.php
Node nummer 1

 
3. Oprette tilsidesættende funktioner i template.php
I Garland-themet findes filen template.php. Denne fil er 100% valgfri i et theme, men udvikleren af Garland-themet har valgt at oprette en template.php for at have et sted, hvor tilsidesættende funktioner kan samles.En tilsidesættende funktion tilsidesætter, som navnet kraftigt antyder, en anden funktion. Tag eksempelvis funktionen theme_breadcrumb, som ligger placeret i filen includes/theme.inc. Denne funktion udskriver en brødkrumme på webstedet og som adskilletegn mellem de enkelte ord i brødkrummen benytter den >> (to pile).
Ønsker du at rette dette til > (én pil) skal du ikke foretage rettelsen direkte i filen theme.inc, da denne bliver overskrevet ved en eventuelt opdatering af Drupal. I stedet kan du:

  1. oprette en fil med navnet template.php og placere denne i dit theme, så stien bliver sites/all/navnet_paa_dit_theme/template.php
  2. kopiere funktionen theme_breadcrumb fra includes/theme.inc og indsætte den i template.php
  3. omdøbe funktionen i template.php fra theme_breadcrumb til phptemplate_breadcrumb
  4. udføre rettelsen i funktionen phptemplate_breadcrumb (i dette tilfælde, at ændre antallet af pile fra to til een)
  5. tømme Drupals cache (administer > site configuration > performance > clear cached data)

 
Funktionen i template.php tilsidesætter nu funktionen i theme.inc. Når du omdøbte funktionen til phptemplate_breadcrumb skyldes det, at der ikke må forefindes to funktioner med samme navn. Reelt havde du også muligheden for at omdøbe funktionen til navnet-paa-dit-theme_breadcrumb, men det er mere hensigtsmæssigt at benytte navnet phptemplate_breadcrumb, da du dermed kan genbruge din template.php i andre sites, hvor du jo nok vil benytte et andet navn til dit theme. .
4. Tilsidesætte  funktioner med dedikerede template-filer
I stedet for at placere en funktion i template.php kan du lave en dedikeret template til en given funktion. Eller sagt med andre ord, kan du transformere en themable function til en template. Fordelen ved en dedikeret template er, at den er overskuelig, da den kun indeholder én funktion, fremfor metoden med at indsætte tilsidesættende funktioner i template.php, hvor du ofte vil have en lang række funktioner samlet, hvilket alt andet lige gør filen mere uoverskuelig.
Når du opretter en dedikeret template skal du:

  1. oprette en fil, som navngives med funktionens navn, men prefix’et skal slettes og eventuelle underscores skal rettes til bindestreger (eksempelvis ville funktionen theme_progress_bar, som er en funktion der ligger i includes/theme.inc, og som bestemmer outputtet for en statusbar, give en fil med navnet progress-bar.tpl.php)
  2. kopiere selve indholdet af funktionen og indsætte det i den nye template-fil
  3. lave de rettelser du ønsker i den netop oprettede template
  4. tømme Drupals cache (administer > site configuration > performance > clear cached data)
4.75
Din bedømmelse: Ingen Gennemsnit: 4.8 (4 stemmer)

  • Det er gratis
  • Du kan skrive artikler og tips
  • Du kan få hjælp eller hjælpe andre 
  • - og meget mere …