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

Link to comment
Share on other sites

  • 4 weeks later...

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).

Link to comment
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
×
×
  • Create New...