Produits personnalisables par le client

9 messages dans ce sujet

Posté(e) · Signaler ce message

Bonjour à tous,

1 - Etant depuis peu sous peel Premium, je cherche un moyen de proposer au client pour un produit, la personnalisation avec le prénom. (Exemple : bol personnalisé, doudous ...).

Je ne peux me contenter d'entrer des prénoms à la volée dans la base (ex: 10000 prénoms d'un coup) car la fabrication est proposée même pour des prénoms inconnus ou rares.

Comment faire ? Existe-t-il un module tout prêt qui permettrait de proposer cette option pour certains produits (et pas les autres) ?

2 - De même, j'aimerais pouvoir proposer également la personnalisation avec une image à uploader par le client. (option payante)

3 - Enfin, je souhaite que le client joigne au produit (et non à la commande globale) un petit mot qui, par la suite, sera inséré sur une petite carte envoyée avec le produit. (option payante)

Piouf !! Ca en fait des modules ça !! J'ai bien trouvé certains moyens de le faire pour le point n° 1 en détectant la présence de l'option "Prénom" dans les attributs du produit et en remplacant le menu déroulant par un champ texte libre qui, par Ajax, va insérer dans la table peel_attributs le prénom saisi par le client. Mais je ne trouve pas ça très propre.

J'espère que l'un ou l'une d'entre vous a monté un projet identique et que je pourrai profiter de son expérience.

Merci et à très bientôt les peeloux !! ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

la seule solution propre est de modifier la classe caddie et certaines de ses méthodes (ajout,init,place etc) pour ajouter de nouveaux indice au tableau panier. La class caddie actuelle est codée en php4 il n'y a donc ps de notion de public et de private mais il suffit de déclarer une variable $prenom et une variable $message à l'image des autres variables et ensuite de modifier les méthodes ajout,init et place

	function ajout($produitid, $quantite, $cId, $sId, $email_check, $liste_attribut,$prenom="",$message="") {

		if(!isset($this->articles[0])){

			$id=0;

		}else{

			$id=max(array_keys($this->articles))+1;

		}

		$this->articles[$id] = $produitid;

		$this->quantite[$id] = $quantite;

		$this->couleurId[$id] = $cId;

		$this->tailleId[$id] = $sId;

		$this->email_check[$id] = $email_check;

		$this->id_attribut[$id] = $liste_attribut;

		$this->prenom[$id] = $prenom;

		$this->message[$id] = $message

	}

ensuite un peu partout tu devras gerer l'affichage de ce qui aura été saisi : pages caddie.php du repertoire modèles + différentes pages étapes de piement et consignation des infos dans la table des commandes/articles etc etc...

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Reloaded :(

Merci beaucoup pour cette piste. Je vais l'explorer en espérant ne pas trop me perdre et rendre inutilisable ma boutique !!

Bon heureusement que pour le moment, elle n'est pas publique. J'espère quand même pouvoir m'en sortir d'ici la rentrée.

Je vais donc me lancer mais, si jamais je n'y arrive pas, si quelqu'un a un peu de son talent à me consacrer pour atteindre mon objectif, je ne serai pas contre !! ;)

Allez, au boulot !!!

PS : je vais essayer de faire un compte rendu de mes avancées ici ... ça pourra toujours servir à quelqu'un et ça me servira d'aide mémoire également.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Llili,

Quelques infos pour compléter la réponse Reloaded :

- Dans la table peel_commandes_articles, créez un champ prenom (varchar (32)) (ou plus si besoin est) pour stocker le prénom retenu par l'utilisateur final.

- Dans cree_commande, modifiez le SQL de l' "INSERT INTO peel_commandes_articles" pour insérer le prénom que vous stockez dans l'objet caddie

- Enfin, dans le back-office, fichiers administrer/commandes.php et administrer/modeles/commande_details.php, pensez à récupérer la valeur du champ prenom pour l'afficher, ce sera tout de même très pratique !!

- Le process est globalement le même pour gérer une photo.

Cordialement,

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci Jean-Hervé,

Ton post me sera utile quand j'aurai réussi dans un premier temps à transmettre le prénom dans le caddie.

Pour le moment :

J'ai déclaré le module prénom qui s'affiche effectivement bien sur ma fiche produit grâce à la fonction if (is_prenom_module_active()) (actif si, dans la table produit, le produit est concerné par la personnalisation avec le prénom).

