In Joomla VirtueMart 3.0.x we can add a product image corresponding to a Joomla VirtueMart product id. The listed article describes the product image upload and its entries to be made at Joomla VirtueMart from a base64 converted string for an image.
As you will see, Joomla VirtueMart takes configurations and particular name convention to create and save an image at its end, that are covered in the listed code.
<?php /** * Webkul Software. * * @category Webkul * @author Webkul * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com) * @license https://store.webkul.com/license.html */ // no direct access defined('_JEXEC') or die('Restricted access'); if(!class_exists('VmConfig')){ require(JPATH_ADMINISTRATOR.'/components/com_virtuemart/helpers/config.php'); } if(!class_exists('Img2Thumb')){ require(JPATH_ADMINISTRATOR.'/components/com_virtuemart/helpers/img2thumb.php'); } /** * saveImageToVirtuemart save base64 string to virtuemart product * @param string $base64_string image converted to base64 string * @param int $virtuemart_product_id virtuemart product id * @return none */ function saveImageToVirtuemart($base64_string, $virtuemart_product_id){ $img_name = md5(time().uniqid()); $extension = 'jpg'; //get to be save media path $media_product_path = VmConfig::get('media_product_path') == ''?'images/stories/virtuemart/typeless/' : VmConfig::get('media_product_path'); //get to be save media thumb path $media_product_thumb_path = VmConfig::get('media_product_path') == ''? 'images/stories/virtuemart/product/resized/images/stories/virtuemart/typeless/' : VmConfig::get('media_product_path').'resized/'; $save_file_url = JPATH_SITE.'/'.$media_product_path; $file_name = $img_name.'.'.$extension; //final media path with name and extension $output_file = $save_file_url.$file_name; // save image to directory writeImageToDirectory($base64_string, $output_file); $img_width = (int)(VmConfig::get('img_width') == 0? 90: VmConfig::get('img_width')); $img_height = (int)(VmConfig::get('img_height') == 0? 90: VmConfig::get('img_height')); $thumb_fileout = $save_file_url.'resized/'.$img_name .'_'.$img_width.'x'.$img_height.'.' . $extension; // convert and save thumb media $objthumb = new Img2Thumb($output_file, $img_width, $img_height, $thumb_fileout,'', 255, 255, 255); $file_url = $media_product_path.$img_name.'.'.$extension; $file_url_thumb = $media_product_thumb_path.$img_name .'_'.$img_width.'x'.$img_height.'.' . $extension; // get login user id $user = JFactory::getUser(); $userId = $user->get( 'id' ); // insert to VM medias $db = JFactory::getDbo(); $query = $db->getQuery(true); $columns = array('virtuemart_vendor_id', 'file_title', 'file_mimetype', 'file_type', 'file_url', 'file_url_thumb', 'file_is_product_image', 'file_is_downloadable', 'file_is_forSale', 'shared', 'published', 'created_by', 'modified_by', 'locked_on', 'locked_by'); $values = array(1,$db->quote($file_name), $db->quote('image/jpeg'), $db->quote('product'), $db->quote($file_url), $db->quote($file_url_thumb), 0, 0, 0, 0, 1, (int)$userId, (int)$userId, $db->quote('0000-00-00 00:00:00'), 0); $query->insert($db->quoteName('#__virtuemart_medias')) ->columns($db->quoteName($columns)) ->values(implode(',', $values)); $db->setQuery($query); $imgsuccess = $db->execute(); // insert to VMProductMedias, pass VMproduct id in second parameter if($imgsuccess){ saveToVmProductMedias($db->insertid(), $virtuemart_product_id); } } /** * writeImageToDirectory save image file to directory * @param string $base64_string base64 encoded string * @param string $output_file final media path with name and extension * @return none */ function writeImageToDirectory($base64_string, $output_file) { $file = fopen($output_file , 'w') or die(JText::sprintf('COM_VIRTUEMART_ERP_CAN_NOT_OPEN', $output_file)); fwrite($file, base64_decode($base64_string)); fclose($file); } /** * saveToVmProductMedias save thumd image of product * @param int $insertid last media insert id * @param int $virtuemart_product_id product id * @return none */ function saveToVmProductMedias($insertid, $virtuemart_product_id){ $db = JFactory::getDbo(); $query=$db->getQuery(true); $columns=array($db->quoteName('id'),$db->quoteName('virtuemart_product_id'),$db->quoteName('virtuemart_media_id'),$db->quoteName('ordering')); $values=array($db->quote(''),$db->quote($virtuemart_product_id),$db->quote($insertid),$db->quote('')); $query->insert($db->quoteName('#__virtuemart_product_medias')) ->columns($columns) ->values(implode(',',$values)); $db->setQuery($query); $db->execute(); }
Usage
Manual image upload is useful in many extensions, mostly connectors where data from an end has to be imported into VitueMart. One of it has been implemented in –
For any query regarding Joomla virtuemart plug-ins and add-ons you can communicate with us at:
support@webkul.com