Vous avez installé la version Prestashop 1.4.7 et vous rencontrez un problème lors de la personnalisation (envoi d’images par les internautes pour personnaliser un produit) : l’image n’est pas transférée au serveur.

Login Art vous propose la résolution des deux sources d’erreurs à l’origine du problème.

Nous ne sommes en aucun cas responsable de l’utilisation des codes transmis. Faites une sauvegarde des fichiers d’origine avant toute manipulation.

Le premier problème porte sur l’utilisation de la méthodologie AJAX pour le transfert des images.

Le second problème implique l’utilisation de variables de configuration pour la création des miniatures.

Problème AJAX

Allez dans le fichier js pour modifier le fonctionnement

/themes/prestashop/js/product.js

Attention, si vous utilisez un thème personnalisé, recherchez le fichier dans le dossier de votre thème

/themes/mon_theme_XXX/js/product.js

Allez à la fonction « saveCustomization ».

Commentez l’ensemble de la fonction et placer le code suivant :

function saveCustomization()
{
//v1.4.6
$('#quantityBackup').val($('#quantity_wanted').val());
customAction = $('#customizationForm').attr('action');
$('body select[id^="group_"]').each(function() {
customAction = customAction.replace(new RegExp(this.id + '=\\d+'), this.id +'='+this.value);
});
$('#customizationForm').attr('action', customAction);
$('#customizationForm').submit();
}

L’upload se fait avec rechargement de la page de l’article et non plus via ajax.

Problème des variables de configuration

Allez au niveau du fichier « /controlers/ProductController.php ». Recherchez la fonction « pictureUpload » qui traite l’image envoyée en upload.

Si vous faites le die sur les dimensions utilisées pour créer la mini, vous constaterez qu’il s’agit des valeurs maximales attendues pour un envoi d’image par l’internaute.

Ces valeurs sont définies dans le back office (préférences > produits > largeur / hauteur).

die( 'dim : '.(int)(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')).'x'.(int)(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')));

Code originel :

if ($error OR (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)))
return false;
// Original file
elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName))
$this->errors[] = Tools::displayError('An error occurred during the image upload.');
// A smaller one
elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName.'_small', (int)(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), (int)(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT'))))
$this->errors[] = Tools::displayError('An error occurred during the image upload.');
elseif (!chmod(_PS_UPLOAD_DIR_.$fileName, 0777) OR !chmod(_PS_UPLOAD_DIR_.$fileName.'_small', 0777))
$this->errors[] = Tools::displayError('An error occurred during the image upload.');
else
$cart->addPictureToProduct((int)($this->product->id), $indexes[$fieldName], $fileName);

Code de remplacement :

if ($error OR (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)))
 return false;
 // Original file
 elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName))
 $this->errors[] = Tools::displayError('An error occurred during the image upload.');
 // A smaller one
 elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName.'_small', 100, 100))
 $this->errors[] = Tools::displayError('An error occurred during the image upload.');
 elseif (!chmod(_PS_UPLOAD_DIR_.$fileName, 0777) OR !chmod(_PS_UPLOAD_DIR_.$fileName.'_small', 0777))
 $this->errors[] = Tools::displayError('An error occurred during the image upload.');
 else
 $cart->addPictureToProduct((int)($this->product->id), $indexes[$fieldName], $fileName);

Toute l’équipe Login art vous souhaite un bon e-commerce avec Prestashop 1.4.7, en espérant que ces codes vous éviteront des heures de galère.

Publicités