VirtueMart - Aggiungere un campo prodotto
Tags: joomla 2.5 virtuemart
VirtueMart 2.0.x è un ottimo prodotto. Purtroppo è pieno di imprecisioni come il predecessore, arrivato poi alla versione 1.2.0 e scartato quando finalmente era un prodotto maturo.
Credo arriveremo alla stessa triste fine anche per la versione 2.x.
Nel complesso, funziona bene per cose non troppo complesse. Ma se è necessario permettere a qualcuno di agire da front-end o creare un sistema multi-vendor posso garantire che diventa complesso customizzarlo anche se si basa su una buona filosofia e una volta imparato il sistema non è poi difficile la modifica.
Virtuemart 2.0.x nasce con un sistema che concede all'utente di definire campi personalizzati o custom da aggiungere ai prodotti. Molto utile!
Il difetto, è se si vuole un'interfaccia che risulti più intuitiva per l'utente, in quanto in inserimento e modifica, il campo va aggiunto prodotto per prodotto, passando per la scheda Campi personalizzati.
Per questo, se l'intenzione è quella di aggiungere un campo, ma di poterlo mettere nella scheda Informazioni prodotto, cioè quella principale in inserimento e modifica, seguite i seguenti passaggi:
Prima cosa da fare, attraverso phpMyAdmin o un database Manager (come Navicat o MySQL Query Browser per Linux) aprire la tabella tuocod_virtuemart_products e modificarne la struttura inserendo un campo del nome desiderato. Nel mio caso product_year di tipo intero dimensione 4.
Passiamo ora al codice e alle classi PHP da modificare:
La prima classe da modificare la trovate nel percorso tuosito/administrator/com_virtuemart/tables/products.php
Nella prima parte della classe, dove vengono specificati gli attributi, aggiungere il proprio campo personalizzato, ad esempio:
var product_year;
Una volta effettuata questa modifica, siamo pronti per il secondo step.
Aprite il file tuosito/administrator/com_virtuemart/views/product/tmpl/product_edit_information.php
Dopo la seconda riga della tabella HTML, inserire il codice seguente. In questo caso il nostro campo è l'anno di produzione:
<?php $i = 1 - $i; ?>
<tr class="row<?php echo $i?>">
<td ><div style="text-align:right;font-weight:bold;">
<?php echo JText::_('COM_VIRTUEMART_PRODUCT_FORM_YEAR') ?></div>
</td>
<td colspan="3">
<input type="text" class="inputbox" name="product_year" value="<?php echo $this->product->product_year; ?>" size="32" maxlength="255" />
</td>
</tr>
Ora bisogna inserire la chiave nel file ini della lingua di virtuemart, che dovrete andare ad aprire al seguente percorso:
tuosito/administrator/language/it-IT/it-IT.com_virtuemart.ini (Questo file riguarda la lingua nel back-end).
Ovviamente al posto di YEAR dovrà esserci il nome del vostro campo e al posto di anno la descrizione da voi desiderata. Inserire la chiave nel file e salvare:
COM_VIRTUEMART_PRODUCT_FORM_YEAR="anno"
Fate la stessa cosa nel file tuosito/language/it-IT/it-IT.com_virtuemart.ini (Questo file riguarda la lingua nel front-end).
Ora, inseriamo in una view del sito, cioè a front-end il nostro campo anno. Per esempio nella view principale: virtuemart.
Aprire il file tuosito/components/com_virtuemart/views/virtuemart/tmpl/default_products.php
Inserire il seguente codice dove si preferisce la visualizzazione del valore del campo prodotto:
<p>
<?php //Modifica campo Anno
if($product->product_year) echo JText::_ ( 'COM_VIRTUEMART_PRODUCT_FORM_YEAR' ).": ".$product->product_year;
?>
</p>
Il codice soprastante va ripetuto in ogni view dove vi è il bisogno di visualizzare il nuovo campo prodotto, per esempio nella view productdetails.
Ovviamente funzionerà nelle view dove viene richiamato l'oggetto $product. Se avete domande chiedete!
Ed ecco i risultati a back-end:
A front-end, la view virtuemart:
{bwomakase size="468x60"}