THEME() function overloading

2 risposte
Joined: 9 Giu 2008
User offline. Last seen 2 settimane 1 giorno ago.

Vorrei apportare delle modifiche alla funzione che mi da in output i primary links e secondary links per applicare i secondary links in base all'evento onmouseover sul primary link associato.

Ad esempio:
Ho un menu composto in questo modo_
*HOME (primary link) -> [ NEWS - NEWS2] (secondary links associati al primary)
ecc ecc

vorrei che al passaggio del mouse sopra home mi compaiano i relativi secondary links.

Ecco la funzione che mi stampa i primary links, io dovrei overloadare questa funzione per far si che mi stampi anche l'onmouseover con relativi sotto link in un div posizionato piu sotto..

<?php
print theme('links', $primary_links, array('class' => 'links primary-links'));
?>

Il problema è che non riesco in nessun modo a trovare dov'è generata questa funzione (nel tema che sto usando viene semplicemente richiamata come da esempio appena sopra; volevo overloadarla come posso fare? non sono molto esperto in drupal mi servirebbe un esempio sulla linea guida da eseguire per far ciò (ad esempio se devo creare un nuovo file come nominarlo dove posizionarlo ecc)

Ringrazio tutti quelli che si scomoderanno a rispondermi Smiling

Joined: 6 Ott 2007
User offline. Last seen 1 settimana 1 giorno ago.

Ciao, premetto che quel che ti dico è valido solo se il tuo tema usa un PhpTemplate Engine, se non lo sai basta guardare nella directory del tuo tema e vedere se ci sono file con estensione *.tpl.php . Se ci sono stai usando il PhpTemplate Engine e quindi puoi andare avanti.
Dunque la funzione theme($hook, eventuali argomenti ....) , nel tuo caso $hook=links', chiamerà una funzione verificandone l'esistenza nel seguente ordine e logica:

  • chiamerà la miotema_links() se la funzione esiste in /miotema/template.tpl.php
  • chiamerà la phptemplate_links() se la funzione esiste in /themes/engines/phptemplate/phptemplate.engine
  • altrimenti chiamerà la theme_links() che è sicuramente presente in /includes/theme.inc

Occhio perchè certe volte, se viene chiamata una funzione che esegue dei loop (...links è plurale) del tipo theme_links() al suo interno viene sicuramente chiamata la corrispondente al singolare theme_link() ed quest'ultima che generalmente viene implementata:

  • nel tema come miotema_link() in miotema/template.tpl.php
  • oppure nel motore con phptemplate_link in /themes/engines/phptemplate/phptemplate.engine

Ciao spero di non aver creato confusione
Enzo

Joined: 1 Gen 2007
User is online

consiglio spassionato.. dai un occhio al modulo nicemenu Eye-wink

__________________

Ciao
    Mavimo
_________________
Io mio sito su Drupal, CFD e OpenFOAM (e se vi chiedete cosa c'entrano l'uno con l'altro.. bhè, non so nemmeno io la risposta Sticking out tongue )

Condividi contenuti