Nel vBulletin 3.6.x (e forse anche 3.5.x e precedenti) la scelta del template da usare nelle sezioni che stampano posts ed entries viene delegata alla classe vB_Postbit_Factory (che istanzia la classe Vb_Postbit) il cui scopo è quello di di preparare i dati alla visualizzazione.
Il template utilizzato da tutte le classi che estendono Vb_Postbit è ‘postbit’ o, nel caso in cui valga l’affermazione $this->registry->options['legacypostbit'], postbit_legacy (con le info utente a sinistra, come nella 2.x).
Le classi che estendono Vb_Postbit sono:
- vB_Postbit_Announcement
- vB_Postbit_Pm
- vB_Postbit_Usernote
- vB_Postbit_External
- vB_Postbit_Post_Ignore
- vB_Postbit_Post_Ignore
- vB_Postbit_Post_Global_Ignore
- vB_Postbit_Post_Deleted
Ciò significa che con una semplice plugin attivata sull’hook postbit_display_complete sarà possibile forzare il $this->templatename su uno di nostra scelta.
La plugin più semplice che potrò realizzare a partire da queste premesse sarà :
product: “vBulletin”
hook: “hook postbit_display_complete”
titolo: “change postbit template”
execution order: “5″
code:
if(strtolower(get_class($this)) == 'vb_postbit_pm')
$this->templatename = 'pm_postbit';
Nota: in PHP 4 la funzione string get_class ( [object $object] ) restituisce la stringa lowercase col nome della classe dell’oggetto passato come parametro; a partire da PHP 5 la stessa funzione ritorna la notazione originale della classe.
Per ovviare a questo inconveniente, non potendo prevedere la versione del PHP sul quale girerà il vbulletin, sarà bene forzare a minuscolo il nome della classe con una string strtolower ( string $str ).