Donc, j'ai bien ma petite zône qui s'affiche, prête à recevoir le prénom que l'on veut.

Le problème que je n'arrive pas encore à résoudre se produit au moment de l'ajout au caddie. Le produit se place bien dans le caddie, mais le prénom n'est pas ramené pour être associé à la ligne concernée.

J'ai rajouté ceci dans le fichier caddie_ajout.php (la variable s'appelle prenom_unique pour la distinguer d'une future prenom_double à venir quand j'aurai réussi à implanter celle-là)

//MODULE PRENOM


		if (is_prenom_module_active()) {


				$prenom_unique = substr($_POST['prenom_unique']);


		}
Dans ce même fichier (caddie_ajout), j'enregistre la variable sensée être ramenée par POST dans le tableau de SESSION, comme suit :
$_SESSION['caddie']->ajout($id, $quantite, $couleur_id, $taille_id, $email_check, $liste_attribut, $prenom_unique);
Enfin, dans class/caddie.php, après avoir initialisé le tableau prenom_unique, j'ai modifié la fonction d'ajout au caddie comme ceci :
	function ajout($produit_id, $quantite, $couleur_id, $taille_id, $email_check, $liste_attribut, $prenom_unique)

	{

		if (in_array($produit_id, $this->articles) && empty($email_check)) {

			// Si le produit est dans le caddie, et que ce n'est pas un chèque cadeau, alors on va vouloir fusionner les données dans une même ligne

			foreach ($this->articles as $k => $this_produit_id) {

				if ($produit_id == $this_produit_id  &&  $couleur_id == $this->couleurId[$k] &&  $prenom_unique == $this->prenom_unique_id[$k] && $taille_id == $this->tailleId[$k] && $liste_attribut == $this->id_attribut[$k]) {

					$line_found = $k;

					break;

				}

			}

		}

		if (isset($line_found)) {

			// Le produit existait déjà dans le panier dans la bonne configuration de couleur et de taille

			$quantite = $this->quantite[$line_found] + $quantite;

			$this->place($line_found, $produit_id, $quantite, $couleur_id, $taille_id, $email_check, $liste_attribut, $prenom_unique);

		} else {

			// Une nouvelle ligne doit être créée dans le panier

			if (!isset($this->articles[0])) {

				$numero_ligne = 0;

			} else {

				$numero_ligne = max(array_keys($this->articles)) + 1;

			}

			$this->articles[$numero_ligne] = $produit_id;

			// Si on gère les stocks pour ce produit, la valeur $quantite est temporaire avant validation du stock disponible

			$this->quantite[$numero_ligne] = $quantite;

			$this->couleurId[$numero_ligne] = $couleur_id;

			$this->tailleId[$numero_ligne] = $taille_id;

			$this->email_check[$numero_ligne] = $email_check;

			$this->id_attribut[$numero_ligne] = $liste_attribut;

			$this->prenom_unique_id[$numero_ligne] = $prenom_unique;

			if (is_stock_advanced_module_active() && empty($this->commande_id)) {

				// NB : On ne gère les stocks remporaire que si commande_id est vide, sinon les stocks sont gérés directement avec peel_stocks

				// On appelle recalc_article_general car on doit d'abord récupérer la valeur de $this->etat_stock[$numero_ligne]

				$this->recalc_article_general($numero_ligne);

				if($this->etat_stock[$numero_ligne] == 1){

					$this->quantite[$numero_ligne] = reservation_stock_temp($produit_id, $couleur_id, $taille_id, $quantite, $prenom_unique);

				}

			}

		}

	}

Mais je ne suis pas sûr de moi. A ce stade, ça me parait un peu flou. Je pense ne pas être très loin du but, mais ... :huh:

Allez, je cherche encore !!! Courage ! :)

EDIT : A cette heure, toujours aucune solution, il y a un truc qui ne passe pas. Impossible de transmettre le prénom ... comprends rien ... :angry:

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

   if (is_prenom_module_active()) {


				$prenom_unique = substr($_POST['prenom_unique']);


		}

existe t'il une fonction is_prenom_module_active() ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Oui, je l'ai créée dans module_handler ...

function is_prenom_module_active()

{

	return file_exists($GLOBALS['fonctionsprenom']);

}
... et déclarée dans configuration.inc.php
// Affichage prénom produits

$fonctionsprenom = $dirroot . "/modules/prenom/fonctions.php";

