Jump to content

Module permettant au client de joindre un pdf


Recommended Posts

Bonjour,

Je souhaiterais intégrer la possibilité à mes clients de joindre un pdf a un produit dans ma boutique ( Prestashop 1.5.6.2).

Je m'explique, pour une imprimerie en ligne :

Le client : je souhaite acheter des cartes de visite, je peux lié un fichier pdf dans lequel j'ai créé le visuel de ma carte de visite au produit, puis j'ajoute au panier mon produit, et enfin je réalise mon achat normalement.

L'administrateur du site : je reçois un mail m'indiquant une nouvelle commande, dans lequel je retrouve le pdf. Je peux également consulter le pdf dans l'administration de prestashop.

Quelqu'un aurait trouvé un module capable de réaliser ceci (ormis PDF product costumization) ?

Je vous remercie :)

(Je m'excuse d'avance si je n'ai pas placé au bon endroit ce topic)

Link to comment
Share on other sites

Cela est faisable de base avec la personnalisation.

Vous pouvez créer deux type de champ que le client doit (obligatoire ou non), remplir avant l'ajout au panier :

- champ texte.

- champ fichier : dans lequel il pourrait ajouter son PDF.

 

Le reste, ce n'est que de la mise en page :)

Pas la peine de passer par un module!

Link to comment
Share on other sites

Un qui revient assez souvent et semble très complet c'est Store Commander.

Vérifiez tout de même qu'il fait bien ce que vous souhaiter.

 

Sinon, par import vous parliez d'import CSV ? 

C'est peut être possible de créer des champs de perso lors de l'import, mais je n'ai jamais testé (mes imports se sont toujours limité à des trucs simples : Nom, prix, etc). Essayez de télécharger l'exemple CSV de l'import produit pour voir si ca parle de champ de perso.

Link to comment
Share on other sites

En effet le principe fait déja partie de prestashop avec la personnalisation.

 

Dans sa configuration actuel on ne peux télécharger que des images et pour y remédier il faut faire une simple modif dans le fichier admin/ajaxfilemanager/inc/config.base.php

 

lignes 78, 81 et 83 tu ajoute pdf, ex la ligne 78:

define('CONFIG_EDITABLE_VALID_EXTS', 'txt,htm,html,xml,js,css,pdf'); 

tu peux aussi en profiter pour ajuster la taille des fichiers qui peuvent être uploadés, ligne 74 (ici 5000 passe à 10000)

//UPLOAD OPTIONS CONFIG
define('CONFIG_UPLOAD_MAXSIZE', 10000 * 1024 ); //by bytes 

Il faut savoir que lors du téléchargement, prestashop chiffre le nom du fichier et n'a plus d'extention. Il ajoute une lettre au début (J pour jpeg et P pour pdf).

 

Pour ma part j'ai eu besoin de garder le nom du fichier et j'ai modifié override/controllers/front/ProductController.php.

Si ça t'interesse fait le moi savoir.

Link to comment
Share on other sites

Non il n'y a que le fichier.

Dans l'onglet personnalisation, tu as un bouton "parcourir" qui permet aux clients de choisir leur fichier qui sera envoyé sur ton serveur. Aucune autre information n'est téléchargé.

 

Si je comprend bien tu veux aussi un second fichier qui contient certaines informations ?

 

Pour ma part, en ajoutant des champs textes dans l'onglet personnalisation je récupère le nom du client et le nom du produit que j'ajoute dans le nom du fichier télécharger (plus la date).

 

ex: 14-07-02_Dupont&Compagnie_Affiches_poster.pdf

 

Que voudrais-tu comme infos ?

Link to comment
Share on other sites

Je voulais mettre un champs texte en plus du bouton "Parcourir" pour que le client puisse donner un nom au fichier ( sinon le fichier s'appelle toujours PersonnalisationX ).

Mais ton idée de rajouter 2 champs pour mettre le nom du client et pas mal du tout , je n'y avais pas pensé :)

Si mes fichier pouvaient être de se format ( Date_nomClient_nomFichier.pdf) ça serait parfait :)


Du coup, si tu pouvais me dire comment tu as fait tout ça, et si tu as réussis a faire l'import de produits avec ces champs, sans les rajouter a la main dans le Back office :)

Link to comment
Share on other sites

Je n'avais pas testé le fait de savoir si je pouvais le récupérer dans le BO car, dans mon cas, le fichier sera envoyé sur le RIP (via un script hors prestashop).

 

J'ai donc essayé avec et sans mes modifs, image et pdf et je n'arrive pas à les ouvrir. Dans le BO il y a bien la vignette représentant le fichier et quand je clique dessus une nouvelle fenêtre apparait mais blanche.

 

Par contre le fichier s'ouvre bien en passant par le dossier upload. Dis-moi de ton côté si, en passant une commande fictive, tu peux ouvrir une image importée.

 

Je vais mener mon enquête sur ce phénomène  ^_^ mais d'autres internautes (passant par là) ont une idée, nous sommes preneur.

Edited by frieurieud (see edit history)
Link to comment
Share on other sites

Allez c'est partie (en plus nous avons la même version de prestashop... ça m'arrange  :D) :

 

