News:

You may pay someone to create your store, or you visit our seminar and become a professional yourself with the silver certification

Main Menu

Image - media data migration errors

Started by AH, July 18, 2013, 21:35:29 PM

Previous topic - Next topic

AH

Migrating images causes the new images to have very poor titles and alts stored

These are then used in displays!  Not so good.

Without these

Line 395
Still not happy about the filename being the file_title

Has anyone actually checked what a poor result this gives??



'file_title' => $file['filename'],
    'virtuemart_vendor_id' => 1,
//quorvia change
//     'file_description' => $file['filename'],
//     'file_meta' => $file['filename'],
'file_description' = "",
'file_meta' = "",    
//quorvia end   




Note if you do this the default_images.php will not show an alt attribute (v.bad)

At least if the file_meta (alt) and file_title (title) is not available the product name should be used?



jQuery(".additional-images .product-image").click(function() {
jQuery(".main-image img").attr("src",this.src );
jQuery(".main-image img").attr("alt",this.alt );
jQuery(".main-image a").attr("href",this.src );
jQuery(".main-image a").attr("title",this.alt );
});



Regards
A

Joomla 4.4.5
php 8.1

mbarry

Agree assigning filenames results in unreadable titles and alt text.

My solution was to populate the file_description and file_meta entries with the associated category and product names during the portCategory() and portProduct() migration process

administrator/components/com_virtuemart/helpers/migrator.php

For portCategory()

                                $catModel->setId(0);
$category_id = $catModel->store($category);
$errors = $catModel->getErrors();
if(!empty($errors)){
foreach($errors as $error){
vmError('Migrator portCategories '.$error);
$ok = false;
}
break;
}
// Add these lines
if(!empty($category['virtuemart_media_id'])) {
$this->_setMediaAttributes($category['virtuemart_media_id'], $category['category_name'], 'category');
                                }


For portProduct()

if(!empty($errors)){
foreach($errors as $error){
vmError('Migration: '.$i.' ' . $error);
}
vmdebug('Product add error',$product);
$productModel->resetErrors();
$continue = false;
break;
}
// Add these lines
if(!empty($product['virtuemart_media_id'])) {
$this->_setMediaAttributes($product['virtuemart_media_id'], $product['product_name'], 'product');
}



Create this new function

/**
* Sets the Media attributes file_description and file_meta based on the provided medianame
* These fields don't exist in VM1 so we use the category, product or vendor name instead
*
* @author M. Barry
*
*/
function _setMediaAttributes($mediaId, $mediaName, $type) {

$mediaName = $this->_db->getEscaped($mediaName);

$q = 'UPDATE `#__virtuemart_medias` SET `file_description`="'.$mediaName.'", `file_meta`="'.$mediaName.'" WHERE `virtuemart_media_id` = "'.$mediaId.'" AND `file_type`="'.$type.'"';

$this->_db->setQuery($q);
if(!$this->_db->query()){
$this->_app->enqueueMessage('set Media Attributes failed to update query '.$this->_db->getQuery());
$this->_app->enqueueMessage('and ErrrorMsg '.$this->_db->getErrorMsg());
}
}



This could be extended for Manufacturer and Vendor Images as well.


AH

Mbarry

I decided to leave the data alone in the migration and manipulate the image.php

If there is data, it uses it, otherwise it uses the item description  saves having to key it in during product creation.. That can be a real pain especially if you decide to change description and forget the ALT
Regards
A

Joomla 4.4.5
php 8.1

mbarry

Good point. I can certainly see benefits of populating this at run-time using product or category names.