Kenneth Falck's Blog

Home › Drupalin teemojen kustomointi sivukohtaisesti

Drupalin teemojen kustomointi sivukohtaisesti

 

Opiskelin taas hiukan lisää Drupalia tästä mainiosta kirjasta. Nyt selvisi sekin, miten teemoissa voi helposti tehdä erilaiset layoutit eri sivuille tai sisältötyypeille.

Oletuksena sivupohjana on page.tpl.php. Etusivulle on erikoistapaus page-front.tpl.php, jolla voi siis kustomoida etusivun erilaiseksi. Jos taas URLina on vaikkapa /uutiset/kategoria/otsikko, niin Drupal etsii sivupohjia tässä järjestyksessä ja valitsee niistä ensimmäisenä löytyneen:

  1. page-uutinen-kategoria-otsikko.tpl.php
  2. page-uutinen-kategoria.tpl.php
  3. page-uutinen.tpl.php
  4. page.tpl.php

Sisältönoodeille puolestaan on normaalisti pohjana node.tpl.php. Se saa muuttujan $page=true silloin, kun ollaan näyttämässä noodia omalla sivullaan. Jos noodi taas esitetään osana listausta, niin $page=false. Kun katsellaan sisältöä, jonka tyyppi on "contenttype", niin Drupal etsii sivupohjia tässä järjestyksessä:

  1. node-contenttype.tpl.php
  2. node.tpl.php

Blokeille on vastaava järjestelmä, jonka oletuspohjana on block.tpl.php. Niitä voidaan kustomoida joko moduulin nimen tai regionin (sivupohjan alue, jonne blokki on sijoitettu) mukaan. Delta on tässä moduulin blokkien järjestysnumero, jota käytetään silloin, kun moduuli tarjoaa useita blokkeja:

  1. block-modulename-delta.tpl.php
  2. block-modulename.tpl.php
  3. block-region.tpl.php
  4. block.tpl.php

Näillä eväillä Drupalilla toteutetun saitin ulkoasun voi kustomoida oikein joustavasti halutulla tarkkuudella.

 

Comments

kennu

Tässä on toinen mielenkiintoinen vinkki käyttäjärekisteröinnin kustomoimiseen paremmin:

http://www.chapterthree.com/blog/matt_cheney/howto_fully_theme_and_custo...

kennu

Ja tuohon vielä neuvo, miten sama homma toimii Drupal 6:ssa: http://drupal.org/node/289194

kennu

No, tämä yksinkertaistuikin vielä enemmän lisäämällä vain saitin teeman template.php:hen tällainen funktio:

function teemanimi_theme() {
return array(
'user_register' => array(
'arguments' => array('form' => null),
'template' => 'user-registration-form'));
}

Ja sitten voi luoda oman user-registration-form.tpl.php:n, jossa on esimerkiksi tällainen sisältö:

<?php foreach ($form as $field => $value): ?>
<?php if (substr($field, 0, 1) != '#'): ?>
<?php echo drupal_render($value); ?>
<?php endif; ?>
<?php endforeach; ?>

Tuota muokkailemalla voi tehdä rekisteröitymislomakkeen kentille mitä haluaa...

kennu

Valehtelin hiukan tuossa alkuperäisessä artikkelissa. Page-templatejen tunnistus meneekin alkuperäisen nimen mukaan, esim. node/123. Tässä artikkelissa on neuvottu, miten sen saa menemään aliasten mukaan: http://drupal.org/node/139766