if (is_prenom_module_active() && !defined('LOAD_NO_OPTIONAL_MODULE')) {

	include ($fonctionsprenom);

}

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Eh voilà !! :huh:

Je viens de trouver mon erreur. Je poste ci-dessous la correction du code :

  function ajout($produit_id, $quantite, $couleur_id, $taille_id, $email_check, $liste_attribut, $prenom_unique)

	{

		if (in_array($produit_id, $this->articles) && empty($email_check)) {

			// Si le produit est dans le caddie, et que ce n'est pas un chèque cadeau, alors on va vouloir fusionner les données dans une même ligne

			foreach ($this->articles as $k => $this_produit_id) {

				if ($produit_id == $this_produit_id  &&  $couleur_id == $this->couleurId[$k] &&  $prenom_unique == $this->prenom_unique[$k] && $taille_id == $this->tailleId[$k] && $liste_attribut == $this->id_attribut[$k]) {

					$line_found = $k;

					break;

				}

			}

		}

		if (isset($line_found)) {

			// Le produit existait déjà dans le panier dans la bonne configuration de couleur et de taille

			$quantite = $this->quantite[$line_found] + $quantite;

			$this->place($line_found, $produit_id, $quantite, $couleur_id, $taille_id, $email_check, $liste_attribut, $prenom_unique);

		} else {

			// Une nouvelle ligne doit être créée dans le panier

			if (!isset($this->articles[0])) {

				$numero_ligne = 0;

			} else {

				$numero_ligne = max(array_keys($this->articles)) + 1;

			}

			$this->articles[$numero_ligne] = $produit_id;

			// Si on gère les stocks pour ce produit, la valeur $quantite est temporaire avant validation du stock disponible

			$this->quantite[$numero_ligne] = $quantite;

			$this->couleurId[$numero_ligne] = $couleur_id;

			$this->tailleId[$numero_ligne] = $taille_id;

			$this->email_check[$numero_ligne] = $email_check;

			$this->id_attribut[$numero_ligne] = $liste_attribut;

			$this->prenom_unique[$numero_ligne] = $prenom_unique;

			if (is_stock_advanced_module_active() && empty($this->commande_id)) {

				// NB : On ne gère les stocks remporaire que si commande_id est vide, sinon les stocks sont gérés directement avec peel_stocks

				// On appelle recalc_article_general car on doit d'abord récupérer la valeur de $this->etat_stock[$numero_ligne]

				$this->recalc_article_general($numero_ligne);

				if($this->etat_stock[$numero_ligne] == 1){

					$this->quantite[$numero_ligne] = reservation_stock_temp($produit_id, $couleur_id, $taille_id, $quantite, $prenom_unique);

				}

			}

		}

	}

Petite explication : il n'y avait pas besoin de mettre la variable prenom_unique_id, mais simplement $prenom_unique.

J'avoue que sur ce coup là, je suis fier de moi ! :)

Bon maintenant, il faut que je répercute l'affichage du prénom sur tous les écrans de contrôle (fin de commande, confirmation, mails, administration ...). Un jeu d'enfant ? :angry:

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Lili25,

Félicitations pour votre bonne volonté dans vos travaux !

Un peu d'aide pour : " répercuter l'affichage du prénom sur tous les écrans de contrôle (fin de commande, confirmation, mails, administration ...)"

- Pour afficher le prénom sur la page de confirmation de paiement, le fichier à modifier est modeles/xxxx/achat_confirmation.php

Après

$couleurId = vb($_SESSION['caddie']->couleurId[$i]);

$tailleId = vb($_SESSION['caddie']->tailleId[$i]);

Ajoutez

$prenom = vb($_SESSION['caddie']->prenom[$i]);

Et faites un echo de $prenom, par exemple juste avant les lignes :

if (display_prices_with_taxes_active()) {

echo '

<td class="lignecaddie" align="center">' . fprix($prix_cat, true) . '</td>

';

- Vous pouvez faire un travail analogue pour afficher le prénom dans la page du caddie en modifiant comme précédemment le fichier modeles/XXXXX/caddie.php

- Pour l'envoi d'emails, tout est géré dans la fonction email_commande(), qui devrait être assez simple à modifier.

- Enfin, pour le back-office, les modifs sont à apporter à /administrer/modeles/commande_details.php (afficher les prénoms) et administrer/commandes.php (récupérer les prénoms de la base, table peel_commandes_articles)

En espérant vous avoir aidée,

Cordialement,

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping