Ho utilizzato la hook_theme per cose relativamente semplici, purtroppo però non sono in grado di utilizzarla come si deve per rispondere ad altre necessità.
Tra l'altro ho letto le API, però non ho risolto tutti i miei dubbi.
In un tema, posso inserire i tpl che mi vanno, seguendo una serie di regolette per dar loro un nome rintracciabile dal core.
Via modulo, invece, devo utilizzare la hook_theme per importare i tpl di riferimento, altrimenti sono file inutili.
Con un modulo dovrei customizzare struttura e stile di alcuni blocchi depositati nella regione content, con una page definita. Ancora indeciso se overridare il tpl block- o block- (mi pare fosse questo l'ordine).
Vorrei sapere, in linea generale, quale set di istruzioni mi permette di poter fare questo lavoro? Se un tema importa uno stesso tpl del modulo, chi dei due ha precedenza?
Grazie.
Puoi aggiungere altri template nella tema tramite la funzione
MIOTEMA_preprocess_page
oMIOTEMA_preprocess_node
, entrambi intemplate.php
- devi solo aggiugerlo ai variabili:$vars['template_files'][] = 'felagund-template';
Partendo con l'ultima domanda: il tema ha precedenza. Per esempio block.tpl.php di default (quello in modules/system) viene usato di solito, ma se lo copia nel tema e poi lo madifica, vedi le modifiche. Tema > Modulo.
Per la prima domanda (o conferma) si, l'ordine è (includes/theme.inc):
$variables['template_files'][] = 'block-'. $variables['block']->region;
$variables['template_files'][] = 'block-'. $variables['block']->module;
$variables['template_files'][] = 'block-'. $variables['block']->module .'-'. $variables['block']->delta;
Questa lista va sempre letta alla rovescia finchè non trova un template con quel nome. Così usa
block-[modulo]
solo se non c'è unblock-[modulo]-[delta]
, eblock-[regione]
solo se non c'è unblock-[modulo]
.Ovviamente puoi accodare altri template nella lista (che avranno la priorità) tramite il tuo modulo usando la funzione
MIOMODULO_preprocess_HOOK
- descritto meglio in theme(). Chiaro che se il file template (tpl.php) viene copiato nel tema quella versione avrà la priorità.HTH
John
Più imparo, più dubito.
Grazie della risposta, adesso ho capito qualcosa in più e mi son accorto che alcune cose che hai scritto le sapevo già! O.o
Attraverso hook_theme, sono in grado di definire delle funzioni che, presi dei parametri, restituiscono l'html dei dati. Riesco anche, via template.php, ad eseguire degli override di funzioni già implementate altrove.
Ciò che non riesco via hook_theme è definire i nuovi tpl o ad eseguire l'override di tpl già definiti, il tutto via modulo. Io so che, definendo un tpl, poi mediante una funzione si settano le variabili utilizzate poi nel tpl stesso.
Nel caso del posto precedente, vorrei fare override di un tpl che non esiste, ma che potrebbe essere implementato dal tema e caricato automaticamente, in questo caso
block-<qualcosa>.tpl.php
e implementare un custom tpl come lo è ad esempio block-tpl o node.tpl.Grazie.