jml258 Posted January 5, 2011 Share Posted January 5, 2011 BonjourJ'ai besoin de permettre à mes clients d'uploader des fichiers pdf et de pouvoir les prévisualiser.J'utilise pour cela le champ de personnalisation "image" amélioré par ce script: [CONTRIBUTION] Allow Customers to upload PDF’sÇa marche super. Maintenant j'ai besoin d'un petit coup de main pour y intégrer une prévisualisation des fichiers.Apparemment le plus simple est de faire appel à ImageMagick pour la génération des images à partir du pdf, mais je ne suis pas développeur et j'ai du mal à voir où appeler la fonction.Voici le code dans le fichier product.php: function isPDF($file) { /* Detect mime content type */ $mime_type = false; $types = array('application/pdf'); if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME); $mime_type = finfo_file($finfo, $file['tmp_name']); finfo_close($finfo); } elseif (function_exists('mime_content_type')) $mime_type = mime_content_type($file['tmp_name']); elseif (function_exists('exec')) $mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name']))); if (empty($mime_type) || $mime_type == 'regular file') $mime_type = $file['type']; if (($pos = strpos($mime_type, ';')) !== false) $mime_type = substr($mime_type, 0, $pos); // is it a picture ? return $mime_type && in_array($mime_type, $types); } function pictureUpload(Product $product, Cart $cart) { global $errors; if (!$fieldIds = $product->getCustomizationFieldIds()) return false; $authorizedFileFields = array(); foreach ($fieldIds AS $fieldId) if ($fieldId['type'] == _CUSTOMIZE_FILE_) $authorizedFileFields[intval($fieldId['id_customization_field'])] = 'file'.intval($fieldId['id_customization_field']); $indexes = array_flip($authorizedFileFields); foreach ($_FILES AS $fieldName => $file) if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name'])) { $fileName = md5(uniqid(rand(), true)); if (($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) && (!isPDF($file))) { $errors[] = $error; return false; } if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) { return false; } if (isPDF($file)) { $fileName = "P" . $fileName; if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $oldfile = './img/pdf.jpg'; } else { $fileName = "J" . $fileName; if (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $oldfile = $tmpName; } if (!imageResize($oldfile, _PS_PROD_PIC_DIR_.$fileName.'_small', intval(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), intval(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')))) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } if (!chmod(_PS_PROD_PIC_DIR_.$fileName, 0777) OR !chmod(_PS_PROD_PIC_DIR_.$fileName.'_small', 0777)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $cart->addPictureToProduct(intval($product->id), $indexes[$fieldName], $fileName); unlink($tmpName); } return true; } Est-ce que quelqu'un peut me donner un petit coup de main ?Merci Link to comment Share on other sites More sharing options...
pacosxm Posted January 5, 2011 Share Posted January 5, 2011 Sous quelle version de Prestashop est-tu ?Car j'ai eu beau suivre le tuto, moi sous Prestashop 1.3.3 ça ne marche pas du tout... Link to comment Share on other sites More sharing options...
jml258 Posted January 6, 2011 Author Share Posted January 6, 2011 SalutJ'ai la 1.3.5.Je crois qu'il faut bien régler la taille maxi des fichiers dans "Préférences>Produits>Taille maximum des images produits" (en octets) et dans le fichier config/config.inc.php @ini_set('upload_max_filesize', '100M'); pour que ça fonctionne. Link to comment Share on other sites More sharing options...
pacosxm Posted January 6, 2011 Share Posted January 6, 2011 oui ça pas de problème... ('upload_max_filesize', '100M');et sa relation avec le BO reference / outils (100 Mo = 104857600 octets) exactement si ça peu aidermais si ça a été ok pour toi tu pourrais me dire quel product.php je dois modifier ? - celui de "base" ou celui de l'admin...quelle lignes exactement à changer ? genre de 9 à 41...il précise de revenir dans l'admin pour le 2eme code (donc je sous-entend que c'étais là dans l'admin, mais mon Anglais est nul)...je reste dans le flou... et avec un resultat de page blanche et bug total...Si tu veux bien développer un petit tuto sur ce qui t'a permis ce résultat, je pense que tu rendra un grand service aux novices comme moi ... merci d'avance Link to comment Share on other sites More sharing options...
jml258 Posted January 6, 2011 Author Share Posted January 6, 2011 C'est le product.php de la base qu'il faut modifier.Je pense que les numéros de lignes changent d'une version à l'autre, chez moi la fonction est de la ligne 8 à 40.Pour trouver la fonction dans le fichier, fait une recherche dans ton document avec "function pictureUpload". Le fichier displayImage.php se trouve lui dans l'admin.Ensuite, le fichier product.tpl c'est celui à la racine du thème.Je te traduis le post original:1. Effacez la fonction pictureUpload du fichier product.php (celui qui se trouve à la racine) et remplacez-la avec: function isPDF($file) { /* Detect mime content type */ $mime_type = false; $types = array('application/pdf'); if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME); $mime_type = finfo_file($finfo, $file['tmp_name']); finfo_close($finfo); } elseif (function_exists('mime_content_type')) $mime_type = mime_content_type($file['tmp_name']); elseif (function_exists('exec')) $mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name']))); if (empty($mime_type) || $mime_type == 'regular file') $mime_type = $file['type']; if (($pos = strpos($mime_type, ';')) !== false) $mime_type = substr($mime_type, 0, $pos); // is it a picture ? return $mime_type && in_array($mime_type, $types); } function pictureUpload(Product $product, Cart $cart) { global $errors; if (!$fieldIds = $product->getCustomizationFieldIds()) return false; $authorizedFileFields = array(); foreach ($fieldIds AS $fieldId) if ($fieldId['type'] == _CUSTOMIZE_FILE_) $authorizedFileFields[intval($fieldId['id_customization_field'])] = 'file'.intval($fieldId['id_customization_field']); $indexes = array_flip($authorizedFileFields); foreach ($_FILES AS $fieldName => $file) if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name'])) { $fileName = md5(uniqid(rand(), true)); if (($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) && (!isPDF($file))) { $errors[] = $error; return false; } if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) { return false; } if (isPDF($file)) { $fileName = "P" . $fileName; if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $oldfile = './img/pdf.jpg'; } else { $fileName = "J" . $fileName; if (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $oldfile = $tmpName; } if (!imageResize($oldfile, _PS_PROD_PIC_DIR_.$fileName.'_small', intval(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), intval(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')))) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } if (!chmod(_PS_PROD_PIC_DIR_.$fileName, 0777) OR !chmod(_PS_PROD_PIC_DIR_.$fileName.'_small', 0777)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $cart->addPictureToProduct(intval($product->id), $indexes[$fieldName], $fileName); unlink($tmpName); } return true; } 2. Remplacez le contenu du fichier displayImage.php (repertoire admin) avec ça: <?php $name = $_GET['name']; $file = $_GET['img']; require_once(dirname(__FILE__).'/../config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); $type = substr($file, 0, 1); $img = substr($file, 1); if ($img AND Validate::isMd5($img) AND $name AND Validate::isGenericName($name) AND file_exists(_PS_PROD_PIC_DIR_.$file)) { if ($type == "P") { header('Content-type: application/pdf'); $ext = ".pdf"; } elseif ($type == "J") { header('Content-type: image/jpeg'); $ext = ".jpg"; } header('Content-Disposition: attachment; filename="'.$name.$ext.'"'); echo file_get_contents(_PS_PROD_PIC_DIR_.$file); } ?> 3. Téléchargez l'image attachée et placez-là dans le repertoire "img" (celui à la racine de la boutique, pas celui du thème)4. Dans le fichier "product.tpl" du thème, ajoutez "PDF" à la liste des fichiers autorisés {if $product->uploadable_files} {l s='Allowed file formats are: GIF, JPG, PNG'}{/if} Une fois que tu as créé ton champs de personnalisation "image" pour le produit dans le BO, normalement il peut aussi uploader des pdf.Je pense qu'on peut adapter ce script pour d'autres type de fichiers (j'ai vu dans les forum des solutions pour uploader des zip par exemple). *************Sinon je cherche toujours une solution pour permettre l'affichage d'une miniature du pdf...si quelqu'un a une idée..... Link to comment Share on other sites More sharing options...
pacosxm Posted January 6, 2011 Share Posted January 6, 2011 4eme fois de manip... rien a faire ça passe pas sous 1.3.3...32h non-stop d'ordi... ça peux venir de moi aussi... je vous reviens demain... Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Share Posted February 22, 2011 Hello as-tu trouvé une solution ? même problème que toi, les scripts que j'ai pu trouver sur ce forum ne passent pas sur ma version 1.3 Link to comment Share on other sites More sharing options...
pacosxm Posted February 22, 2011 Share Posted February 22, 2011 Pas exactement, en guise de solution j'ai acheté le module AttributeWizardPro qui permet au client d'uploader tous types de fichiers (.pdf, .eps, .zip, .rar, etc...). Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Share Posted February 22, 2011 ah oki. A combien est le module ?je l'ai testé mais je n'ai aps réussi à uploader de fichiers ai...tu as une démo en ligne ? ca marche sur la 1.3 ? Link to comment Share on other sites More sharing options...
pacosxm Posted February 22, 2011 Share Posted February 22, 2011 Le module n'est pas donné : $115, mais c'est une vrai mine d'or, facile d'emploi et tellement complet.Personellement, aucun soucis jusqu'à la 1.3.6 de Prestashop.tu peux le voir tourner ici : https://ecoprintsxm.com/shop2/(attention je met mon site en vacances / maintenance pour 15 jours dans quelques heures). Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Share Posted February 22, 2011 ah ué merci c'est génial !simple à mettre en place alors ?je te remercie je vais acheter le module alors peut-êtreune dernière question : ou puis-je voir la version du prestashop que j'utilise ? je crois que c'est la 1.3 mais je préfère vérifier avant d'acheter ! Link to comment Share on other sites More sharing options...
pacosxm Posted February 22, 2011 Share Posted February 22, 2011 pour ta version tu vas dans config / settings.inc.phpil est compatible de la 1.2.5 à la 1.3.6 et peut-être +la mise en place est très bien expliquée, mais de toute façon le créateur Tomer est hyper sympa et disponible (c'est un modérateur du forum anglais), mais donc qu'en anglais pour le contacter. Tu trouveras un post en français également sur ce module.si tu rencontre des problèmes, contact moi en MP je te filerais un coup de mains. Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Share Posted February 22, 2011 Question bête on peut aussi uploader des jpeg ? Link to comment Share on other sites More sharing options...
pacosxm Posted February 22, 2011 Share Posted February 22, 2011 on peut uploader tous les types de fichiers il suffit de rajouter le .xxx dans la config du module.pour du jpeg tu rajoute |.jpeg| et c'est tout. Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Share Posted February 22, 2011 je te remercie, je vais l'acheter si jamais j'ai un bug je crie ! lolsi jamais je peux t'aider en retour sur un bug un jour envoie moi un MP, je suis dev html/cs Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now