Come fare l'override di una funzione di un modulo?

8 contenuti / 0 new
Ultimo contenuto
Come fare l'override di una funzione di un modulo?

Salve a tutti,
sono felicemente un nuovo utente drupal da pochi giorni.
Uso la 5.6 e dovrei modificare il modulo "aggregator" per caricare i feed rss in modo tale che per tutti i feed che ho caricato (ad es. Repubblica.it, Ansa.it, Tizio.it, Caio.it) visualizzi soltanto l'ultima news più recente del feed e quindi l'ultima di Repubblica.it seguita dall'ultima di Ansa.it e così via fino a Caio.it

Mi hanno detto di non toccare proprio il modulo aggregator, ma di ridefinire le funzioni del modulo tramite le api di drupal (mi sembra di aver capito di copiare e incollare la funzione da modificare su template.php e modificarla da lì). Non so da dove partire per il momento. Poi non ci sono documentazioni in italiano a riguardo. Spero in un vostro aiuto. Grazie. Saluti.

Le uniche funzioni diu cui puoi fare l'overriding sono quelle theme_* del modulo, nel tuo caso cerca nel codice del modulo la funzione che ti interessa ridefinire, e copiala nel file template.php che trovi nel tuo tema, modifica theme_ e mettici il nome del tuo tema (per esempio: garland_) e modifica il codice che ti serve.

Ciao
Marco
--
My blog
Working at @agavee

Grazie per il chiarimento. Però non so quale funzione modificare su aggregator.module
Le funzioni con theme_ su aggregator.module sono 5 di cui soltanto una sembra avere la query al database. Mi aiutereste a modificare? Perchè alla fine l'aggregatore di notizie stampa le informazioni in base a molti criteri: per categoria, per sorgente...

Ecco qui ho trovato la funzione da modificare:

function aggregator_page_last() {
  drupal_add_feed(url('aggregator/rss'), variable_get('site_name', 'Drupal') . ' ' . t('aggregator'));
  return _aggregator_page_list('SELECT i.*, f.title AS ftitle, f.link AS flink FROM {aggregator_item} i INNER JOIN {aggregator_feed} f ON i.fid = f.fid ORDER BY i.timestamp DESC, i.iid DESC', arg(1));
}

Adesso dovrei fare la ridefinizione (gia' so cosa modificare) però il nome della funzione non inizia per theme_ quindi come faccio? funziona lo stesso?

Nessuno ha idea di come ridefinire una funzione che non abbia il theme_ ?

no, se non ha teme l'unica cosa che puoi fare e patchare il modulo.

Ciao
Marco
--
My blog
Working at @agavee

Quote:
no, se non ha teme l'unica cosa che puoi fare e patchare il modulo.
"Patchare" intendi che devo fare le modifiche direttamente sul modulo stesso e quindi su aggregator.module, no? Però peccato non ci sia un'alternativa :(

Si, andare a modificare quella funzione, purtroppo (o per fortuna) non è possibile fare l'override di altre funzioni, come se si trattasse di un vero ambiente OOP, ma solo delle funzioni di theming, è un pò come dire che tutte le altre sono funzioni provate della classe, mentre le theme_* sono le uniche pubbliche (anche se poi le non theme_* possono comunque essere richiamate all'esterno come funzioni static.. )
ok, smetto di dire scemate e vado a letto.

Ciao
Marco
--
My blog
Working at @agavee