Jump to content
Sign in to follow this  
RckadM

Ajouter des produits dynamiquement

Recommended Posts

Bonjour,

Je souhaiterai pouvoir ajouter des produits de maniéres dynamique.

Exemple : mon client remplit un formulaire pour faire un devis, une fois le devis généré ce même client pourrait ajouter le devis qu'il vient de réaliser dans son panier ( en backoffice le devis généré se transformerai en article).

Est-ce possible ? Comment vous y prendriez vous ?

Merci pour vos réponses ;)

Share this post


Link to post
Share on other sites

Bon, finalement j'ai trouvé...

Je poste surtout pour les débutants (comme moi), alors au cas où certains souhaiterait faire de même voici comment j'ai procédé :

- Ajout d'un formulaire dans la page categories.php.
- Ajout d'une requete sql vers la bdd prestashop (double requete en réalité puisqu'il y a ps_product et ps_product_lang à renseigner) avec les valeurs de mon formulaire.
- Ajout d'un bouton "add to cart" avec l'Id du nouveau produit récupéré sur la bdd.

++

Share this post


Link to post
Share on other sites

Très bonne idée, pouvez-vous mettre à disposition votre/vos fichier/s ? Pour la communauté, merci par avance :D

Share this post


Link to post
Share on other sites

Oui pourquoi pas, mon php est tellement mauvais que j'ai un peu honte de poster mais bon...

La structure est la suivante :
- Ajout d'un formulaire (ici un formulaire de devis pour l'impression d'un livre)
- calcul du devis
- Transformation du devis en produit et insertion du produit dans la bdd (une seule est même commande)
- Lorsque le client clique sur "ajouter au panier" le devis est alors créditer dans le panier

A noter que je ne souhaitais pas afficher ce produit dans mon catalogue j'ai donc mis aucune liaison.

Voici le code à inclure à la fin du fichier : category.php (fichier complet en pièce jointe)

CODE :

echo '<form name="form1" method="post" action="">

Format :

 
- - - - - - - - - - - - - - - - - - - -
A4 (21x29.7cm)
A5 (14.8x21cm)
Livre de poche (11x18cm)
Autre (16x24cm)
Grammage :
 
- - - - - - - - - - - - - - - - - - - -
80g
90g
120g
Reliure :
 
- - - - - - - - - - - - - - - - - - - -
Dos carré collé
Wire-0
Couverture :
 
- - - - - - - - - - - - - - - - - - - -
Pelliculage Mat
Pelliculage Brillant
Sans pelliculage
Nombre de pages :
  <input name="nbepage" type="text" id="nbepage" value="" size="30">
Nombre de pages en couleur :
  <input name="nbepagecouleur" type="text" id="nbepagecouleur" value="" size="30">
Couleur de la typo intérieur :
 
- - - - - - - - - - - - - - - - - - - -
Noir
Couleur
Couleur + noir
Nombre d exemplaires :


  <input name="nbeexemplaire" type="text" id="nbeexemplaire" value="" size="30">


<input type="submit" name="Submit" value="Calculer le devis">

</form>';

