Utente: Anonymous

La funzione theme()

E' sconsigliato inserire direttamente codice HTML in Drupal, sebbene sia permesso dai formati di input (FilteredHTML,FullHTML). Drupal mette a disposizione delle funzioni proprio per produrre codice HTML personalizzabili all'interno di ciascun tema.

Le funzioni che producono codice HTML, devono però poter funzionare per qualunque tema selezionato. Ad esempio volendo stampare una tabella si può usare la funzione theme_table() o volendo stampare un blocco si può usare la funzione theme_block(). Tutte le funzioni tematizzate di sistema si trovano nel file includes/theme.inc. Ma se, ad esempio, un tema deve visualizzare l’oggetto ‘blocco’ in un modo particolare può essere implementata la funzione theme_block(), chiamandola miotema_block(), ed inserendola nel file template.tpl.php.

A questo punto è necessario che Drupal sia in grado di sapere che esiste una funzione personalizzata ed usare quella invece della funzione di default. Prendondo come esempio la funzione theme_table(), Drupal, nel momento in cui deve chiamare la funzione, verifica, con le priorità indicate, se:

Il tema implementa la funzione

Verifica se la funzione theme_table() è implementata nel tema corrente.
La funzione implementata:

  • si deve chiamare: miotema_table()
  • può stare nel file template.php o in un file .tpl.php del tema

Il motore di template implementa la funzione

Se il tema non implementa la funziona, Drupal verifica se la funzione theme_table() &egrave implementata dal motore di template del tema corrente.
La funzione implementata:

  • si deve chiamare phptemplate_table()
  • può stare:
    • nel file che implementa il motore (es.: phptemplate.engine)
    • nei file .php o .tpl.php del tema (es.: template.php, block.tpl.php)

Il sistema implementa la funzione

Se il motore non implementa la funziona, Drupal chiama la funzione theme_table() implementata da sistema.

La funzione implementata:

  • starà nel file includes/theme.inc

Un help delle funzioni di sistema tematizzate può essere trovato in http://api.drupal.org/api/group/themeable/5?sort=asc&order=Name

La funzione theme()

Quando abbiamo bisogno di chiamare una funzione tematizzata, è bene non chiamare la funzione direttamente, ma lasciare che sia Drupal a fare questo per noi tramite la funzione theme('block',args). Infatti supponiamo di voler visualizzare una tabella all'interno di codice php scritto da noi, la chiamata alla funzione giusta potrebbe essere del tipo:

  function miafunzione() {
  ......
     // stampa tabella
     if (isset('miotema_table') miotema_table(.....);
     elseif (isset('phptemplate_table') phptemplate_table(.....);
     else theme_table();
     ......
  }

Tutto questo può essere semplificato utilizzando la funzione theme() e delegare a Drupal la scelta della funzione corretta:

  function miafunzione() {
  ......
     // stampa tabella
     theme('table',$args);
     ......
  }