Out of box, VirtueMart products have many “fields”, product name, sku, price, etc. If you need an additional field or two for your own business needs, you can do that by changing data model as well as some php code. It’s a bit of work … hope this post can help save you some time and effort.
Modify Data Model
First, data model needs to be modified to add the column. If you used the default prefix, the sql command will be something like:
alter table jos_vm_product add (
nc_product_new_field varchar(200) null
);
It’s best to name the new field with your own fix so down the road you can easily remember that it’s your field, not what comes with VirtueMart.
Admin Interface
File: /administrator/components/com_virtuemart/html/product.product_form.php
This is where the product add/edit form is coded. Find a place for your new field, and add the form input.
<tr>
<td>
<div style="text-align:right;font-weight:bold;">
My Publication Date: (yyyy-mm-dd)
</div>
</td>
<td width="79%">
<input type="text" class="inputbox" name="my_publication_date" value="<?php $db->sp("my_publication_date"); ?>" size="32" maxlength="255" />
</td>
</tr>
Product Class
Most files of VirtueMart component is defined in the administrator section. In file /administrator/components/com_virtuemart/classes/ps_product.php
Modify two functions: add() and update(). Make sure the new field is included in the SQL statement.
At this point, you can add new product with this additional field and also modify the new field using VirtueMart administrator interface. Now, you will need to modify the front-end product details page to display the new field.
Product Details Page
There are two files you need to change. One is the template page. (Again, this file is in the administrator section.) In file /administrator/components/com_virtuemart/html/templates/product_details/flypage.php, you add the new field display. For example, {my_publication_date}.
Also you need to change file: /administrator/components/com_virtuemart/html/shop.product_details.php. You will set the value for the new field here.
$template = str_replace( "{my_publication_date}", $db_product->f("my_publication_date"), $template );
What Else?
If you like to display the new field in the browse page, etc. just find the right template as well as the corresponding php page to pull out value for the template.