?>
<?php if(isset($_POST['Submit']))
{
$nombre1=0;
$nombre2=0;
$nombre3=0;
$nombre4=0;
$nombre5=0;
$nombre6=0;
$nombre7=0;
$nombre8=5;
$total=0;

$format=$_POST['format'];
$format1=$_POST['format1'];
$reliure=$_POST['reliure'];
$couverture=$_POST['couverture'];
$nbepage=$_POST['nbepage'];
$nbepagecouleur=$_POST['nbepagecouleur'];
$typo=$_POST['typo'];
$nbeexemplaire=$_POST['nbeexemplaire'];

switch($format){case 1:$nombre1=0.024;break;case 2:$nombre1=0.012;break;case 3:$nombre1=0.012;break;case 4:$nombre1=0.018;break;}
switch($format1){case 1:$nombre2=0.024;break;case 2:$nombre2=0.012;break;case 3:$nombre2=0.012;break;case 4:$nombre2=0.018;break;}
switch($reliure){case 1:$nombre3=1;break;case 2:$nombre3=0.5;break;}
switch($couverture){case 1:$nombre4=1;break;case 2:$nombre4=1;break;case 3:$nombre4=0.5;break;}
$nombre5=$nbepage*($nombre1+$nombre2);
$nombre7=$nbeexemplaire;
if($nbepagecouleur==0){$nombre6=0;}{$nombre6=$nbepagecouleur*0.60;}
$total=($nombre3+$nombre5+$nombre4+$nombre6)*$nombre7;

mysql_connect("localhost", "root", "");
mysql_select_db("prestashop");
mysql_query("INSERT INTO ps_product VALUES('','0', '0', '2', '0', '0', '0', '1','$total','0','','0','0','1','0','2','0','1','0')") or die('Erreur SQL !'.$sql.''.mysql_error());
$reponse = mysql_query("SELECT * FROM ps_product WHERE price='$total'");
$donnees = mysql_fetch_array($reponse);
$iddevis=$donnees['id_product'];
mysql_query("INSERT INTO ps_product_lang VALUES('$iddevis','2', '0', '0', '0', '0', '0', '0','livres','0')") or die('Erreur SQL !'.$sql.''.mysql_error());
echo 'Prix du devis : '.$total.' euros TTC

';
echo 'basket.png

Ajouter au panier

';
include(dirname(__FILE__).'/footer.php');
mysql_close();
}

?>
<?php include(dirname(__FILE__).'/footer.php'); ?> ---> trés importante cette derniere ligne qui permet de conserver la colonne de droite aprés soumission du formulaire.

Il n'y a pas d'annotation dans le code, si quelqu'un ne comprend pas une ligne je reste à disposition.

Share this post


Link to post
Share on other sites

Je vais bientôt éditer un tutoriel sur l'utilisation des différents outils de Prestashop. Car...

Pour récupérer les variables globales $_GET ou $_POST, vous pouvez utiliser la méthode statique "getValue" de la classe "Tools".

Par exemple:

echo Tools::getValue('format'); // Renverra "(string) $_POST['format']" ou "(string) $_GET['format'] ou "(bool) false".
echo Tools::getValue('format', 'Autre (16x24cm)'); // Renverra "(string) $_POST['format']" ou "(string) $_GET['format'] ou "(string) Autre (16x24cm)".



Pour vérifier qu'une variable a bien été envoyée, vous pouvez utiliser la méthode statique "isSubmit" de la classe "Tools" qui renverra "(bool) true" ou "(bool) false".

Par exemple:

var_dump(Tools::isSubmit('Submit')); // Renverra "(bool) true" ou "(bool) false" si "$_POST['Submit']" est envoyé.



;)

Share this post


Link to post
Share on other sites

Oui en plus prestashop propose plein d'outil pour remplir la base de donnée sans se salir les mains.

En plus ils évitent beaucoup de risque de sécurité.

Une question : avec ce système, il n'y a pas un risque de voir sa boutique se remplir de plein de produit (ici devis) fantome ?

Share this post


Link to post
Share on other sites

Et bien moi, je ne conseil pas ce principe :s
J'ai fait la demande du code à RckadM dans l'unique but que la communauté en profite.
Selon moi, un devis et un devis et une facture est une facture, c'est toujours plus clair comme ça pour le client final.

Share this post


Link to post
Share on other sites

Et bien oui il s'agit bien de produits fantomes. Néanmois, comme je le disais sur le second post, vous pouvez tout à fait générer un produit avec insertion automatique dans une catégorie de votre choix. Cette méthode doit-être améliorée certes, mais dans le même elle permets d'intégrer le panier PrestaShop et sa structure de paiement dans n'importe quel type de site.

Le code plus haut est evidemment incomplet, il faut rajouter des routines de sécuritées, améliorer le code en insérant du AJax par exemple.

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×
×
  • Create New...

Important Information

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