Avant de modifier quoi que ce soit, pense à sauvegarder tes fichier d'origine.

 

Commençons par ajouter les champs texte (qui seront invisibles aux yeux du client) : MaBoutique\theme\MaBoutique\product.tpl

 

cherche  <p id="customizedDatas"> et ajoute juste en dessous de cette ligne 

<input type="hidden" name="infos1" value="{$customerName|escape:htmlall:'UTF-8'|regex_replace:'/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/':'\1'|replace:' ':'_'}" />

$customerName contient le nom et prénom de l'utilisateur et regex_replace supprime les accents et certains caractère spéciaux.

 

 

Une fois que l'on clique sur le bouton en dessous 'Enregistrer', les données passent par MaBoutique\override\controllers\front\ProductController.php que nous allons modifier afin de transformer le nom du fichier.

 

cherche 

if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))
{
     $fileName = md5(uniqid(rand(), true));

et remplace le par

if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))
{
	date_default_timezone_set('Europe/Paris');
	$nomFichier = $file['name'];  //Récupère le nom du fichier du client
				
	if(!empty($_POST['infos1']))
	{
		$infos = $_POST['infos1'];   //Récupère l'utilisateur du champs 'info1'
	}
	else
		$infos  = 'nolog';
	
	//$fileName = md5(uniqid(rand(), true));
	$fileName = '_'.date('y-m-d').'_'.$infos.'-'.$nomFichier;   //Création du nouveau nom de fichier

Et maintenant ce fameux MaBoutique\Admin\displayImage.php afin de pouvoir l'ouvrir dans le BO

 

Remplace

if (isset($_GET['img']) AND Validate::isMd5($_GET['img']) AND isset($_GET['name']) AND Validate::isGenericName($_GET['name']) AND file_exists(_PS_UPLOAD_DIR_.$_GET['img']))
{
	header('Content-type: image/jpeg');
	header('Content-Disposition: attachment; filename="'.$_GET['name'].'.jpg"');
	echo file_get_contents(_PS_UPLOAD_DIR_.$_GET['img']);
}

par

if (isset($_GET['img']) AND file_exists(_PS_UPLOAD_DIR_.$_GET['img']))
{
	header('Content-Disposition: attachment; filename="'.$_GET['img'].'"');
	echo file_get_contents(_PS_UPLOAD_DIR_.$_GET['img']);
}

Voili voilou, je pense ne rien avoir oublié mais au cas où préviens moi.

Edited by frieurieud (see edit history)
Link to comment
Share on other sites

Parfait  :)

Tout fonctionne pour moi, à part dans le ProductController.php ou j'ai du changer $fieldName en $field_name ( au cas où quelqu'un rencontre le même problème )

Dernière question, comment puis-je mettre le champ personnalisé ( pour upload le fichier ) et le rendre obligatoire dans l'import csv de mes produits ?

Encore merci !

Link to comment
Share on other sites