I m really thank full for this article as it helped me in locating where exactly the product insert query is being executed..
Thanks a lot
You are awesome! This is exactly what I needed. I started trying to track this down myself and realized it could take me all night to figure this out.
Thanks!
Could you publish your code for the two functions: add() and update() in ps_product.php ?
My modifications do not seem to work, maybe because of syntax differences between VM 1.0 and 1.1 ?
Thank you.
Michael.
Hello webmaster
I would like to share with you a link to your site
write me here preonrelt@mail.ru
This tutorial was soooooooooooo helpful. Thank you.
You mentioned at the bottom that you can display the info in other pages such as the “browse” page.
I want to do exactly that, but can’t quite get it to work? Which files need to be modified, and what are the mods?
your help is very appreciated… thank you again for this great tutorial.
Thanks
Daniel,
Glad that you found this post helpful.
I didn’t have chance to try the code out for adding the new field to the browse page, but here is what I think you should do … please post back after you try out and let us know if it works.
Thanks. — Lin
=============
There are two files you need to change. Similarly, one is the template page (in the administrator section). In file /administrator/components/com_virtuemart/html/templates/browse/browse_1.php (the browse template you have opted to use, configurable through virtuemart interface), you add the new field display. For example, {my_publication_date} to where you see appropriate.
Then change file: /administrator/components/com_virtuemart/html/shop.browse.php. You will set the value for the new field here.
Look for:
/*** Start printing out all products (in that category) ***/
while ($db_browse->next_record()) {
within this while loop, add:
$my_publication_date = $db_browse->f(“my_publication_date”);
then look for the code for $product_cell, and add:
$product_cell = str_replace( “{my_publication_date}”, $my_publication_date, $product_cell );
I tried it, but it not works. I have VM 1.1.2
By adding new product, it wrote that adding was unsuccessfull. And product was not saved.
By editing existing product it wrote that update was success, but when I reopen same produt, i do not see any changes. My new added field is null.
I saw into database, and result was the same, my field was null.
Can anybody help me please ? Thanks
hello
I was so happy when reading this post, finally I will have an answer to my problem.
I’ve tried to implement it but unfortunately it doesn’t work
When I updade my record manually in the DB, I can retrieve the information in my back office (step 1) but when I want to update it via the back office, I always get an empty value in the record.
Does somebody had the same problem and solved it?
thanks for the help.
Cheers
Luc
Luc,
I would check the name of the new input box in file: /administrator/components/com_virtuemart/html/product.product_form.php, make sure the name matches the new field as in the SQL statement in the add() and update() in file /administrator/components/com_virtuemart/classes/ps_product.php.
– Lin
hello Lin,
thanks a lot for your quick reply!
Regarding the product.product_form.php, I’m sure I’m using the right name as the backoffice is showing me the information I encoded manually in the DB.
Regarding the ps_product.php, I update the Add() and update () sections, by adding in both
'product_year' => vmRequest::getFloat('product_year'),Do I need to update something else?
thanks again for your reply
Luc
hello Lin
you were right! in the /administrator/components/com_virtuemart/html/product.product_form.ph, I didn’t pay attention enough the name attribute!
So, thank you so much for taking the time to write this procedure. I’ve been searching so much for this, and today I got it .
All kudos are for you!
have a nice day
Luc
Thanks Luc for the update and for your kind words. I am glad that it worked for you.
– Lin
it’s very nice…….
thx a lot
Thanks for sharing these precious bits of knowlegde !!! Your article has been quite useful. Regards from Italy
Hello,
thanks for this post. It helped me a lot. All is working for me in the admin area. But it’s not possible for me to get access from the template browsepage. I can get product_weight, product_hight … but not my own fields. I have VM 1.1.3.
I edited /administrator/components/com_virtuemart/html/shop.browse.php, but /administrator/components/com_virtuemart/html/templates/browse/browse_1.php is not available. My browsepage is in the theme directory.
Can you please give a hint wehre i can search!
Regards Hartmut
Hi, thank you so much for this hack and I follow you step by step and for the flypage I’ve done something like this http://forum.virtuemart.net/index.php?topic=50566.0
What I want to achieve is instead of Product Dimension & Weight have Car specifications as is gonna be for a garage. Therefor, as a test, I’ve created product_color in db, and Ive added it to all these files
/administrator/components/com_virtuemart/html/product.product_form.php
/administrator/components/com_virtuemart/classes/ps_product.php
/administrator/components/com_virtuemart/html/templates/product_details/flypage.php
/administrator/components/com_virtuemart/html/shop.product_details.php
/administrator/components/com_virtuemart/languages/product/english.php
Good back and front end, seems that the site transfers the data properly, the big thing is that in the Color field I can only fill with a number, if I enter blue for instance it would come back with 0 (zero).
In the db have created the field like this:
product_color varchar(200) utf8_general_ci Yes NULL (actions: primary, index, unique, fulltext all checked).
Why can I only enter a number value?
Regards
babycatface,
Maybe you can check the add() and update() functions to see if the data type there for the new fields was correct … if need further help, please feel free to post your SQL statement here.
Thanks.
– Lin
Hartmut,
I don’t think that I have VM 1.1.3. I will try to find the answers for you and post here if I could. If you find the answers, please post as well.
Thanks.
– Lin
[...] (this is a helpfull article – Add a New Field to Products in Joomla! VirtueMart) [...]
Hey there,
Great blog – really helpful. I was just curious, I have done your fix, but have a CSV file I’m trying to import with CSV Improved – it doesn’t recognise my new fields as available fields ??
Anythoughts you might could share ?
Thanks for your post
Hi,
I found those information very interresting, but I’m a bit lost.
I’ve done most of the things explained here, but I’m not sure where to update the add() and update().
It would be very kind of you if you could take some time to explain me or give me an even more detail tutorial.
Regards,
Germain
These functions are not in /administrator/components/com_virtuemart/classes/ps_product.php:
add() and update() … I try to search for them in all files and can’t find add() or update() … I am using 1.1.4 version. So, I am lost like Germain …. any help much appreciated
Wonderful help…
Much appreciated!
gr8
This help did save me a lot of time sofar, but do I overlook something?
I could create some extra product fields. insert/update in database works fine.
I did adjust the flypage so the extra fields will show, but they don’t.
I’m using VM 114. Can anyone help me with the last step?
Kind regards,
Bart
If someone creates and extension for VM that does this it will be fantastic. I can see use for something like this beyond regular e-commerce.
Simply using the the cataloging function alone, you can turn it into something useful for other verticals like real estate, auto etc..
vj
Hey I was wondering if anyone was successful in getting the new filed to publish on the product listing and product detail views.
If so, can you provide some insight as to how it’s done.
Okay, I was able to get it to show using the information from this link
http://forum.virtuemart.net/index.php?topic=67123.0
Really good yar
Really good yar dfasdfasdf
Thanks a million! You saved me the effort of finding where the add and updates were done!
This blog article sounds really good. I’ve wanted to add couple of fields for sometime now. Finally found your article.
Will implement it and if it works i’ll be jumping up and down.
Many thanks.