12. Il theme layer di Drupal
THEME HOOKs
Un “theme hook” è semplicemente il nome
di uno specifico modo per generare il
markup di un insieme di dati grezzi
14. THEME HOOKs
Per definire un novo theme hook,
ovvero creare una nuova funzione
di theming, è sufficiente usare la funzione
hook_theme()
bit.ly/dday14-tb4
15. Il theme layer di Drupal
2 sono i modi
di implementare un
theme hook
16. Il theme layer di Drupal
Theme functions: passare i dati ad una
funzione PHP e restiture del markup
Templates: passare i dati ad un file di
template, un file PHP composto da un mix
di markup e PHP
17. THEME HOOKs
Possiamo ridefinire come
“theme hooks” tutte quelle
funzioni o file di template che
sono state/i specificatamente
registrate/i tramite un
hook_theme()
22. THEME HOOKs
Come utilizzare una funzione di theming:
theme("my_theme_hook", $vars)
theme(“item_list”, $vars)
theme_my_theme_hook($vars)
theme_item_list($vars)
23. THEME HOOKs
Chiamare la funzione di theming usando
theme("my_theme_hook", $vars)
Permette successivamente di fare l’override di quella
funzione nel tema, ad esempio nel file template.php o
nella cartella del tema (se trattasi di template)
24. THEME HOOK
function mythemename_my_theme_hook($variables) {
return '<div>LESS USELESS??</div>';
}
Override di una funzione di theming
ad esempio nel tema (template.php):
25. Il theme layer di Drupal
Drupal 7 Module Development - bit.ly/dday14-tb5
26. La «magia»
della funzione
theme()
Drupal 7 Module Development - bit.ly/dday14-tb5
27. A simplified wiring guide to the Theme Layer
http://john.albin.net/drupal/arrays-of-doom
29. THEME ENGINE
E’ un insieme di script e file che
interagiscono con il core del CMS ed
interpretano il linguaggio di
programmazione utilizzato nel tema
30. THEME ENGINE
A cosa serve un theme engine?
E’ un modo comodo per stampare l’output
temizzabile in vari file di template
piuttosto che utilizzare del semplice PHP
31. THEME ENGINE
Aiuta a separare
la funzionalità
dalla presentazione
Business logic - Presentation logic
(separazione dei contesti)
35. Il theme system di Drupal
Un tema è un insieme
strutturato di codice (al pari di
un modulo) che fornisce degli
strumenti atti a trasformare dei
dati grezzi in un output
strutturato e formattato.
36. Il tema in PHPtemplate
themename.info
page.tpl.php
*.tpl.php
template.php (business logic)
*.js
*.css
37. .info file
Theme Metadata
• Il nome del tema
• La descrizione
• La versione e le informazioni sulla compatibilità
• Il template engine richiesto
• I file CSS globali
• I file JS globali
• Le regioni incluse
• Le impostazioni di default del tema
• etc…
38. .info file
Theme Metadata
• Nome macchina del tema deve essere unico,
non lo stesso di qualche modulo
• Preferibilmente solo lettere, quindi non
mio_tema ma miotema (best practice)
39. .info file
Theme Metadata
Regioni obbligatorie:
regions[page_top] = Page Top
regions[content] = Content
regions[page_bottom] = Page Bottom
Page Top e Page bottom sono regioni nascoste
regions_hidden[] = region_name
46. Template files *.tpl.php
field.tpl.php viene utilizzato solo se
sovrascritto nel tema, in caso
contrario è utilizzata la relativa
funzione di theming
52. Le funzioni di
preprocess e process
Devono essere usate per tutte
le operazioni di business logic
necessarie a livello di
presentation logic
del nostro progetto Drupal
53. Le funzioni di
preprocess e process
Consentono ad un modulo /
tema di alterare o aggiungere
variabili utilizzate da un altro
modulo quando quest’ultimo
chiama un theme hook
54. Le funzioni di
preprocess e process
Ogni theme hook registrato tramite la
funzione hook_theme() ha le sue
funzioni di preprocess e process.
Ogni file di template ha le sue
funzione di preprocess / process
55. Le funzioni di
preprocess e process
Tutte le funzioni di preprocess e process
hanno la seguente forma:
[module]_preprocess_[theme hook name](&$variables)
56. Le funzioni di
preprocess e process
function mymodule_preprocess_item_list(&$variables) {
// Add a class to the list wrapper.
$variables['attributes']['class'][] = 'dday14';
}
60. La «magia»
della funzione
theme()
Drupal 7 Module Development - bit.ly/dday14-tb5
61.
62. Theme Hook Suggestions
Le theme hook suggestions
permettono di effettuare un
override selettivo sia
dei file di template che delle
funzioni di theming