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.
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.
Data is in the database and it will not show up.
VirtueMart 1.1.5
flypage.tpl.php
This is what I added
$tpl->set( “show_date”, $show_date );
Sorry…
This is what I added
shop.product_details.php
$productArray[“show_date”] = $show_date; //not sure if I needed that.
$tpl->set( “show_date”, $show_date );
flypage.tpl.php
Thank you so much !
Well written and efficient.
You made my morning !
Hi thank you very much for great help! if anyone can explain how to print reports in Inventory section with required fields in VM will be great!
Clonidine Illegal Drugs http://www.suhaybalabsi.com/ – nolvadex online
Doctors usually take great care in prescribing Novaldex because they know that it can cause some serious side effects cannot be ignored. [url=http://www.suhaybalabsi.com/]nolvadex 20mg[/url]
For those who have faced problem to display newly added field on product details page, I have solution. I have successfully display my new field by add below code into your flypage.
(in reference of above article)
I have used Virtuemart version 1.1.6
For those who have faced problem to display newly added field on product details page, I have solution. I have successfully display my new field by add below code into your flypage.
echo $nc_product_new_field;
(in reference of above article)
I have used Virtuemart version 1.1.6
I know this is an old post but most of it still applies, however, in Vmart 1.1.9 this file no longer exists: /administrator/components/com_virtuemart/html/templates/product_details/flypage.php
I have done the other steps and added to my flypage but it doesn’t yet work. Can anyone tell me what is different for v1.1.9?
wow thank you for such a nice post…. i really close to my goal, maybe you can still help me:
i want to sell airtime.
regards
@Dallas,
Hey I am having the same problem also in VM 1.1.8.
The flypage.php file not appear in the administrator area. Perhaps the “the field display” that is supposed to be added in this none-existent file should be added elsewhere in the administrator area?
Please help. Thanks!
Found solution with missing flypage.php in admin section of VM!
Since /administrator/components/com_virtuemart/html/templates/product_details/flypage.php doesn’t exists anymore in these latest versions, ignore this edit.
Instead:
Change $template = str_replace( “{my_publication_date}”, $db_product->f(“my_publication_date”), $template );
to
$db_product->f(“my_publication_date”);
$tpl->set(‘my_publication_date’, $my_publication_date);
…and then you can add this to the flypage in the components->virtuemart->themes->flypage you are using section.
echo $my_publication_date;
This is for VM 1.1.8 and later (possibly earlier versions).
This article was a LIFESAVER! I have been struggling with a work around to this very problem that used the custom attributes field. It was not working very well. This is working perfectly! Thank you, Thank you, Thank you!
This was extremely helpful. Thank you very much!
I don’t suppose you have any idea how to build a search form that searches on these new fields do you?!
Hi !
This is very great, I just add a technical description for my product table.
If you know about how to make a quick order form to let the customer quick add the product to their cart.
let me know , thank very much !
588199 983911I notice there is surely lots of spam on this weblog. Do you need to have support cleaning them up? I may possibly support between courses! 77832
is there a tutorial for v 2.x