Jump to content

Extension de fichier dans l'onglet personnalisation (1.5.4)


Recommended Posts

Bonjour,

 

Je reviens à nouveau vers vous car je viens de découvrir que l'onglet personnalisation ne permet l'upload que de certains fichiers (images).

 

J'aimerai qu'on puisse joindre à une commande des fichiers .ai, .eps ou .pdf par exemple.

 

Une idée de comment faire ?

 

Merci encore à mon futur sauveur qui saura me résoudre ce problème :D

Share this post


Link to post
Share on other sites

Bonjour,

j'ai le même problème. Tous ce que j'ai trouvé sont des modules payants. Il y a personne qui peut nous fournir des modifs (ou donner des astuces au moins) dans les scripts?

Share this post


Link to post
Share on other sites

  • 4 weeks later...

Idem pour moi je souhaiterais intégré un document pdf.

En fouillant dans le code dufichier product.tpl je pensais trouver mais rien. Je pense qu'il nous faut simplement le dossier/fichier où se trouve ce code?

 

Quelqu'un à une idée??

Share this post


Link to post
Share on other sites

La gestion des uploads des fichiers de personnalisation est gérée ProductController (front)

		if (Tools::isSubmit('submitCustomizedDatas'))
		{
			// If cart has not been saved, we need to do it so that customization fields can have an id_cart
			// We check that the cookie exists first to avoid ghost carts
			if (!$this->context->cart->id && isset($_COOKIE[$this->context->cookie->getName()]))
			{
				$this->context->cart->add();
				$this->context->cookie->id_cart = (int)$this->context->cart->id;
			}
			$this->pictureUpload();
			$this->textRecord();
			$this->formTargetFormat();
		}

Qui renvoi là

	protected function pictureUpload()
{
	if (!$field_ids = $this->product->getCustomizationFieldIds())
		return false;
	$authorized_file_fields = array();
	foreach ($field_ids as $field_id)
		if ($field_id['type'] == Product::CUSTOMIZE_FILE)
			$authorized_file_fields[(int)$field_id['id_customization_field']] = 'file'.(int)$field_id['id_customization_field'];
	$indexes = array_flip($authorized_file_fields);
	foreach ($_FILES as $field_name => $file)
		if (in_array($field_name, $authorized_file_fields) && isset($file['tmp_name']) && !empty($file['tmp_name']))
		{
			$file_name = md5(uniqid(rand(), true));
			if ($error = ImageManager::validateUpload($file, (int)Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))
				$this->errors[] = $error;

			$product_picture_width = (int)Configuration::get('PS_PRODUCT_PICTURE_WIDTH');
			$product_picture_height = (int)Configuration::get('PS_PRODUCT_PICTURE_HEIGHT');
			$tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
			if ($error || (!$tmp_name || !move_uploaded_file($file['tmp_name'], $tmp_name)))
				return false;
			/* Original file */
			if (!ImageManager::resize($tmp_name, _PS_UPLOAD_DIR_.$file_name))
				$this->errors[] = Tools::displayError('An error occurred during the image upload.');
			/* A smaller one */
			elseif (!ImageManager::resize($tmp_name, _PS_UPLOAD_DIR_.$file_name.'_small', $product_picture_width, $product_picture_height))
				$this->errors[] = Tools::displayError('An error occurred during the image upload.');
			elseif (!chmod(_PS_UPLOAD_DIR_.$file_name, 0777) || !chmod(_PS_UPLOAD_DIR_.$file_name.'_small', 0777))
				$this->errors[] = Tools::displayError('An error occurred during the image upload.');
			else
				$this->context->cart->addPictureToProduct($this->product->id, $indexes[$field_name], Product::CUSTOMIZE_FILE, $file_name);
			unlink($tmp_name);
		}
	return true;
}

Le fichier est vérifié par ImageManager via la méthode validateUpload avant d'être copier sur le serveur puis d'être redimensionné pour générer des miniatures.

 

La méthode barbare serait de modifier directement ce code pour gérer le cas où le fichier n'est pas une image et donc vérifier si ce type de fichier est autorisé avant le transférer sans générer de miniature etc... puis le l'attacher au produit dans le panier.

Mais à chaque mise à jour de Prestashop il faudrait tout recommencer.

 

Pour le faire plus proprement, il existe des tas de modules qui permettent aux clients d'envoyer des fichiers joints et de les rattacher à une commande. (Il faut donc préalablement qu'ils aient passé commande avant d'envoyer leur fichier).

Share this post


Link to post
Share on other sites

  • 1 month later...
  • 4 months later...
  • 4 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More