Jump to content

[Résolu] Enregistrement dynamique d'images et de produits


Recommended Posts

Bonjour à tous,

 

Je développe actuellement un module et j'ai bien besoin de vos lumières pour finir le projet !

 

D'abord, quelques mots à propos du contexte : il s'agit d'un module de type "personnalisation de produits", qui permet à tous les visiteurs de créer leurs propres produits (t-shirts, casquettes, tapis de souris, etc.), en utilisant une bibliothèque de pictogrammes, en saisissant leurs propres textes et/ou en envoyant leurs images.

 

Une grande partie des scripts n'est donc pas intimement liée à Prestashop --- il s'agit grosso modo de comportements jQuery permettant de déplacer les éléments à la souris, d'effectuer des rotations, des redimensionnements, etc. 

- Les "produits de base" (t-shirts, tapis de souris, etc.) et les pictogrammes prêts à l'emploi sont deux catégories de produits Prestashop. Je parviens correctement à les charger, à les afficher sur le "canevas" offert aux visiteurs, etc.

- Lorsque l'utilisateur est satisfait de son produit et qu'il désire le commander, une boucle de traitement vérifie la qualité des images qu'ils ont envoyées, le non-dépassement de la zone imprimable, etc.

 

Je me suis dit que la solution la plus facile pour assurer la commande par la suite consistait à enregistrer la réalisation de chaque client en tant que nouveau produit dans le catalogue. Là encore, c'est OK, à travers la classe Product et la méthode add() --- de nouvelles entrées apparaissent dynamiquement et le client peut ainsi procéder au paiement, revoir son historique, etc.

 

Je parviens également à enregistrer la "composition" qu'il a réalisée, dans un dossier de mon serveur web, sous forme de JPEG. 

J'aimerai associer cette image au produit correspondant ! Mais je rencontre des difficultés pour associer l'image que j'ai enregistrée --- existe-t-il une méthode aussi simple que add() pour associer dynamiquement une image à un nouveau produit ?

 

Merci beaucoup pour votre éclairage !

 

 

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

J'ajoute juste une question subsidiaire : je fais appel à votre propre expérience ; dans mon cas de figure, ne vaut-il pas mieux, finalement, écrire la requête SQL "à la main" plutôt que de faire appel à ce type de fonctions ? Quelles sont les habitudes des créateurs de modules ?

 

Merci !

Link to comment
Share on other sites

  • 4 weeks later...

Hello !

 

C'est encore moi :-)

 

J'en profite pour publier le résultat de mes recherches, ça pourra peut-être servir à un autre utilisateur par la suite !

J'ai réussi à obtenir le résultat escompté sous PrestaShop 1.5.6.

 

Quelques explications (et donc des mots-clés pour d'éventuelles recherches :-))

- Il s'agit ici d'un script PHP, appelé depuis un bouton d'un module perso (via $.ajax, jQuery)

- On crée un nouveau produit à partir d'infos passées dans la requête $_POST

- On lui associe une image, précédemment traitée par un autre script PHP

 

Voici mon code commenté :

$produit = new Product(12345, true, $cookie->id_lang);
			 
// Définition du produit
// Je ne complète ici que certains champs
$produit->name = "Mon produit";
// En réalité : je prends le résultat de requêtes $_POST, passées au script via un appel $.ajax en jQuery
//$produit->name = $titre;
//$produit->price = $prix;
$produit->category = array(10); // A changer
$produit->id_category_default = 10; // A changer
$produit->description_short = array((int)(Configuration::get('PS_LANG_DEFAULT')) => 'test');
$produit->link_rewrite = array((int)(Configuration::get('PS_LANG_DEFAULT')) => 'test');
$produit->active = 1;

// Le produit est créé dans la table "ps_product"		
$produit->add();

// On met à jour la table "ps_category_product"
$produit->addToCategories($produit->category);		   

$id_product = $produit->id;

// Une petite image de test ! :-)
$url = "http://static.giantbomb.com/uploads/original/16/161219/2424758-batman_render.png";

// En réalité, je prends ici une image traitée précédemment par un autre script PHP
// L'objectif est d'avoir son URL
	
$shops = Shop::getShops(true, null, true);    

$image = new Image();
// On associe l'id du produit fraîchement créé
$image->id_product = $id_product;
// On place l'image en tête de position
$image->position = Image::getHighestPosition($id_product) + 1;
// On en fait l'image de couverture
$image->cover = true;
// On ajoute l'image à la table "ps_image"
if (($image->validateFields(false, true)) === true && ($image->validateFieldsLang(false, true)) === true && $image->add())
{
	$image->associateTo($shops);
	// Il s'agit ici d'un appel à la méthode copyImg (ligne 874, controllers/admin/AdminImportController.php)
	// Si "self" est en-dehors du scope du module, la solution la plus simple
	// reste de copier-coller la fonction copyImg() dans le présent script et de l'appeler directement
	if (!self::copyImg($id_product, $image->id, $url, 'products', false))
	{
		$image->delete();
	}
}

C'est pas un modèle du genre, loin de là, mais ça permet de creuser un peu davantage le sujet.

Si ça vous sert, c'est fait pour ça :-)

Edited by efostile (see edit history)
Link to comment
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
×
×
  • Create New...