Quantcast
Channel: Webkul Blog
Viewing all articles
Browse latest Browse all 5490

Import product image to Joomla VirtueMart from base64 string

$
0
0

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 –

Virtuemart Odoo Connector

For any query regarding Joomla virtuemart plug-ins and add-ons you can communicate with us at:
support@webkul.com


Viewing all articles
Browse latest Browse all 5490

Trending Articles