Super que ça te convienne (si ça ta plu, alors un p'tit "Like this" pour me faire plaisir ?  :D )

 

Il faut prévoir 2 choses. La première, obliger le client à se connecter pour pouvoir accéder à la personnalisation car n'oublions pas que nous avons besoin de son nom pour renommer le fichier.

 

Ensuite il faut être sûr que le fichier soit bien téléchargé (et sans erreur de téléchargement).

 

Dans la partie personnalisation (<!-- Customizable products --> toujours dans product.tpl) il faut mettre une condition de type

<!-- Customizable products -->
{if $logged}
   Affichage du contenu standard de l'onglet personnalisation
{else}
   Affichage d'un texte bien visible invitant l'utilisateur à se connecter pour pouvoir uploader.
{/if}

pour le deuxième cas et avec ce même type de condition, tu peux rendre disabled ou non le bouton 'Ajouter au panier'.

 

Ou bien afficher un message d'alerte si l'utilisateur clique sur 'add to cart' alors qu'il n'est, soit pas connecté soit le fichier ne s'est pas bien téléchargé.

 

Dans ces 2 cas il faut créer une variable booléenne dans le fichier ProductController.php (par exemple isFileOk) et faire ta condition avec elle dans product.tpl

 

Si tu as d'autres questions, n'hésites pas.

Edited by frieurieud (see edit history)
Link to comment
Share on other sites

Cherche toutes les conditions avec la variable $errors et ajoute à la suite ta variable (à false car erreur de chargement) et continue ces même conditions avec un else pour attribuer ta variable à true.

N'oublie de créer ta variable et de lui attribuer la valeur false par défaut.

 

Qu'est ce que tu entends par import csv les champs textes ?

 

Si c'est ça, à mon sens ce n'est pas ProductController.php qui s'en occupe (lui ne fait que télécharger les images). Mais là il faut que je cherche la bête qui s'en occupe.  :P

 

Si toi ou moi avons du nouveau, on se tient au courant.

Link to comment
Share on other sites

J'avoue ne pas bien comprendre ce que tu cherche à vouloir faire.

 

D'un coté nous avons, comme l'explique ton lien, l'import de fichiers csv pour remplir ta boutique. C'est un fichier csv que tu auras préparé préalablement avec ton tableur excel par exemple.

 

De l'autre côté nous avons le client qui envoie sur ton serveur une image et, si il y a des champs prévus, du texte. Mais dans ce cas tu n'as pas de fichiers csv. Le texte saisie par le client est récupéré dans une variable et sera retransmis dans le BO.

 

C'est pour cela que je ne comprend pas pourquoi tu veux du csv, quel est le but recherché.

 

Sinon, dans le BO dans la partie personnalisation, après avoir indiqué le nombre de champs texte que tu souhaite et après avoir 'Enregistrer et rester', tu pourras cocher les case 'requis'. Dans le FO la saisie sera obligatoire. 

Link to comment
Share on other sites

Ce que je cherche a faire n'est pas du coté client.

Je voudrais que ce champs de personnalisation apparaisse sur tous mes produits, or j'ai pour le moment 5000 produits et je vais surement en avoir plus, et je ne vais pas rentrer mes produits un à un et ajouter mon champs personnalisé et cocher la case pour le rendre obligatoire pour chaque produit.

C'est pour ça que je souhaiterais , lors de mon import csv de tous mes produits, créer le champs personnalisé et le rendre obligatoire.
Mais je ne sais pas comment faire ça dans mon csv :/

Link to comment
Share on other sites

:lol: du coup ce que je t'ai dis plus haut ne sert à rien, pour la vérification du fichier téléchargé  :D

Ben oui, je viens de me rendre compte que comme pour les champs textes une case 'requis' existe pour les fichiers... :P

 

Ah la la! code quand tu nous tiens. Et moi qui voulais réécrire prestashop en prestashiot  :D

Link to comment
Share on other sites

:D 

Et bien je voudrait :

Champ fichier : 1

Définissez les libellés des champs fichiers :  Votre fichier

Et que la case soit cocher pour obligatoire  :) 

Mais je n'ai aucune idée de comment faire ça dans mon import  :(

Link to comment
Share on other sites

  • 1 year later...

En effet le principe fait déja partie de prestashop avec la personnalisation.

 

Dans sa configuration actuel on ne peux télécharger que des images et pour y remédier il faut faire une simple modif dans le fichier admin/ajaxfilemanager/inc/config.base.php

 

lignes 78, 81 et 83 tu ajoute pdf, ex la ligne 78:

define('CONFIG_EDITABLE_VALID_EXTS', 'txt,htm,html,xml,js,css,pdf'); 

tu peux aussi en profiter pour ajuster la taille des fichiers qui peuvent être uploadés, ligne 74 (ici 5000 passe à 10000)

//UPLOAD OPTIONS CONFIG
define('CONFIG_UPLOAD_MAXSIZE', 10000 * 1024 ); //by bytes 

Il faut savoir que lors du téléchargement, prestashop chiffre le nom du fichier et n'a plus d'extention. Il ajoute une lettre au début (J pour jpeg et P pour pdf).

 

Pour ma part j'ai eu besoin de garder le nom du fichier et j'ai modifié override/controllers/front/ProductController.php.

Si ça t'interesse fait le moi savoir.

Bonjour,

 

hélas ceci ne semble plu possible dans presta 1.6, ou alors le code a changé et la modif doit etre apliquée qqpart d'autre.

 

Savez vous ce qu'il faut modifier pour que ce soit  faisable avec prestashop 1.6 ?

 

Merci d'avance.

Link to comment
Share on other sites

Bonjour Neoclut,

 

effectivement cela n'est plus possible avec la 1.6 et malheureusement je n'ai pas la solution.

Au final (et pour des besoins que ne pouvaient m'apporter le téléchargement des fichiers par la fiche produit) j'ai opté pour un téléchargement de tous les fichiers au niveau du panier. Il fonctionne sur la 1.5 et je ne l'ai pas encore testé sur la 1.6

 

Désolé

Link to comment
Share on other sites

  • 10 months later...

Bonjour,

Je cherche à ajouter des formats de fichiers supplémentaires à Upload pour le client, sur la page produit.
Déjà les formats acceptés sont GIF, JPG, PNG, et quand j'ajoute un .jpg ça ne fonctionne déjà pas. De plus je voudrais ajouter le format pdf, le format psd, mais aussi le xls ?

J'ai l'impression que la solution donnée par neoclust pourrait fonctionner, sauf que je suis en 1.6.12 :unsure:

Avez vous eu des nouvelles depuis le dernier post ?

 

Merci d'avance pour vos réponses

Link to comment
Share on other sites

  • 1 month 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...