Skip to main content

User class in VirtueMart, per personalizzare in modo corretto

Dalla versione 1.1.4 di VirtueMart esiste una interessante novità, una funzionalità semplice ma efficace per poter personalizzare il funzionamento dell’applicativo senza interferire con il codice originale e quindi tenendosi aperta la strada degli aggiornamenti di versione. Vi avviso, per capire quanto segue è necessario avere un minimo di competenza di programmazione PHP. Vediamo di che si tratta.

Definizione delle classi

In VirtueMart, la maggior parte delle funzionalità è definita a livello di classe: esiste una classe ps_product per la gestione dei prodotti, una ps_cart per la gestione del carrello, e così via. Una curiosità: il prefisso “ps_” deriva da PhpShop, ovvero il progenitore originale di VirtueMart.

Le classi sono definite nella negli omonimi file della cartella

/administrator/components/com_virtuemart/classes

Troveremo quindi, per esempio, nel file ps_product.php la definizione della classe ps_product.

Fino alla versione 1.1.3, per modificare il comportamento di un metodo o aggiungerne uno nuovo, non avevamo altra scelta che modificare tale file; giocandoci così la possibilità di aggiornare – o meglio, dovendo poi riapplicare tutte le personalizzazioni.

La novità

Dalla versione 1.1.4, invece, ogni classe è stata sdoppiata, creando una classe di riferimento “originale” e una di utilizzo che viene effettivamente istanziata. Ad esempio, ora nel file ps_product.php troverete la classe vm_ps_product e la classe ps_product. Se non tocchiamo nulla, queste due classi sono equivalenti: infatti, la seconda è definita semplicemente come

class ps_product extends vm_ps_product { }

Tuttavia, e qui sta il trucco, questa definizione si applica solo se tale classe non è già stata definita nel nostro tema di VirtueMart. In altre parole, possiamo essere noi a creare una definizione

class ps_product extends vm_ps_product { ... }

mettendoci metodi nuovi o personalizzati. In questo modo, la nostra classe ps_product eredita tutti i metodi e le proprietà della vm_ps_product ma ci permette di aggiungere le funzionalità desiderate.

Istruzioni

Innanzitutto dobbiamo attivare questa opzione nella configurazione di VirtueMart, scheda “sicurezza”:

Abilitare l'inclusione di classi estese dalla cartella del tema?

Il sistema va a cercare la nostra eventuale definizione personalizzata in un punto ben preciso del nostro tema VirtueMart. Ricordo che i temi VirtueMart sono separati rispetto ai template di Joomla e si trovano in

/components/com_virtuemart/themes

Se non avete aggiunto nessun tema, in questa cartella avrete solo il “default“. Consiglio: se vi accingete a fare delle personalizzazioni anche minime, create una copia di questo tema: è sufficiente copiare la cartella “default” e rinominarla, dopodichè nella configurazione di VirtueMart (scheda “sito”) sarà possibile scegliere questo nuovo tema.

All’interno del tema utilizzato, create una cartella chiamata user_class. All’interno di questa cartella, create un file con lo stesso nome di quello che contiene la classe in questione. Ad esempio, se state per ridefinire la classe ps_product, create un file PHP vuoto chiamato ps_product.php. In questo file, create una definizione come quella già vista sopra:

class ps_product extends vm_ps_product { ... }

e poi, all’interno delle parentesi graffe, sbizzarritevi a creare i vostri metodi personalizzati.